int main(int argc, char* argv[])
{
    try
    {
        po::options_description desc("Options");
        desc.add_options()
            ("help", "show help message")
            ("dubins", "use Dubins state space")
            ("dubinssym", "use symmetrized Dubins state space")
            ("reedsshepp", "use Reeds-Shepp state space (default)")
            ("easyplan", "solve easy planning problem and print path")
            ("hardplan", "solve hard planning problem and print path")
            ("trajectory", po::value<std::vector<double > >()->multitoken(),
                "print trajectory from (0,0,0) to a user-specified x, y, and theta")
            ("distance", "print distance grid")
        ;

        po::variables_map vm;
        po::store(po::parse_command_line(argc, argv, desc,
            po::command_line_style::unix_style ^ po::command_line_style::allow_short), vm);
        po::notify(vm);

        if (vm.count("help") || argc==1)
        {
            std::cout << desc << "\n";
            return 1;
        }

        ob::StateSpacePtr space(new ob::ReedsSheppStateSpace);

        if (vm.count("dubins"))
            space = ob::StateSpacePtr(new ob::DubinsStateSpace);
        if (vm.count("dubinssym"))
            space = ob::StateSpacePtr(new ob::DubinsStateSpace(1., true));
        if (vm.count("easyplan"))
            plan(space, true);
        if (vm.count("hardplan"))
            plan(space, false);
        if (vm.count("trajectory"))
            printTrajectory(space, vm["trajectory"].as<std::vector<double> >());
        if (vm.count("distance"))
            printDistanceGrid(space);
    }
    catch(std::exception& e) {
        std::cerr << "error: " << e.what() << "\n";
        return 1;
    }
    catch(...) {
        std::cerr << "Exception of unknown type!\n";
    }

    return 0;
}
void singlePlanner::executeTrajectory(vector<Vector> &_bestTraj,
                                      vector<Vector> &_bestTrajRoot,
                                      const string &color)
{

    updatePlanner();
    _bestTraj = generateTrajectory();
    _bestTrajRoot = getBestTrajRoot();
    printTrajectory();
    if (running_mode=="single")
    {
        displayPlan(color);
        logTrajectory();
    }
}