2026/02/17Initial code release2025/09/26FlowDrive paper published on arXiv.
All demonstration GIFs correspond to figures in the paper.
| Row 1 | Row 2 |
|---|---|
![]() |
![]() |
| Row 3 | Row 4 |
![]() |
![]() |
| Row 1 | Row 2 |
|---|---|
![]() |
![]() |
- Setup the nuPlan dataset following the offiical-doc
Install nuplan-devkit using the following commands or see the official doc
git clone https://github.com/motional/nuplan-devkit.git && cd nuplan-devkit
conda env create -f environment.yml
conda activate nuplan
python -m pip install -e .- Depending on your nuplan dataset location, you may need to add
splitsin the following two config files accordingly:- In
nuplan-devkit/nuplan/planning/script/config/common/scenario_builder/nuplan_challenge.yaml, change thedata_root: ${oc.env:NUPLAN_DATA_ROOT}/nuplan-v1.1/test/todata_root: ${oc.env:NUPLAN_DATA_ROOT}/nuplan-v1.1/splits/test/. - In
nuplan-devkit/nuplan/planning/script/config/common/scenario_builder/nuplan.yaml, changedata_root: ${oc.env:NUPLAN_DATA_ROOT}/nuplan-v1.1/trainvaltodata_root: ${oc.env:NUPLAN_DATA_ROOT}/nuplan-v1.1/splits/trainval.
- In
cd ..
git clone https://github.com/mh0797/interPlan.git && cd interPlan
python -m pip install -e .- You may need to change the config file
interPlan/interplan/planning/script/config/common/scenario_builder/interplan.yaml, changedata_root: ${oc.env:NUPLAN_DATA_ROOT}/nuplan-v1.1/trainvaltodata_root: ${oc.env:NUPLAN_DATA_ROOT}/nuplan-v1.1/splits/test.
cd ..
git clone https://github.com/autonomousvision/tuplan_garage.git && cd tuplan_garage
python -m pip install -e .- Replace the code
tuplan_garage/tuplan_garage/planning/simulation/planner/pdm_planner/observation/pdm_object_manager.pyby our code inflow_drive_planner/assets/adapted_tuplan_code/pdm_object_manager.py. The main fix with this code is that the objects predicted with constant velocity are now moving along their velocity direction, instead of the heading direction. This fix improves the performance of PDM and FlowDrive* significantly.
cd flow_drive_planner && python -m pip install -r requirements.txt
python -m pip install -e .- Modify the evaluation script
sim_flow_drive_planner.shaccordingly - Run the evaluation script
chmod +x sim_flow_drive_planner.sh
./sim_flow_drive_planner.sh- Modify the visualization script
run_nuboard_flow.pyaccordingly - Run the visualization script
python run_nuboard_flow.py
- Configure the dara processing script
data_process.shand preprocess the training data
chmod +x data_process.sh
./data_process.sh- Configure the paths in
flow_drive_planner/flow_drive/config/config.yamlaccordingly - Run the training code. Note that the first time you train with
weighted_sampling=Trueinflow_drive_planner/flow_drive/config/config.yaml, it will take a while to compute the sampling weights and save the weights to the same folder as the processed training data.
chmod +x train.sh
./train.sh 0,1,2,3,4,5,6,7 # specify the GPU idsAll assets and code are under the Apache 2.0 license unless specified otherwise.
If you find this work useful, please consider citing:
@article{wang2025flowdrivemoderatedflowmatching,
title={FlowDrive: moderated flow matching with data balancing for trajectory planning},
author={Lingguang Wang and Ömer Şahin Taş and Marlon Steiner and Christoph Stiller},
year={2025},
eprint={2509.21961},
archivePrefix={arXiv},
primaryClass={cs.RO},
url={https://arxiv.org/abs/2509.21961},
}FlowDrive Planner is greatly inspired by the following open-source projects and we reuse some code from them : Diffusion-Planner, nuplan-devkit, tuplan_garage, planTF, pluto, DiT





