{"id":18439423,"url":"https://github.com/idiap/ilqr_planner","last_synced_at":"2025-07-18T12:33:43.252Z","repository":{"id":144962209,"uuid":"505346273","full_name":"idiap/ilqr_planner","owner":"idiap","description":"A C++ iLQR library that allows you to solve iLQR optimization problem on any robot as long as you provide an URDF file describing the kinematics chain of the robot","archived":false,"fork":false,"pushed_at":"2024-08-07T09:57:20.000Z","size":4002,"stargazers_count":12,"open_issues_count":1,"forks_count":7,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-23T01:01:45.958Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/idiap.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2022-06-20T07:55:50.000Z","updated_at":"2025-03-04T05:53:51.000Z","dependencies_parsed_at":"2024-11-06T06:27:42.306Z","dependency_job_id":"ef793258-5802-427c-b9e6-0776fce46344","html_url":"https://github.com/idiap/ilqr_planner","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idiap%2Filqr_planner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idiap%2Filqr_planner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idiap%2Filqr_planner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idiap%2Filqr_planner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/idiap","download_url":"https://codeload.github.com/idiap/ilqr_planner/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247732682,"owners_count":20986901,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-11-06T06:24:43.262Z","updated_at":"2025-04-07T21:32:20.699Z","avatar_url":"https://github.com/idiap.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--\nSPDX-FileCopyrightText: 2023 Idiap Research Institute \u003ccontact@idiap.ch\u003e\n\nSPDX-FileContributor: Jeremy Maceiras  \u003cjeremy.maceiras@idiap.ch\u003e\n\nSPDX-License-Identifier: GPL-3.0-only\n--\u003e\n\n# iLQR_planner package\n\nThis package provides a C++ iLQR library that comes with its python bindings. It allows you to solve iLQR optimization problem on any robot as long as you provid an [URDF file](http://wiki.ros.org/urdf/Tutorials) describing the kinematics chain of the robot. For debugging purposes it also provide a 2D planar robots class that you can use. You can also apply a spatial transformation to compute robot task space information in the base frame of your choice (e.g. object frame).\n\nCurrently, you can optimize different kind of systems:\n\n- Task-space position.\n- Task-space position + orientation (quaternion).\n- Task-space position + orientation (quaternion) + time.\n\nIt also offers you the ability to optimize multiple systems at once (by concatenating them). These systems can be either single integrator or double integrator.\n\nThe iLQR problem can be solved by these different manners:\n\n- Recursive solution.\n- AL-iLQR solution.\n- Batch iLQR with control primitives (sparse computation).\n- Batch iLQR (sparse computation)\n\n## Approach of the library\n\n![Library approach](images/approach_diagram.png)\n\nTo use the library you have to define 3 different objects by answering to these three questions:\n\n### 1. Which object do I want to control?\n\nOnce you have answered this question you can create a ``SimulationInterface`` Object (either by using the ``KDLRobot`` or ``2DRobot`` class).\n\n### 2. What do you want to track?\n\nOnce you have answered this question you can create the appropriate ``System`` object.\n\n### 3. How do you want to optimize the problem?\n\nOnce you have answered this question you can create the appropriate ``Solver`` object.\n\n![Full class diagram](images/full_diagram.png)\n\n## Structure of the repository\n\n- ``ilqr_planner`` contains the C++ library source code.\n- ``pylqr_planner`` contains the python bindings of the C++ library as well as python tutorials in ``pylqr_planner/Tutorials``.\n\n## Dependencies\n\nAll the computations use [Eigen3](https://eigen.tuxfamily.org/index.php?title=Main_Page).\n\nFor the kinematics model of the robot, we use [KDL](https://www.orocos.org/kdl.html)\n\nTo load the URDF file and transform it into a KDL Object we use [TinyURDFParser](https://github.com/idiap/tinyurdfparser), an URDF parser based on [TinyXML2](https://github.com/leethomason/tinyxml2) that does not need ROS.\n\nPython bindings are build with the help of [pybind11](https://github.com/pybind/pybind11).\n\n## Install\n\nOnce you managed to install all the dependencies, you can install the library by:\n\n```bash\n    $ cd \u003cwhere you downloaded your package\u003e\n    $ git submodule update --init --recursive\n    $ ./build.sh\n```\nThe cmake supports three different way to install the python bindings:\n\n- Inside a conda environment (it will automatically detect if you are using conda and install it in the active environment)\n- Inside a ROS workspace, for this you can pass the parameter ``-DUSE_CATKIN=1``.\n- If none of the possibilities above is available it will simply install the python package in your system directly.\n\n* To uninstall the library, you can similarly execute the ``uninstall.sh`` file. *\n\n## ROS Based installation\n\n1. Make sure to clone the repository inside a ROS workspace (or move it manually).\n2. Build the workspace with: ``catkin build -DUSE_CATKIN=1``.\n\n## Documentation\n\n### C++ documentation\n\nNo proper documentation is available at the moment. If you want to get API documention, Header files are documented.\n\n### Python documentation\n\nAPI Documentation can be generated with sphinx:\n\n```bash\n    $ cd \u003cwhere you downloaded your package\u003e/pylqr_planner/docs\n    $ make html\n```\n\nAfter that, you can access the generated documentation by opening the ``index.html`` file in ``pylqr_planner/docs/build/html``\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidiap%2Filqr_planner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fidiap%2Filqr_planner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidiap%2Filqr_planner/lists"}