public static void main(String[] args) {
    try {
      PlanStackData planData = new PlanStackData(10);

      TrackModel model = TrackModel.load("wheel2.saved_model");

      Point2D.Double point = new Point2D.Double(0.5, 90.0);
      OpponentObserver obs = new de.janquadflieg.mrracer.opponents.DebugObserver(point);

      double dist = 5.0;

      planData.addSegment(0, model.getSegment(0).getLength() - dist, 25.0);

      String msg =
          "(angle 0)(curLapTime 10.21)(damage 0)(distFromStart "
              + String.valueOf(dist)
              + ")(distRaced 10.0)(fuel 94)(gear 5)(lastLapTime 0)(opponents 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200)(racePos 1)(rpm 942.478)(speedX 170.0)(speedY 0)(speedZ 0.0196266)(track 4.00001 4.06171 4.25672 4.61881 5.22164 6.22291 8.00001 11.6952 23.0351 200 46.0701 23.3904 16 12.4458 10.4433 9.2376 8.51342 8.12341 7.99999)(trackPos 0.333332)(wheelSpinVel 0 0 0 0)(z 0.339955)(focus -1 -1 -1 -1 -1)";

      PlanStraight planner =
          new PlanStraight(new Plan2011(new de.janquadflieg.mrracer.controller.MrRacer2012()));

      planner.plan(planData, new SensorData(new scr.MessageBasedSensorModel(msg)), model, obs);

    } catch (Exception e) {
      e.printStackTrace(System.out);
    }
  }