Path planning for autonomous vehicles.
The problem formulation is basically the same as path_optimizer and path_optimizer_2, but solved through constrained ilqr.
![image](https://private-user-images.githubusercontent.com/23288471/276920684-ecda9b64-2cc5-4706-b4e5-13b35fe74994.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM4Mjk1NTUsIm5iZiI6MTcyMzgyOTI1NSwicGF0aCI6Ii8yMzI4ODQ3MS8yNzY5MjA2ODQtZWNkYTliNjQtMmNjNS00NzA2LWI0ZTUtMTNiMzVmZTc0OTk0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE2VDE3MjczNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTFkOTg4ZDIwYTcwYmI5OWJlMmVmYjBiZmNmZGYxZTNiMjUzZTYxYTA3MWFlYjM5NzI4MjY5M2JjZmQ5ZTRjNGYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.V5ofDr9B7DWxmSANUC7HuePfAkMtx0rVXjA1bMlWd5w)
Yellow line: initial path;
Blue dots: free space boundaries;
- Problem formulated under the frenet frame;
- Kappa and kappa rate constraints;
- Compared to the previous work, there is less accuracy loss on the safety constraints and the vehicle dynamics due to the ilqr solver.
(...)
- Tested on ROS Kinetic (Ubuntu 16) and Noetic (Ubuntu 20);
- Other dependencies: glog, gflags, grid_map;
- Put these ROS packages in your ros workspace: ros_viz_tools, tinyspline_ros.
A png image is loaded as the grid map. You can click to specify the global reference path and the start/goal state of the vehicle.
roslaunch frenet_ilqr_test demo.launch
- Pick at least six points.
- There are no hard and fast rules about the spacing of the points.
- If you want to abandon the chosen points, just double click anywhere when using the "Publish Point" tool.
- You can replace
gridmap.png
with other black and white images. Note that the resolution indemo.cpp
is set to 0.2m, whick means that the length of one pixel is 0.2m on the map. - In application, the reference path is given by a global path or by a search algorithm like A*.
- Currently, it's not strictly required to reach the goal state. But this can be changed.
- The start state must be ahead of the first reference point.