fiss-planner 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fiss_planner-1.0.0/.clang-format +5 -0
- fiss_planner-1.0.0/.github/ISSUE_TEMPLATE/bug_report.md +13 -0
- fiss_planner-1.0.0/.github/ISSUE_TEMPLATE/feature_request.md +11 -0
- fiss_planner-1.0.0/.github/release.yml +19 -0
- fiss_planner-1.0.0/.github/workflows/core.yml +49 -0
- fiss_planner-1.0.0/.github/workflows/docs.yml +20 -0
- fiss_planner-1.0.0/.github/workflows/python.yml +97 -0
- fiss_planner-1.0.0/.github/workflows/ros.yml +54 -0
- fiss_planner-1.0.0/.gitignore +34 -0
- fiss_planner-1.0.0/.pre-commit-config.yaml +20 -0
- fiss_planner-1.0.0/CHANGELOG.md +66 -0
- fiss_planner-1.0.0/CITATION.cff +50 -0
- fiss_planner-1.0.0/CMakeLists.txt +13 -0
- fiss_planner-1.0.0/CODE_OF_CONDUCT.md +16 -0
- fiss_planner-1.0.0/CONTRIBUTING.md +29 -0
- fiss_planner-1.0.0/LICENSE +201 -0
- fiss_planner-1.0.0/PKG-INFO +270 -0
- fiss_planner-1.0.0/README.md +236 -0
- fiss_planner-1.0.0/SECURITY.md +19 -0
- fiss_planner-1.0.0/benchmarks/commonroad/bench_set.txt +280 -0
- fiss_planner-1.0.0/benchmarks/commonroad/fetch_scenarios.py +65 -0
- fiss_planner-1.0.0/benchmarks/make_tables.py +173 -0
- fiss_planner-1.0.0/configs/highway.yaml +26 -0
- fiss_planner-1.0.0/configs/paper_fiss.yaml +19 -0
- fiss_planner-1.0.0/configs/urban.yaml +23 -0
- fiss_planner-1.0.0/core/CMakeLists.txt +169 -0
- fiss_planner-1.0.0/core/bench/CMakeLists.txt +3 -0
- fiss_planner-1.0.0/core/bench/bench_planners.cpp +87 -0
- fiss_planner-1.0.0/core/cmake/fiss_plannerConfig.cmake.in +11 -0
- fiss_planner-1.0.0/core/include/fiss_planner/collision/box2d.hpp +31 -0
- fiss_planner-1.0.0/core/include/fiss_planner/common/math.hpp +54 -0
- fiss_planner-1.0.0/core/include/fiss_planner/common/types.hpp +55 -0
- fiss_planner-1.0.0/core/include/fiss_planner/control/controller.hpp +107 -0
- fiss_planner-1.0.0/core/include/fiss_planner/geometry/polynomial.hpp +43 -0
- fiss_planner-1.0.0/core/include/fiss_planner/geometry/reference_line.hpp +63 -0
- fiss_planner-1.0.0/core/include/fiss_planner/geometry/spline.hpp +63 -0
- fiss_planner-1.0.0/core/include/fiss_planner/map/road_map.hpp +79 -0
- fiss_planner-1.0.0/core/include/fiss_planner/map/route_corridor.hpp +46 -0
- fiss_planner-1.0.0/core/include/fiss_planner/planning/components.hpp +134 -0
- fiss_planner-1.0.0/core/include/fiss_planner/planning/config.hpp +135 -0
- fiss_planner-1.0.0/core/include/fiss_planner/planning/corridor.hpp +62 -0
- fiss_planner-1.0.0/core/include/fiss_planner/planning/frenet_obstacles.hpp +108 -0
- fiss_planner-1.0.0/core/include/fiss_planner/planning/local_planner.hpp +125 -0
- fiss_planner-1.0.0/core/include/fiss_planner/planning/planner.hpp +124 -0
- fiss_planner-1.0.0/core/include/fiss_planner/planning/trajectory.hpp +65 -0
- fiss_planner-1.0.0/core/include/fiss_planner/prediction/lane_following.hpp +44 -0
- fiss_planner-1.0.0/core/include/fiss_planner/prediction/obstacle.hpp +41 -0
- fiss_planner-1.0.0/core/include/fiss_planner/smoothing/piecewise_jerk.hpp +46 -0
- fiss_planner-1.0.0/core/include/fiss_planner/smoothing/smoother.hpp +49 -0
- fiss_planner-1.0.0/core/package.xml +22 -0
- fiss_planner-1.0.0/core/src/box2d.cpp +40 -0
- fiss_planner-1.0.0/core/src/components.cpp +298 -0
- fiss_planner-1.0.0/core/src/config.cpp +211 -0
- fiss_planner-1.0.0/core/src/controller.cpp +136 -0
- fiss_planner-1.0.0/core/src/corridor.cpp +87 -0
- fiss_planner-1.0.0/core/src/frenet_obstacles.cpp +247 -0
- fiss_planner-1.0.0/core/src/lane_following.cpp +128 -0
- fiss_planner-1.0.0/core/src/local_planner.cpp +355 -0
- fiss_planner-1.0.0/core/src/mpc.cpp +119 -0
- fiss_planner-1.0.0/core/src/obstacle.cpp +49 -0
- fiss_planner-1.0.0/core/src/piecewise_jerk.cpp +91 -0
- fiss_planner-1.0.0/core/src/planner.cpp +239 -0
- fiss_planner-1.0.0/core/src/planners.cpp +311 -0
- fiss_planner-1.0.0/core/src/planners.hpp +94 -0
- fiss_planner-1.0.0/core/src/polynomial.cpp +66 -0
- fiss_planner-1.0.0/core/src/qp.hpp +118 -0
- fiss_planner-1.0.0/core/src/reference_line.cpp +175 -0
- fiss_planner-1.0.0/core/src/road_map.cpp +146 -0
- fiss_planner-1.0.0/core/src/route_corridor.cpp +294 -0
- fiss_planner-1.0.0/core/src/smoother.cpp +208 -0
- fiss_planner-1.0.0/core/src/spline.cpp +145 -0
- fiss_planner-1.0.0/core/test/CMakeLists.txt +32 -0
- fiss_planner-1.0.0/core/test/test_collision.cpp +91 -0
- fiss_planner-1.0.0/core/test/test_components.cpp +167 -0
- fiss_planner-1.0.0/core/test/test_config.cpp +54 -0
- fiss_planner-1.0.0/core/test/test_control.cpp +213 -0
- fiss_planner-1.0.0/core/test/test_map.cpp +276 -0
- fiss_planner-1.0.0/core/test/test_planners.cpp +221 -0
- fiss_planner-1.0.0/core/test/test_polynomial.cpp +60 -0
- fiss_planner-1.0.0/core/test/test_prediction.cpp +144 -0
- fiss_planner-1.0.0/core/test/test_reference_line.cpp +116 -0
- fiss_planner-1.0.0/core/test/test_safety.cpp +333 -0
- fiss_planner-1.0.0/core/test/test_spline.cpp +93 -0
- fiss_planner-1.0.0/core/test/test_utils.hpp +63 -0
- fiss_planner-1.0.0/docs/benchmarks.md +186 -0
- fiss_planner-1.0.0/docs/concepts.md +142 -0
- fiss_planner-1.0.0/docs/demo/data/DEU_A99-1_1_T-1.json +1 -0
- fiss_planner-1.0.0/docs/demo/data/USA_Lanker-2_16_T-1.json +1 -0
- fiss_planner-1.0.0/docs/demo/data/USA_US101-22_3_T-1.json +1 -0
- fiss_planner-1.0.0/docs/demo/data/ZAM_Tjunction-1_101_T-1.json +1 -0
- fiss_planner-1.0.0/docs/demo/data/ZAM_Zip-1_50_T-1.json +1 -0
- fiss_planner-1.0.0/docs/demo/data/index.json +47 -0
- fiss_planner-1.0.0/docs/demo/index.html +341 -0
- fiss_planner-1.0.0/docs/foxglove/fiss_planner_layout.json +202 -0
- fiss_planner-1.0.0/docs/foxglove.md +49 -0
- fiss_planner-1.0.0/docs/index.md +22 -0
- fiss_planner-1.0.0/docs/media/autobahn_fiss_plus.gif +0 -0
- fiss_planner-1.0.0/docs/media/carla_birdseye_cut_in.gif +0 -0
- fiss_planner-1.0.0/docs/media/carla_cut_in.webp +0 -0
- fiss_planner-1.0.0/docs/media/carla_overtake.webp +0 -0
- fiss_planner-1.0.0/docs/media/carla_traffic_hero.webp +0 -0
- fiss_planner-1.0.0/docs/media/compare_fop_fiss_fissplus.gif +0 -0
- fiss_planner-1.0.0/docs/media/logo.svg +18 -0
- fiss_planner-1.0.0/docs/media/merge_fiss_plus.gif +0 -0
- fiss_planner-1.0.0/docs/media/social_preview.png +0 -0
- fiss_planner-1.0.0/docs/media/tjunction_fiss_plus.gif +0 -0
- fiss_planner-1.0.0/docs/media/urban_fiss_plus.gif +0 -0
- fiss_planner-1.0.0/docs/media/us101_fiss_plus.gif +0 -0
- fiss_planner-1.0.0/docs/python.md +74 -0
- fiss_planner-1.0.0/docs/ros.md +71 -0
- fiss_planner-1.0.0/examples/make_social_preview.py +48 -0
- fiss_planner-1.0.0/examples/quickstart.ipynb +258 -0
- fiss_planner-1.0.0/mkdocs.yml +27 -0
- fiss_planner-1.0.0/msgs/fiss_planner_msgs/CMakeLists.txt +22 -0
- fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/Obstacle.msg +7 -0
- fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/ObstacleArray.msg +2 -0
- fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/ObstacleState.msg +6 -0
- fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/PlannerStats.msg +20 -0
- fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/StopLineState.msg +3 -0
- fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/StopLineStateArray.msg +2 -0
- fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/Trajectory.msg +5 -0
- fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/TrajectoryPoint.msg +10 -0
- fiss_planner-1.0.0/msgs/fiss_planner_msgs/package.xml +26 -0
- fiss_planner-1.0.0/pixi.lock +17014 -0
- fiss_planner-1.0.0/pixi.toml +157 -0
- fiss_planner-1.0.0/pyproject.toml +58 -0
- fiss_planner-1.0.0/python/CMakeLists.txt +15 -0
- fiss_planner-1.0.0/python/fiss_planner/__init__.py +29 -0
- fiss_planner-1.0.0/python/fiss_planner/bags/__init__.py +1 -0
- fiss_planner-1.0.0/python/fiss_planner/bags/from_commonroad.py +232 -0
- fiss_planner-1.0.0/python/fiss_planner/bags/msg_definitions.py +13 -0
- fiss_planner-1.0.0/python/fiss_planner/carla/__init__.py +1 -0
- fiss_planner-1.0.0/python/fiss_planner/carla/adapter.py +187 -0
- fiss_planner-1.0.0/python/fiss_planner/carla/closed_loop.py +612 -0
- fiss_planner-1.0.0/python/fiss_planner/carla/record.py +320 -0
- fiss_planner-1.0.0/python/fiss_planner/carla/render.py +86 -0
- fiss_planner-1.0.0/python/fiss_planner/commonroad/__init__.py +20 -0
- fiss_planner-1.0.0/python/fiss_planner/commonroad/adapter.py +230 -0
- fiss_planner-1.0.0/python/fiss_planner/commonroad/benchmark.py +523 -0
- fiss_planner-1.0.0/python/fiss_planner/commonroad/demo.py +209 -0
- fiss_planner-1.0.0/python/fiss_planner/commonroad/export_web.py +95 -0
- fiss_planner-1.0.0/python/fiss_planner/viz/__init__.py +5 -0
- fiss_planner-1.0.0/python/fiss_planner/viz/foxglove_scene.py +250 -0
- fiss_planner-1.0.0/python/src/bindings.cpp +737 -0
- fiss_planner-1.0.0/python/tests/test_bindings.py +178 -0
- fiss_planner-1.0.0/ros/common/include/fiss_planner_ros/lanelet2_adapter.hpp +42 -0
- fiss_planner-1.0.0/ros/common/src/lanelet2_adapter.cpp +128 -0
- fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/CMakeLists.txt +39 -0
- fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/cfg/FissPlanner.cfg +69 -0
- fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/launch/planner.launch +31 -0
- fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/package.xml +32 -0
- fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/src/controller_node.cpp +77 -0
- fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/src/planner_node.cpp +375 -0
- fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/test/planner_node.test +8 -0
- fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/test/test_planner_node.cpp +94 -0
- fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/CMakeLists.txt +63 -0
- fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/config/planner.yaml +39 -0
- fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/include/fiss_planner_ros2/planner_node.hpp +120 -0
- fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/launch/planner.launch.py +71 -0
- fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/package.xml +39 -0
- fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/rviz/fiss_planner.rviz +55 -0
- fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/scripts/bag_replay_eval.py +240 -0
- fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/src/controller_main.cpp +12 -0
- fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/src/controller_node.cpp +82 -0
- fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/src/main.cpp +12 -0
- fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/src/planner_node.cpp +664 -0
- fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/test/test_planner_node.cpp +180 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Something does not work as documented
|
|
4
|
+
labels: bug
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
**What happened**
|
|
8
|
+
|
|
9
|
+
**How to reproduce** (scenario / bag / minimal Python snippet, planner type, config)
|
|
10
|
+
|
|
11
|
+
**Expected behaviour**
|
|
12
|
+
|
|
13
|
+
**Environment** (OS, install method: pip / ROS 2 distro / ROS 1, version)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
changelog:
|
|
2
|
+
exclude:
|
|
3
|
+
labels: [ignore-for-release]
|
|
4
|
+
authors: [dependabot, pre-commit-ci]
|
|
5
|
+
categories:
|
|
6
|
+
- title: Planning
|
|
7
|
+
labels: [planner, behaviour, prediction]
|
|
8
|
+
- title: Maps and routing
|
|
9
|
+
labels: [map, lanelet2]
|
|
10
|
+
- title: Optimization and control
|
|
11
|
+
labels: [smoother, mpc, control]
|
|
12
|
+
- title: Integrations
|
|
13
|
+
labels: [ros1, ros2, python, carla, commonroad]
|
|
14
|
+
- title: Bug fixes
|
|
15
|
+
labels: [bug]
|
|
16
|
+
- title: Documentation
|
|
17
|
+
labels: [documentation]
|
|
18
|
+
- title: Other changes
|
|
19
|
+
labels: ["*"]
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
name: core
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, v1-modernize]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
concurrency:
|
|
9
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
10
|
+
cancel-in-progress: true
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
test:
|
|
14
|
+
name: ${{ matrix.compiler }} / ${{ matrix.build }}
|
|
15
|
+
runs-on: ubuntu-24.04
|
|
16
|
+
strategy:
|
|
17
|
+
fail-fast: false
|
|
18
|
+
matrix:
|
|
19
|
+
compiler: [gcc, clang]
|
|
20
|
+
build: [RelWithDebInfo, Sanitize]
|
|
21
|
+
env:
|
|
22
|
+
CC: ${{ matrix.compiler == 'gcc' && 'gcc' || 'clang' }}
|
|
23
|
+
CXX: ${{ matrix.compiler == 'gcc' && 'g++' || 'clang++' }}
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
- name: Install dependencies
|
|
27
|
+
run: sudo apt-get update && sudo apt-get install -y ninja-build libeigen3-dev libyaml-cpp-dev libgtest-dev libbenchmark-dev
|
|
28
|
+
- name: Configure
|
|
29
|
+
run: >
|
|
30
|
+
cmake -S . -B build -G Ninja
|
|
31
|
+
-DCMAKE_BUILD_TYPE=${{ matrix.build == 'Sanitize' && 'Debug' || matrix.build }}
|
|
32
|
+
-DFISS_PLANNER_BUILD_TESTS=ON -DFISS_PLANNER_BUILD_BENCHMARKS=ON
|
|
33
|
+
-DFISS_PLANNER_SANITIZE=${{ matrix.build == 'Sanitize' && 'ON' || 'OFF' }}
|
|
34
|
+
- name: Build
|
|
35
|
+
run: cmake --build build
|
|
36
|
+
- name: Test
|
|
37
|
+
run: ctest --test-dir build --output-on-failure
|
|
38
|
+
- name: Benchmark smoke run
|
|
39
|
+
if: matrix.build != 'Sanitize'
|
|
40
|
+
run: ./build/core/bench/fiss_planner_bench --benchmark_min_time=0.05s
|
|
41
|
+
|
|
42
|
+
pixi:
|
|
43
|
+
runs-on: ubuntu-24.04
|
|
44
|
+
steps:
|
|
45
|
+
- uses: actions/checkout@v4
|
|
46
|
+
- uses: prefix-dev/setup-pixi@v0.8.1
|
|
47
|
+
with:
|
|
48
|
+
cache: true
|
|
49
|
+
- run: pixi run test
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
name: docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths: ["docs/**", "mkdocs.yml", "README.md"]
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
deploy:
|
|
13
|
+
runs-on: ubuntu-24.04
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
- uses: actions/setup-python@v5
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.12"
|
|
19
|
+
- run: pip install "mkdocs<2" "mkdocs-material<10"
|
|
20
|
+
- run: mkdocs gh-deploy --force
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
name: python
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, v1-modernize]
|
|
6
|
+
tags: ["v*"]
|
|
7
|
+
pull_request:
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
test:
|
|
15
|
+
runs-on: ubuntu-24.04
|
|
16
|
+
strategy:
|
|
17
|
+
fail-fast: false
|
|
18
|
+
matrix:
|
|
19
|
+
python: ["3.10", "3.11", "3.12", "3.13"]
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
- uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: ${{ matrix.python }}
|
|
25
|
+
- name: Build and install
|
|
26
|
+
run: pip install ".[test]" -v
|
|
27
|
+
- name: Test
|
|
28
|
+
run: |
|
|
29
|
+
cd /tmp && python -c "import fiss_planner as fp; assert fp.has_optimizers()"
|
|
30
|
+
pytest -q ${{ github.workspace }}/python/tests
|
|
31
|
+
|
|
32
|
+
commonroad-demo:
|
|
33
|
+
runs-on: ubuntu-24.04
|
|
34
|
+
steps:
|
|
35
|
+
- uses: actions/checkout@v4
|
|
36
|
+
- uses: actions/setup-python@v5
|
|
37
|
+
with:
|
|
38
|
+
python-version: "3.11"
|
|
39
|
+
- run: pip install ".[commonroad]"
|
|
40
|
+
- name: Fetch pinned scenarios
|
|
41
|
+
run: python benchmarks/commonroad/fetch_scenarios.py --subset hand-crafted --out data/cache/scenarios
|
|
42
|
+
- name: Closed-loop benchmark (smoke)
|
|
43
|
+
run: |
|
|
44
|
+
python -m fiss_planner.commonroad.benchmark --scenarios data/cache/scenarios/hand-crafted \
|
|
45
|
+
--limit 20 --seed 1 --jobs 4 --out results/ci.csv
|
|
46
|
+
python - <<'PY'
|
|
47
|
+
import pandas as pd
|
|
48
|
+
df = pd.read_csv("results/ci.csv")
|
|
49
|
+
assert (df.status != "error").all(), df[df.status == "error"]
|
|
50
|
+
print(df.groupby("planner").success.mean())
|
|
51
|
+
PY
|
|
52
|
+
|
|
53
|
+
wheels:
|
|
54
|
+
if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'push'
|
|
55
|
+
strategy:
|
|
56
|
+
matrix:
|
|
57
|
+
os: [ubuntu-24.04, ubuntu-24.04-arm, macos-14]
|
|
58
|
+
runs-on: ${{ matrix.os }}
|
|
59
|
+
steps:
|
|
60
|
+
- uses: actions/checkout@v4
|
|
61
|
+
- uses: pypa/cibuildwheel@v2.23.3
|
|
62
|
+
env:
|
|
63
|
+
CIBW_BUILD: "cp310-* cp311-* cp312-* cp313-*"
|
|
64
|
+
CIBW_SKIP: "*-musllinux_* *-win32 *_i686"
|
|
65
|
+
# Current NumPy ships Linux wheels for manylinux_2_28 only (glibc >= 2.28).
|
|
66
|
+
CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28
|
|
67
|
+
CIBW_MANYLINUX_AARCH64_IMAGE: manylinux_2_28
|
|
68
|
+
CIBW_TEST_REQUIRES: pytest
|
|
69
|
+
CIBW_TEST_COMMAND: "pytest -q {project}/python/tests -k 'not embedded_msg'"
|
|
70
|
+
- uses: actions/upload-artifact@v4
|
|
71
|
+
with:
|
|
72
|
+
name: wheels-${{ matrix.os }}
|
|
73
|
+
path: wheelhouse/*.whl
|
|
74
|
+
|
|
75
|
+
sdist:
|
|
76
|
+
runs-on: ubuntu-24.04
|
|
77
|
+
steps:
|
|
78
|
+
- uses: actions/checkout@v4
|
|
79
|
+
- run: pipx run build --sdist
|
|
80
|
+
- uses: actions/upload-artifact@v4
|
|
81
|
+
with:
|
|
82
|
+
name: sdist
|
|
83
|
+
path: dist/*.tar.gz
|
|
84
|
+
|
|
85
|
+
publish:
|
|
86
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
87
|
+
needs: [test, wheels, sdist]
|
|
88
|
+
runs-on: ubuntu-24.04
|
|
89
|
+
environment: pypi
|
|
90
|
+
permissions:
|
|
91
|
+
id-token: write # PyPI trusted publishing
|
|
92
|
+
steps:
|
|
93
|
+
- uses: actions/download-artifact@v4
|
|
94
|
+
with:
|
|
95
|
+
path: dist
|
|
96
|
+
merge-multiple: true
|
|
97
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
name: ros
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, v1-modernize]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
concurrency:
|
|
9
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
10
|
+
cancel-in-progress: true
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
ros2:
|
|
14
|
+
name: ROS 2 ${{ matrix.distro }}
|
|
15
|
+
runs-on: ubuntu-${{ matrix.ubuntu }}
|
|
16
|
+
timeout-minutes: 60
|
|
17
|
+
strategy:
|
|
18
|
+
fail-fast: false
|
|
19
|
+
matrix:
|
|
20
|
+
include:
|
|
21
|
+
- {distro: jazzy, ubuntu: "24.04"}
|
|
22
|
+
- {distro: humble, ubuntu: "22.04"}
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v4
|
|
25
|
+
- uses: ros-tooling/setup-ros@v0.7
|
|
26
|
+
with:
|
|
27
|
+
required-ros-distributions: ${{ matrix.distro }}
|
|
28
|
+
- name: Install dependencies
|
|
29
|
+
run: |
|
|
30
|
+
source /opt/ros/${{ matrix.distro }}/setup.bash
|
|
31
|
+
rosdep update --rosdistro ${{ matrix.distro }}
|
|
32
|
+
rosdep install --from-paths core msgs ros/ros2 --ignore-src -y -r --rosdistro ${{ matrix.distro }}
|
|
33
|
+
- name: Build
|
|
34
|
+
run: |
|
|
35
|
+
source /opt/ros/${{ matrix.distro }}/setup.bash
|
|
36
|
+
colcon build --base-paths core msgs ros/ros2 --event-handlers console_cohesion+ \
|
|
37
|
+
--cmake-args -DCMAKE_BUILD_TYPE=Release
|
|
38
|
+
- name: Test
|
|
39
|
+
run: |
|
|
40
|
+
source /opt/ros/${{ matrix.distro }}/setup.bash
|
|
41
|
+
colcon test --base-paths core msgs ros/ros2 --packages-select fiss_planner_ros2 \
|
|
42
|
+
--event-handlers console_direct+
|
|
43
|
+
colcon test-result --verbose
|
|
44
|
+
|
|
45
|
+
ros1:
|
|
46
|
+
name: ROS 1 noetic (RoboStack)
|
|
47
|
+
runs-on: ubuntu-24.04
|
|
48
|
+
steps:
|
|
49
|
+
- uses: actions/checkout@v4
|
|
50
|
+
- uses: prefix-dev/setup-pixi@v0.8.1
|
|
51
|
+
with:
|
|
52
|
+
environments: noetic
|
|
53
|
+
cache: true
|
|
54
|
+
- run: pixi run -e noetic ros1-test
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Build trees
|
|
2
|
+
build/
|
|
3
|
+
build-*/
|
|
4
|
+
install/
|
|
5
|
+
log/
|
|
6
|
+
devel/
|
|
7
|
+
logs/
|
|
8
|
+
_skbuild/
|
|
9
|
+
dist/
|
|
10
|
+
*.egg-info/
|
|
11
|
+
wheelhouse/
|
|
12
|
+
|
|
13
|
+
# Pixi / Python
|
|
14
|
+
.pixi/
|
|
15
|
+
__pycache__/
|
|
16
|
+
*.pyc
|
|
17
|
+
.pytest_cache/
|
|
18
|
+
.ruff_cache/
|
|
19
|
+
|
|
20
|
+
# Benchmark outputs (results tables are committed under docs/ instead)
|
|
21
|
+
/results/
|
|
22
|
+
data/cache/
|
|
23
|
+
*.mcap
|
|
24
|
+
*.db3
|
|
25
|
+
|
|
26
|
+
# Editors / OS
|
|
27
|
+
.vscode/
|
|
28
|
+
.idea/
|
|
29
|
+
*.user
|
|
30
|
+
*~
|
|
31
|
+
.DS_Store
|
|
32
|
+
python/fiss_planner/*.so
|
|
33
|
+
build-ros2-ws/
|
|
34
|
+
build-ros1-ws/
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
+
rev: v5.0.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: trailing-whitespace
|
|
6
|
+
- id: end-of-file-fixer
|
|
7
|
+
- id: check-yaml
|
|
8
|
+
- id: check-added-large-files
|
|
9
|
+
args: [--maxkb=2000]
|
|
10
|
+
- repo: https://github.com/pre-commit/mirrors-clang-format
|
|
11
|
+
rev: v19.1.7
|
|
12
|
+
hooks:
|
|
13
|
+
- id: clang-format
|
|
14
|
+
types_or: [c++]
|
|
15
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
16
|
+
rev: v0.9.6
|
|
17
|
+
hooks:
|
|
18
|
+
- id: ruff
|
|
19
|
+
args: [--fix]
|
|
20
|
+
- id: ruff-format
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 1.0.0 — 2026-10-25
|
|
4
|
+
|
|
5
|
+
The first release of FISS Planner: FISS (RA-L 2022), FISS+ (IROS 2023) and the FOP / FOP+ baselines
|
|
6
|
+
in one code base. The project continues `SS47816/frenet_planner` (formerly `frenet_optimal_planner`),
|
|
7
|
+
whose package was briefly published as `frenet-planner` 1.0.0, and `SS47816/fiss_plus_planner`.
|
|
8
|
+
`pip install frenet-planner` now installs `fiss-planner`; the paper code stays at the tags
|
|
9
|
+
`paper-ral2022` (this repository) and `paper-iros2023` (`fiss_plus_planner`).
|
|
10
|
+
|
|
11
|
+
### Planning
|
|
12
|
+
- ROS-agnostic C++17 core with four interchangeable planners behind one interface (`makePlanner`)
|
|
13
|
+
and a full pipeline (`LocalPlanner`):
|
|
14
|
+
- route corridor;
|
|
15
|
+
- stitching;
|
|
16
|
+
- target-speed policy;
|
|
17
|
+
- fail-safe fallbacks (previous plan, emergency braking).
|
|
18
|
+
- Exact time-domain Frenet ↔ Cartesian conversion; arc-length reference lines of any length.
|
|
19
|
+
- Werling-style cost with an admissible end-state estimate (used by FISS/FISS+).
|
|
20
|
+
- Kinematic, road-boundary and oriented-box collision validation against time-stamped predictions;
|
|
21
|
+
parallel validation for FOP/FOP+.
|
|
22
|
+
- Keeping distance:
|
|
23
|
+
- per-lane car following (the speed that closes the gap to the desired headway);
|
|
24
|
+
- proximity cost: headway, time to collision and lateral clearance;
|
|
25
|
+
- a hard safety envelope ("virtual bumper": minimum gap, headway and TTC) with a reaction-time
|
|
26
|
+
grace for cut-ins;
|
|
27
|
+
- a post-encroachment time to crossing and oncoming vehicles, so turns across traffic keep clear
|
|
28
|
+
of the vehicles they cross.
|
|
29
|
+
- Map-aware lane-following prediction, and predictions for obstacles that arrive with only their
|
|
30
|
+
current state.
|
|
31
|
+
- Fallback ladder: previous plan, a re-plan without the safety envelope, a re-plan over a shorter
|
|
32
|
+
collision horizon, then emergency braking; plans after an emergency stop resume from the measured
|
|
33
|
+
state.
|
|
34
|
+
- Explainability: per-reason rejection counts, the obstacle that blocked the cheapest candidate, and
|
|
35
|
+
gap / headway / TTC to the vehicle ahead in every cycle's statistics.
|
|
36
|
+
|
|
37
|
+
### Maps
|
|
38
|
+
- Lane-level `RoadMap` with adapters for Lanelet2 (C++), CommonRoad and CARLA (Python), providing:
|
|
39
|
+
- per-lane sampling on real lane geometry;
|
|
40
|
+
- lane-change legality;
|
|
41
|
+
- speed and curvature limits;
|
|
42
|
+
- route urgency;
|
|
43
|
+
- traffic-light stop lines.
|
|
44
|
+
|
|
45
|
+
### Optimization and control (optional, OSQP)
|
|
46
|
+
- Piecewise-jerk QP smoother inside a space–time driving corridor.
|
|
47
|
+
- LTV-MPC tracking controller with steering-rate limits; Stanley+PID baseline; kinematic bicycle
|
|
48
|
+
simulator.
|
|
49
|
+
|
|
50
|
+
### Integrations
|
|
51
|
+
- Python package `fiss-planner` (nanobind) with a CommonRoad benchmark, ROS 2 bag tools and a CARLA
|
|
52
|
+
closed-loop runner.
|
|
53
|
+
- ROS 2 (`fiss_planner_ros2`, component nodes) and ROS 1 (`fiss_planner_ros1`) wrappers;
|
|
54
|
+
`fiss_planner_msgs` builds for both.
|
|
55
|
+
- Runtime planner switching through ROS 2 parameters, `dynamic_reconfigure` or Python.
|
|
56
|
+
- Scene markers and an RViz 2 configuration (ROS 2).
|
|
57
|
+
- Foxglove: MCAP recording (or live streaming) of CARLA and CommonRoad runs with a ready-made layout.
|
|
58
|
+
|
|
59
|
+
### Quality
|
|
60
|
+
- Test suites:
|
|
61
|
+
- GoogleTest, including sanitizer builds;
|
|
62
|
+
- pytest;
|
|
63
|
+
- ROS 2 gtest;
|
|
64
|
+
- ROS 1 rostest.
|
|
65
|
+
- CI for all of the above and for wheels.
|
|
66
|
+
- Reproducible benchmarks with pinned scenario sets.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use this software, please cite it and the FISS / FISS+ papers."
|
|
3
|
+
title: "FISS Planner: Fast Iterative Search and Sampling trajectory planners (FISS, FISS+, with FOP baselines)"
|
|
4
|
+
type: software
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
license: Apache-2.0
|
|
7
|
+
repository-code: "https://github.com/SS47816/fiss_planner"
|
|
8
|
+
authors:
|
|
9
|
+
- family-names: Sun
|
|
10
|
+
given-names: Shuo
|
|
11
|
+
references:
|
|
12
|
+
- type: article
|
|
13
|
+
title: "FISS: A Trajectory Planning Framework Using Fast Iterative Search and Sampling Strategy for Autonomous Driving"
|
|
14
|
+
authors:
|
|
15
|
+
- {family-names: Sun, given-names: Shuo}
|
|
16
|
+
- {family-names: Liu, given-names: Zhiyang}
|
|
17
|
+
- {family-names: Yin, given-names: Huan}
|
|
18
|
+
- {family-names: Ang, given-names: Marcelo H.}
|
|
19
|
+
journal: IEEE Robotics and Automation Letters
|
|
20
|
+
volume: 7
|
|
21
|
+
issue: 4
|
|
22
|
+
start: 9985
|
|
23
|
+
end: 9992
|
|
24
|
+
year: 2022
|
|
25
|
+
doi: 10.1109/LRA.2022.3191940
|
|
26
|
+
- type: conference-paper
|
|
27
|
+
title: "FISS+: Efficient and Focused Trajectory Generation and Refinement Using Fast Iterative Search and Sampling Strategy"
|
|
28
|
+
authors:
|
|
29
|
+
- {family-names: Sun, given-names: Shuo}
|
|
30
|
+
- {family-names: Chen, given-names: Jie}
|
|
31
|
+
- {family-names: Sun, given-names: Jiawei}
|
|
32
|
+
- {family-names: Yuan, given-names: Chengran}
|
|
33
|
+
- {family-names: Li, given-names: Yuanchen}
|
|
34
|
+
- {family-names: Zhang, given-names: Tangyike}
|
|
35
|
+
- {family-names: Ang, given-names: Marcelo H.}
|
|
36
|
+
collection-title: IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)
|
|
37
|
+
start: 10527
|
|
38
|
+
end: 10534
|
|
39
|
+
year: 2023
|
|
40
|
+
doi: 10.1109/IROS55552.2023.10341498
|
|
41
|
+
- type: conference-paper
|
|
42
|
+
title: "Optimal trajectory generation for dynamic street scenarios in a Frenét Frame"
|
|
43
|
+
authors:
|
|
44
|
+
- {family-names: Werling, given-names: Moritz}
|
|
45
|
+
- {family-names: Ziegler, given-names: Julius}
|
|
46
|
+
- {family-names: Kammel, given-names: Sören}
|
|
47
|
+
- {family-names: Thrun, given-names: Sebastian}
|
|
48
|
+
collection-title: IEEE International Conference on Robotics and Automation (ICRA)
|
|
49
|
+
year: 2010
|
|
50
|
+
doi: 10.1109/ROBOT.2010.5509799
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.16)
|
|
2
|
+
project(fiss_planner_superbuild LANGUAGES CXX)
|
|
3
|
+
|
|
4
|
+
# Top-level entry point for standalone (non-ROS) builds and for the Python
|
|
5
|
+
# package. ROS builds use core/, msgs/ and ros/* directly as packages.
|
|
6
|
+
option(FISS_PLANNER_BUILD_PYTHON "Build the Python bindings" OFF)
|
|
7
|
+
|
|
8
|
+
enable_testing()
|
|
9
|
+
add_subdirectory(core)
|
|
10
|
+
|
|
11
|
+
if(FISS_PLANNER_BUILD_PYTHON)
|
|
12
|
+
add_subdirectory(python)
|
|
13
|
+
endif()
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Code of Conduct
|
|
2
|
+
|
|
3
|
+
This project follows the [Contributor Covenant, version 2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/).
|
|
4
|
+
|
|
5
|
+
In short: be welcoming, be respectful of differing viewpoints and experience levels, give and accept
|
|
6
|
+
constructive feedback gracefully, and focus on what is best for the community. Harassment, personal
|
|
7
|
+
attacks, trolling and publishing others' private information are not acceptable in issues, pull
|
|
8
|
+
requests, discussions or any other project space.
|
|
9
|
+
|
|
10
|
+
## Reporting
|
|
11
|
+
|
|
12
|
+
If you experience or witness unacceptable behaviour, contact the maintainers privately through the
|
|
13
|
+
contact options on the [maintainer's GitHub profile](https://github.com/SS47816). Reports are
|
|
14
|
+
handled confidentially. Maintainers may remove, edit or reject comments, commits, code and issues
|
|
15
|
+
that do not follow this code of conduct, and may temporarily or permanently ban contributors who do
|
|
16
|
+
so repeatedly.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Thanks for helping! Bug reports with a minimal reproduction (a CommonRoad scenario, a bag, or a
|
|
4
|
+
few lines of Python) are the most useful thing you can send.
|
|
5
|
+
|
|
6
|
+
## Development setup
|
|
7
|
+
|
|
8
|
+
[pixi](https://pixi.sh) provides every toolchain without root:
|
|
9
|
+
|
|
10
|
+
| Task | Command |
|
|
11
|
+
|---|---|
|
|
12
|
+
| C++ core + tests | `pixi run test` |
|
|
13
|
+
| with ASan/UBSan | `pixi run test-asan` |
|
|
14
|
+
| micro-benchmarks | `pixi run bench-micro` |
|
|
15
|
+
| Python bindings + tests | `pixi run -e bench py-test` |
|
|
16
|
+
| CommonRoad benchmark | `pixi run -e bench cr-bench --scenarios <dir>` |
|
|
17
|
+
| ROS 2 build + tests | `pixi run -e jazzy ros2-test` |
|
|
18
|
+
| ROS 1 build + tests | `pixi run -e noetic ros1-test` |
|
|
19
|
+
|
|
20
|
+
## Guidelines
|
|
21
|
+
|
|
22
|
+
- The core (`core/`) must stay ROS-free and dependency-light (C++17 standard library,
|
|
23
|
+
yaml-cpp, optional OSQP).
|
|
24
|
+
- Every bug fix comes with a regression test; every new planner feature with a test in
|
|
25
|
+
`core/test/` and, if user-visible, a benchmark run (`benchmarks/`).
|
|
26
|
+
- Format with `pre-commit run --all-files` (clang-format, ruff).
|
|
27
|
+
- Commit messages follow [Conventional Commits](https://www.conventionalcommits.org).
|
|
28
|
+
- New planners: subclass `Planner` (see `core/src/planners.hpp`), register in `makePlanner`,
|
|
29
|
+
add the type to `PlannerType`, and they are available in Python and both ROS wrappers.
|