Awesome
Mixed-Integer Behavior and Motion Planning
Planner implementation in C++ and the respective optimization source code (for the commercial optimization suite CPLEX). The implementation can be used as a behavior model in BARK and as a planning module for APOLLO.
Please have a look into the corresponding publications:
- Optimal Behavior Planning for Autonomous Driving: A Generic Mixed-Integer Formulation (IV 2020)
- Linear Differential Games for Cooperative Behavior Planning of Autonomous Vehicles Using Mixed-Integer Programming (CDC 2020)
If you use this code, please cite one of the following publications:
@inproceedings{esterle2020,
title={Optimal Behavior Planning for Autonomous Driving: A Generic Mixed-Integer Formulation},
author={Esterle, Klemens and Kessler, Tobias and Knoll, Alois},
booktitle={2020 IEEE Intelligent Vehicles Symposium (IV)},
pages={1914--1921},
year={2020},
organization={IEEE}
}
@inproceedings{kessler2020linear,
title={Linear Differential Games for Cooperative Behavior Planning of Autonomous Vehicles Using Mixed-Integer Programming},
author={Kessler, Tobias and Esterle, Klemens and Knoll, Alois},
booktitle={2020 59th IEEE Conference on Decision and Control (CDC)},
pages={4060--4066},
year={2020},
organization={IEEE}
}
Installation & Test
- Only once: Install bazel
- Only once: Install the virtual environment
bash python/setup_venv.sh
- Activate the virtual environment via
source python/into_venv.sh
- Run
bazel test //...
in the WORKSPACE directory
Usage within BARK
Have a look to the example benchmark repo. You will need to build the code via build --cxxopt='-std=c++17' --define planner_miqp=true --test_env LD_LIBRARY_PATH=/opt/ibm/ILOG/CPLEX_Studio1210/opl/bin/x86-64_linux
, see e.g., this' repositories .bazelrc-file.
The following is a merging scenario simulated with BARK, where both vehicles plan cooperatively using the MINIVAN model. The cooperative solution is for the red vehicle to slow down and let the blue vehicle go first.
Usage within Apollo
The integration within Apollo is done by building all relevant functions of this repository into a library and link this library in Apollo. Please follow the following steps:
- building the library libmiqp_planner_c_api.so via
bazel build //...
- copying it to the Apollo repository by calling
bash deploy_apollo.sh
(you probably need to update the path to Apollo there or pass it as an argument) - build Apollo, see build documentation
Dependencies
- Cplex. We use CPLEX Optimization Studio V12.10. Place it at /opt/ibm/ILOG/CPLEX_Studio1210/opl. You should then have the following structure: