{"id":38661340,"url":"https://github.com/quimortiz/dynoplan","last_synced_at":"2026-01-17T09:39:29.270Z","repository":{"id":182594797,"uuid":"668763143","full_name":"quimortiz/dynoplan","owner":"quimortiz","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-23T16:16:23.000Z","size":2024,"stargazers_count":102,"open_issues_count":7,"forks_count":16,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-09-30T10:09:26.665Z","etag":null,"topics":["motion-planning","robotics","trajectory-optimization"],"latest_commit_sha":null,"homepage":"https://quimortiz.github.io/idbastar","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quimortiz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-07-20T14:35:05.000Z","updated_at":"2025-09-15T12:48:29.000Z","dependencies_parsed_at":null,"dependency_job_id":"d69a4abc-a9e7-4fd1-9d41-95f16589ac7e","html_url":"https://github.com/quimortiz/dynoplan","commit_stats":null,"previous_names":["quimortiz/idbastar","quimortiz/dynoplan"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/quimortiz/dynoplan","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quimortiz%2Fdynoplan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quimortiz%2Fdynoplan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quimortiz%2Fdynoplan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quimortiz%2Fdynoplan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quimortiz","download_url":"https://codeload.github.com/quimortiz/dynoplan/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quimortiz%2Fdynoplan/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28505565,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T06:57:29.758Z","status":"ssl_error","status_checked_at":"2026-01-17T06:56:03.931Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["motion-planning","robotics","trajectory-optimization"],"created_at":"2026-01-17T09:39:22.916Z","updated_at":"2026-01-17T09:39:27.171Z","avatar_url":"https://github.com/quimortiz.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dynoplan 🦖\n\nNote: We have just submitted a publication to T-RO. Preprint is available [here](https://arxiv.org/abs/2311.03553).\nWe will clean the code, update the readme and write a small tutorial in the following weeks.\n\n\u003c!---\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/quimortiz/dynoplan/assets/32126190/87259a14-cbe4-4f9f-9cbb-47053cde594f\"\u003e\n\u003c/p \u003e\n--\u003e\n\u003cp\u003e\n  \u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/quimortiz/dynoplan/assets/32126190/b14905b7-8a8b-435e-be6e-11dfc49f909a\"\u003e\n\u003c/p \u003e\n\nDynoplan is a small library for solving kinodynamic motion planning problems, as defined in [Dynobench](https://github.com/quimortiz/dynobench) :t-rex:. It implements 3 different algorithms: Trajectory Optimization with geometric initial guess (RRT*-TO), Sample based Motion Planning (SST*), and Iterative Search and Optimization (iDb-A*).\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"assets/example1.png\" width=60% height=auto\u003e\n\u003c/p \u003e\n\n\n\n\nThe first version [kinodynamic-motion-planning-benchmark](https://github.com/imrCLab/kinodynamic-motion-planning-benchmark) is now deprecated.\n\n## Robots and Problem Description\n\nKinodynamic motion planning problem are defined in [Dynobench](https://github.com/quimortiz/dynobench)\n\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"assets/dynobench.png\" width=30% height=auto\u003e\n\u003c/p \u003e\n\n\n## Examples and Tests\n\nCheck the tests in `test` to learn how to use the code!\n\n## Planners\n\n- Trajectory Optimization: several algorithms for optimization with free terminal time, built on top of Differential Dynamic Programming (Crocoddyl).\n- RRT*-TO: Geometric Planner RRT* (OMPL)  + Trajectory Optimzation\n- iDb-A*: Iterative disccontinuity bounded search and Trajectory Optimization\n- SST*: Stable Sparse Tree (OMPL)\n- Dbrrt, AO-dbrrt and DBrrtConnect, DB-SST* (coming soon!)\n\n## Building\n\nYou can check the Github CI [cmake.yml](.github/workflows/cmake.yml) to see how to compile the project in latest ubuntu (For ubuntu 20.04, we experienced some issues with g++-9, but clang-13 is fine.)\n\nDependencies:\n\n* Boost\n* fcl (0.7)\n* yaml-cpp\n* Eigen3\n* Crocoddyl (1.8)\n* OMPL (1.6)\n\nWe need OMPL 1.6 for planners RRT + TO and  SST. We recommend to install OMPL in a local directory with -DCMAKE_INSTALL_PREFIX, and use -DCMAKE_PREFIX_PATH here\n\n## Motion Primitives\n\nYou will find a small set of motion primitives for each system in [dynobench](https://github.com/quimortiz/dynobench). 5000 primitives per system are available in [dynomotions](https://github.com/quimortiz/dynomotions). These primitives are required for running the test.\n\nFinally, the comple set of primitives for each system can be downloaded from Google Drive. This can be done manually with a web browser or using the command line with [gdown](https://github.com/wkentaro/gdown). This is required to run the benchmark. For example:\n\n```\ngdown --fuzzy \"https://drive.google.com/file/d/1r_ecGwdfvWnVWxPsvR4d8Hjcayxg5PsB/view?usp=drive_link\"\n```\nWe provide the script `download_primitives.bash` to download all primitives, that will be stored in folder `dynomotions_full`.\n\nAll primitive in two ZIP files:  https://drive.google.com/drive/folders/1-Nvctva17I8aFsWvHfdQFWTIDUNWwgcM?usp=drive_link\n\nPrimitves per system:\n\n* unicycle1_v0\nhttps://drive.google.com/file/d/15dXqC_OdrI8KjaHRNakYgk9IXLtTeMtt/view?usp=drive_link\n\n* quadrotor_v1 (OMPL-style)\nhttps://drive.google.com/file/d/1r_ecGwdfvWnVWxPsvR4d8Hjcayxg5PsB/view?usp=drive_link\n\n* quadrotor_v0\nhttps://drive.google.com/file/d/1j57kwE5hFgO-46LjStv_zqm6S5BFUsY8/view?usp=drive_link\n\n* Acrobot_v0\n  https://drive.google.com/file/d/1mLiTgcpXSI9UHHss4Qt7AIsRwJPbPC2H/view?usp=drive_link\n\n* Roto_Pole_v0\nhttps://drive.google.com/file/d/1KMb4IDgucHN8uWI9YN_W07AhX59tkph_/view?usp=drive_link\n\n* Planar Rotor_v0\nhttps://drive.google.com/file/d/18kI3qXweA4RgvDxtV3vfxnfc_BhX52j8/view?usp=drive_link\n\n* Car1_v0\nhttps://drive.google.com/file/d/1TPX3c8RvMOy9hiaKL-kUE8M61OknDrDK/view?usp=drive_link\n\n* Unicycle 2 _v0\n  https://drive.google.com/file/d/1PoK1kbiLRFq_hkv3pVWU0csNr4hap0WX/view?usp=drive_link\n\n* Unicycle 1 v2\nhttps://drive.google.com/file/d/1IvwN-e1jn5P0P1ILaVwSrUnIeBlFxhHI/view?usp=drive_link\n\n* Unicycle 1 v1\nhttps://drive.google.com/file/d/1OLuw5XICTueoZuleXOuD6vNh3PCWfHif/view?usp=drive_link\n\n\n\n## How to generate motion primitives for new systems\n\nWe will show how to generate motion primitives for the `integrator1_2d_v0`\n\n* Step one: Implement the Dynamics in Dynobench, following the tutorial for the `Integrator2_2d` in the `README` (in this case `integrator1_2d_v0` is already implemented)\n\n* Step two: Solve Optimization Problems with Random Start and Goals\n```\n./main_primitives --mode_gen_id 0  --dynamics integrator1_2d_v0 --models_base_path ../dynobench/models/   --max_num_primitives 200 --out_file /tmp/my_motions.bin\n```\nPrimitives will be store in `/tmp/my_motions.bin` and `/tmp/my_motions.bin.yaml`.  You can pass options to the solver for trajectory optimization.\n\n* Step Three: Improve the cost of the primitives\n\n```\n./main_primitives --mode_gen_id 1  --dynamics integrator1_2d_v0 --models_base_path ../dynobench/models/   --max_num_primitives 200  --in_file /tmp/my_motions.bin --solver_id 1\n```\n\nBy default, primitives are stored in `/tmp/my_motions.bin.im.bin` and `/tmp/my_motions.bin.im.bin.yaml`. You can pass options to the solver for trajectory optimization.\n\n\n* Step Fours: Randomnly cut primitives\n\n```\n./main_primitives --mode_gen_id 2 --in_file     /tmp/my_motions.bin.im.bin    --max_num_primitives -1   --max_splits 1  --max_length_cut 50  --min_length_cut 5 --dynamics integrator1_2d_v0 --models_base_path ../dynobench/models/\n```\n\nBy default, primitives will be stored in `/tmp/my_motions.bin.im.bin.sp.bin` and `/tmp/my_motions.bin.im.bin.sp.bin.yaml`\n\n\nDone!\n\nAdditionally, `main_primitives` provide more useful functionality, such as conversion between formats, computing statistics, generating primitives with random rollouts, sorting primitives and resampling of primitives.\n\n\n## Benchmark\n\nResults of reported in our TRO paper are in folder `tro_results`. To replicate the results use commit: `xxxxx`. The code is under continuous development, but the benchmark should work also with newer commits. If you experience any problem, please open an ISSUE.\n\nFirst, download primitives with:\n\n```\nbash -x download_primitives.bash\n```\n\nPrimitvies are stored in a new `dynomotions_full` directory. Next, move to the `build` directory and run commands:\n\nBenchmark between planners\n\n```\npython3 ../benchmark/benchmark.py -m bench -bc    ../benchmark/config/compare.yaml\n```\n\nGenerate fancy table\n```\npython3  ../benchmark/benchmark.py --mode fancy --bench_cfg ../benchmark/config/plot_results_v3.yaml\n```\n\n(last version)\n```\npython3  ../benchmark/benchmark.py --mode fancy --bench_cfg ../benchmark/config/plot_results_v4.yaml\n```\n\nGenerate table for website\n```\npython3  ../benchmark/benchmark.py --mode fancy --bench_cfg ../benchmark/config/plot_results_v_all.yaml\n```\n\n(last version)\n```\npython3  ../benchmark/benchmark.py --mode fancy --bench_cfg ../benchmark/config/plot_results_v_all_v4.yaml\n```\n\n\n\nGenerate plots only for three for the paper.\n```\nPAPER=1 python3  ../benchmark/benchmark.py --mode bench --bench_cfg  ../benchmark/config/plot_results_v3_threePlots.yaml\n```\n\n\n\n### Search heuristic\n\nStudy of heuristic functions\n```\npython3 ../benchmark/benchmark.py -m bench_search -bc    ../benchmark/config/bench_search.yaml\n```\n\nOnly analyze the results\n```\npython3 ../benchmark/benchmark.py -m bench_search -bc    ../benchmark/config/bench_search_make_table_tro.yaml\n```\n\nResults for website\n```\npython3 ../benchmark/benchmark.py -m bench_search -bc    ../benchmark/config/bench_search_make_table_tro_all.yaml\n```\n\n\n\n### Optimization with Free terminal time\n\nStudy of strategy for trajectoy optimization with free terminal time\n```\npython3 ../benchmark/benchmark.py -m bench_time -bc    ../benchmark/config/bench_time.yaml\n```\n\nLatex Table with subset of results shown in the paper:\n```\ntime python3 ../benchmark/benchmark.py -m bench_time -bc ../benchmark/config/make_table_time_tro.yaml\n```\n\nFor website table:\n```\ntime python3 ../benchmark/benchmark.py -m bench_time -bc ../benchmark/config/make_table_time_tro_all.yaml\n```\n\n\n\n\n\n\n\nStudy of time spent in each component\n\n```\npython3   ../benchmark/benchmark.py -m study  -bc ../benchmark/config/bench_abblation_study.yaml\n```\n\n(Results in TRO)\n\n```\npython3   ../benchmark/benchmark.py -m study  -bc ../benchmark/config/bench_abblation_results_tro.yaml\n```\n\n\n\n\nYou can modify each config file to change the number of runs, the evaluated problems and the maximum time.\nThe configurations files we used for `TRO` have prefix `TRO`.\n\nThe paramteres for each algorithm are in `.yaml` files inside the `benchmark/config/algs` directory, for example `idbastar_v0.yaml`.\n\n\n\n## Visualization\n\n\nPlot environments (modify python file to select which envs to print)\n```\ncd build\npython3 ../plot_all_envs.py\n```\n\nVisualize trajectores\n\n```\nDO something\n```\n\n\n\n\n\n\n\n## Citing\n\nIf you use or work for academic research, please cite:\n\n```\n@misc{ortizharo2023idba,\n      title={iDb-A*: Iterative Search and Optimization for Optimal Kinodynamic Motion Planning},\n      author={Joaquim Ortiz-Haro and Wolfgang Hoenig and Valentin N. Hartmann and Marc Toussaint},\n      year={2023},\n      eprint={2311.03553},\n      archivePrefix={arXiv},\n      primaryClass={cs.RO}\n}\n```\n\n\n```\n@misc{hoenigDbADiscontinuityboundedSearch2022,\n  title = {Db-A*: Discontinuity-Bounded Search for Kinodynamic Mobile Robot Motion Planning},\n  author = {Hoenig, Wolfgang and Ortiz-Haro, Joaquim and Toussaint, Marc},\n  year = {2022},\n  eprint = {2203.11108},\n  eprinttype = {arxiv},\n  url = {http://arxiv.org/abs/2203.11108},\n  archiveprefix = {arXiv}\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquimortiz%2Fdynoplan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquimortiz%2Fdynoplan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquimortiz%2Fdynoplan/lists"}