https://github.com/hybridrobotics/ilqr-iterative-tasks
i2LQR: Iterative LQR for Iterative Tasks in Dynamic Environments (CDC 2023) https://arxiv.org/abs/2302.14246
https://github.com/hybridrobotics/ilqr-iterative-tasks
Last synced: about 1 year ago
JSON representation
i2LQR: Iterative LQR for Iterative Tasks in Dynamic Environments (CDC 2023) https://arxiv.org/abs/2302.14246
- Host: GitHub
- URL: https://github.com/hybridrobotics/ilqr-iterative-tasks
- Owner: HybridRobotics
- Created: 2022-08-28T21:59:38.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2024-03-18T03:30:31.000Z (over 2 years ago)
- Last Synced: 2025-04-03T19:07:57.171Z (about 1 year ago)
- Language: Python
- Homepage:
- Size: 21.5 KB
- Stars: 18
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
iterative-ilqr-tasks
==========
This repository provides a toolkit to test a novel control strategy called Iterative Linear Quadratic Regulator for Iterative Tasks (i2LQR). The strategy aims to improve closed-loop performance with local trajectory optimization for iterative tasks in a dynamic environment.
## References
If you find this project useful in your work, please consider citing following paper [[arXiv]](https://arxiv.org/abs/2302.14246) | [[IEEE]](https://ieeexplore.ieee.org/document/10383960):
```
@inproceedings{zeng2023i2lqr,
title={i2LQR: Iterative LQR for Iterative Tasks in Dynamic Environments},
author={Zeng, Yifan and He, Suiyi and Nguyen, Han Hoang and Li, Yihan and Li, Zhongyu and Sreenath, Koushil and Zeng, Jun},
booktitle={2023 62nd IEEE Conference on Decision and Control (CDC)},
pages={5255--5260},
year={2023},
organization={IEEE}
}
```
## Installation
* We recommend creating a new conda environment:
```
conda env create -f environment.yml
conda activate iterative-ilqr
```
Run following command in terminal to install the iterative-ilqr package.
```
pip install -e .
```
## Auto Testing
In this project, `pytest` is used to test the code autonomously after pushing new code to the repository. Currently, files in the `tests` folder are used for testing i2LQR controller and nonlinear learning based MPC (NLMPC) controller, respectively. To test other features, add files to the `tests` folder and update the `tests.yml` file under the `.github/workflows` folder.
## Contributing
Execute `pre-commit install` to install git hooks in your `.git/` directory, which allows auto-formatting if you are willing to contribute to this repository.
Please contact major contributors of this repository for additional information.
## Quick-Demos
## Docs
The following documentation contains documentation and common terminal commands for simulations and testing.
#### Nonlinear LMPC
Run
```
python iterative_ilqr/tests/nlmpc_test.py --lap-number 10 --num-ss-iters 2 --num-ss-points 8 --ss-option space
```
This allows to test the nonlinear lmpc controller. The argparse arguments are listed as follow,
| name | type | choices | description |
| :---: | :---: | :---: | :---: |
| `lap_number` | int | any number that is greater than `2` | number of laps that will be simulated |
| `num_ss_iters` | int | any number that is greater than `1` | iterations used for learning |
| `num_ss_points` | int | any number that is greater than `1` | history states used for learning |
| `ss_option` | string | `space`, `time` or `all` | criteria for history states selection |
| `plotting` | action | `store_true` | save plotting if true |
| `save_trajectory` | action | `store_true` | save simulator will store the history states and inputs if true |
#### Iterative lqr for iterative tasks
Run
```
python iterative_ilqr/tests/ilqr_test.py --lap-number 10 --num-ss-iters 2 --num-ss-points 8
```
This allows to test the iterative ilqr controller. The argparse arguments are listed as follow,
| name | type | choices | description |
| :---: | :---: | :---: | :---: |
| `lap_number` | int | any number that is greater than `2` | number of laps that will be simulated |
| `num_ss_iters` | int | any number that is greater than `1` | iterations used for learning |
| `num_ss_points` | int | any number that is greater than `1` | history states used for learning |
| `plotting` | action | `store_true` | save plotting if true |
| `save_trajectory` | action | `store_true` | save simulator will store the history states and inputs if true |
#### Known Issues
- To change the simulation timestep, the number of prediction horizons and the number of history states used for learning should be adjusted.
- No noise is added to the simulation during the dynamics update. The presence of noise may lead to failure when the robotics approaches the terminal point.
- The current discretization time for system dynamics update is the same as the simulation timestep. Decreasing this value may also result in failure.