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.
Files changed (167) hide show
  1. fiss_planner-1.0.0/.clang-format +5 -0
  2. fiss_planner-1.0.0/.github/ISSUE_TEMPLATE/bug_report.md +13 -0
  3. fiss_planner-1.0.0/.github/ISSUE_TEMPLATE/feature_request.md +11 -0
  4. fiss_planner-1.0.0/.github/release.yml +19 -0
  5. fiss_planner-1.0.0/.github/workflows/core.yml +49 -0
  6. fiss_planner-1.0.0/.github/workflows/docs.yml +20 -0
  7. fiss_planner-1.0.0/.github/workflows/python.yml +97 -0
  8. fiss_planner-1.0.0/.github/workflows/ros.yml +54 -0
  9. fiss_planner-1.0.0/.gitignore +34 -0
  10. fiss_planner-1.0.0/.pre-commit-config.yaml +20 -0
  11. fiss_planner-1.0.0/CHANGELOG.md +66 -0
  12. fiss_planner-1.0.0/CITATION.cff +50 -0
  13. fiss_planner-1.0.0/CMakeLists.txt +13 -0
  14. fiss_planner-1.0.0/CODE_OF_CONDUCT.md +16 -0
  15. fiss_planner-1.0.0/CONTRIBUTING.md +29 -0
  16. fiss_planner-1.0.0/LICENSE +201 -0
  17. fiss_planner-1.0.0/PKG-INFO +270 -0
  18. fiss_planner-1.0.0/README.md +236 -0
  19. fiss_planner-1.0.0/SECURITY.md +19 -0
  20. fiss_planner-1.0.0/benchmarks/commonroad/bench_set.txt +280 -0
  21. fiss_planner-1.0.0/benchmarks/commonroad/fetch_scenarios.py +65 -0
  22. fiss_planner-1.0.0/benchmarks/make_tables.py +173 -0
  23. fiss_planner-1.0.0/configs/highway.yaml +26 -0
  24. fiss_planner-1.0.0/configs/paper_fiss.yaml +19 -0
  25. fiss_planner-1.0.0/configs/urban.yaml +23 -0
  26. fiss_planner-1.0.0/core/CMakeLists.txt +169 -0
  27. fiss_planner-1.0.0/core/bench/CMakeLists.txt +3 -0
  28. fiss_planner-1.0.0/core/bench/bench_planners.cpp +87 -0
  29. fiss_planner-1.0.0/core/cmake/fiss_plannerConfig.cmake.in +11 -0
  30. fiss_planner-1.0.0/core/include/fiss_planner/collision/box2d.hpp +31 -0
  31. fiss_planner-1.0.0/core/include/fiss_planner/common/math.hpp +54 -0
  32. fiss_planner-1.0.0/core/include/fiss_planner/common/types.hpp +55 -0
  33. fiss_planner-1.0.0/core/include/fiss_planner/control/controller.hpp +107 -0
  34. fiss_planner-1.0.0/core/include/fiss_planner/geometry/polynomial.hpp +43 -0
  35. fiss_planner-1.0.0/core/include/fiss_planner/geometry/reference_line.hpp +63 -0
  36. fiss_planner-1.0.0/core/include/fiss_planner/geometry/spline.hpp +63 -0
  37. fiss_planner-1.0.0/core/include/fiss_planner/map/road_map.hpp +79 -0
  38. fiss_planner-1.0.0/core/include/fiss_planner/map/route_corridor.hpp +46 -0
  39. fiss_planner-1.0.0/core/include/fiss_planner/planning/components.hpp +134 -0
  40. fiss_planner-1.0.0/core/include/fiss_planner/planning/config.hpp +135 -0
  41. fiss_planner-1.0.0/core/include/fiss_planner/planning/corridor.hpp +62 -0
  42. fiss_planner-1.0.0/core/include/fiss_planner/planning/frenet_obstacles.hpp +108 -0
  43. fiss_planner-1.0.0/core/include/fiss_planner/planning/local_planner.hpp +125 -0
  44. fiss_planner-1.0.0/core/include/fiss_planner/planning/planner.hpp +124 -0
  45. fiss_planner-1.0.0/core/include/fiss_planner/planning/trajectory.hpp +65 -0
  46. fiss_planner-1.0.0/core/include/fiss_planner/prediction/lane_following.hpp +44 -0
  47. fiss_planner-1.0.0/core/include/fiss_planner/prediction/obstacle.hpp +41 -0
  48. fiss_planner-1.0.0/core/include/fiss_planner/smoothing/piecewise_jerk.hpp +46 -0
  49. fiss_planner-1.0.0/core/include/fiss_planner/smoothing/smoother.hpp +49 -0
  50. fiss_planner-1.0.0/core/package.xml +22 -0
  51. fiss_planner-1.0.0/core/src/box2d.cpp +40 -0
  52. fiss_planner-1.0.0/core/src/components.cpp +298 -0
  53. fiss_planner-1.0.0/core/src/config.cpp +211 -0
  54. fiss_planner-1.0.0/core/src/controller.cpp +136 -0
  55. fiss_planner-1.0.0/core/src/corridor.cpp +87 -0
  56. fiss_planner-1.0.0/core/src/frenet_obstacles.cpp +247 -0
  57. fiss_planner-1.0.0/core/src/lane_following.cpp +128 -0
  58. fiss_planner-1.0.0/core/src/local_planner.cpp +355 -0
  59. fiss_planner-1.0.0/core/src/mpc.cpp +119 -0
  60. fiss_planner-1.0.0/core/src/obstacle.cpp +49 -0
  61. fiss_planner-1.0.0/core/src/piecewise_jerk.cpp +91 -0
  62. fiss_planner-1.0.0/core/src/planner.cpp +239 -0
  63. fiss_planner-1.0.0/core/src/planners.cpp +311 -0
  64. fiss_planner-1.0.0/core/src/planners.hpp +94 -0
  65. fiss_planner-1.0.0/core/src/polynomial.cpp +66 -0
  66. fiss_planner-1.0.0/core/src/qp.hpp +118 -0
  67. fiss_planner-1.0.0/core/src/reference_line.cpp +175 -0
  68. fiss_planner-1.0.0/core/src/road_map.cpp +146 -0
  69. fiss_planner-1.0.0/core/src/route_corridor.cpp +294 -0
  70. fiss_planner-1.0.0/core/src/smoother.cpp +208 -0
  71. fiss_planner-1.0.0/core/src/spline.cpp +145 -0
  72. fiss_planner-1.0.0/core/test/CMakeLists.txt +32 -0
  73. fiss_planner-1.0.0/core/test/test_collision.cpp +91 -0
  74. fiss_planner-1.0.0/core/test/test_components.cpp +167 -0
  75. fiss_planner-1.0.0/core/test/test_config.cpp +54 -0
  76. fiss_planner-1.0.0/core/test/test_control.cpp +213 -0
  77. fiss_planner-1.0.0/core/test/test_map.cpp +276 -0
  78. fiss_planner-1.0.0/core/test/test_planners.cpp +221 -0
  79. fiss_planner-1.0.0/core/test/test_polynomial.cpp +60 -0
  80. fiss_planner-1.0.0/core/test/test_prediction.cpp +144 -0
  81. fiss_planner-1.0.0/core/test/test_reference_line.cpp +116 -0
  82. fiss_planner-1.0.0/core/test/test_safety.cpp +333 -0
  83. fiss_planner-1.0.0/core/test/test_spline.cpp +93 -0
  84. fiss_planner-1.0.0/core/test/test_utils.hpp +63 -0
  85. fiss_planner-1.0.0/docs/benchmarks.md +186 -0
  86. fiss_planner-1.0.0/docs/concepts.md +142 -0
  87. fiss_planner-1.0.0/docs/demo/data/DEU_A99-1_1_T-1.json +1 -0
  88. fiss_planner-1.0.0/docs/demo/data/USA_Lanker-2_16_T-1.json +1 -0
  89. fiss_planner-1.0.0/docs/demo/data/USA_US101-22_3_T-1.json +1 -0
  90. fiss_planner-1.0.0/docs/demo/data/ZAM_Tjunction-1_101_T-1.json +1 -0
  91. fiss_planner-1.0.0/docs/demo/data/ZAM_Zip-1_50_T-1.json +1 -0
  92. fiss_planner-1.0.0/docs/demo/data/index.json +47 -0
  93. fiss_planner-1.0.0/docs/demo/index.html +341 -0
  94. fiss_planner-1.0.0/docs/foxglove/fiss_planner_layout.json +202 -0
  95. fiss_planner-1.0.0/docs/foxglove.md +49 -0
  96. fiss_planner-1.0.0/docs/index.md +22 -0
  97. fiss_planner-1.0.0/docs/media/autobahn_fiss_plus.gif +0 -0
  98. fiss_planner-1.0.0/docs/media/carla_birdseye_cut_in.gif +0 -0
  99. fiss_planner-1.0.0/docs/media/carla_cut_in.webp +0 -0
  100. fiss_planner-1.0.0/docs/media/carla_overtake.webp +0 -0
  101. fiss_planner-1.0.0/docs/media/carla_traffic_hero.webp +0 -0
  102. fiss_planner-1.0.0/docs/media/compare_fop_fiss_fissplus.gif +0 -0
  103. fiss_planner-1.0.0/docs/media/logo.svg +18 -0
  104. fiss_planner-1.0.0/docs/media/merge_fiss_plus.gif +0 -0
  105. fiss_planner-1.0.0/docs/media/social_preview.png +0 -0
  106. fiss_planner-1.0.0/docs/media/tjunction_fiss_plus.gif +0 -0
  107. fiss_planner-1.0.0/docs/media/urban_fiss_plus.gif +0 -0
  108. fiss_planner-1.0.0/docs/media/us101_fiss_plus.gif +0 -0
  109. fiss_planner-1.0.0/docs/python.md +74 -0
  110. fiss_planner-1.0.0/docs/ros.md +71 -0
  111. fiss_planner-1.0.0/examples/make_social_preview.py +48 -0
  112. fiss_planner-1.0.0/examples/quickstart.ipynb +258 -0
  113. fiss_planner-1.0.0/mkdocs.yml +27 -0
  114. fiss_planner-1.0.0/msgs/fiss_planner_msgs/CMakeLists.txt +22 -0
  115. fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/Obstacle.msg +7 -0
  116. fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/ObstacleArray.msg +2 -0
  117. fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/ObstacleState.msg +6 -0
  118. fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/PlannerStats.msg +20 -0
  119. fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/StopLineState.msg +3 -0
  120. fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/StopLineStateArray.msg +2 -0
  121. fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/Trajectory.msg +5 -0
  122. fiss_planner-1.0.0/msgs/fiss_planner_msgs/msg/TrajectoryPoint.msg +10 -0
  123. fiss_planner-1.0.0/msgs/fiss_planner_msgs/package.xml +26 -0
  124. fiss_planner-1.0.0/pixi.lock +17014 -0
  125. fiss_planner-1.0.0/pixi.toml +157 -0
  126. fiss_planner-1.0.0/pyproject.toml +58 -0
  127. fiss_planner-1.0.0/python/CMakeLists.txt +15 -0
  128. fiss_planner-1.0.0/python/fiss_planner/__init__.py +29 -0
  129. fiss_planner-1.0.0/python/fiss_planner/bags/__init__.py +1 -0
  130. fiss_planner-1.0.0/python/fiss_planner/bags/from_commonroad.py +232 -0
  131. fiss_planner-1.0.0/python/fiss_planner/bags/msg_definitions.py +13 -0
  132. fiss_planner-1.0.0/python/fiss_planner/carla/__init__.py +1 -0
  133. fiss_planner-1.0.0/python/fiss_planner/carla/adapter.py +187 -0
  134. fiss_planner-1.0.0/python/fiss_planner/carla/closed_loop.py +612 -0
  135. fiss_planner-1.0.0/python/fiss_planner/carla/record.py +320 -0
  136. fiss_planner-1.0.0/python/fiss_planner/carla/render.py +86 -0
  137. fiss_planner-1.0.0/python/fiss_planner/commonroad/__init__.py +20 -0
  138. fiss_planner-1.0.0/python/fiss_planner/commonroad/adapter.py +230 -0
  139. fiss_planner-1.0.0/python/fiss_planner/commonroad/benchmark.py +523 -0
  140. fiss_planner-1.0.0/python/fiss_planner/commonroad/demo.py +209 -0
  141. fiss_planner-1.0.0/python/fiss_planner/commonroad/export_web.py +95 -0
  142. fiss_planner-1.0.0/python/fiss_planner/viz/__init__.py +5 -0
  143. fiss_planner-1.0.0/python/fiss_planner/viz/foxglove_scene.py +250 -0
  144. fiss_planner-1.0.0/python/src/bindings.cpp +737 -0
  145. fiss_planner-1.0.0/python/tests/test_bindings.py +178 -0
  146. fiss_planner-1.0.0/ros/common/include/fiss_planner_ros/lanelet2_adapter.hpp +42 -0
  147. fiss_planner-1.0.0/ros/common/src/lanelet2_adapter.cpp +128 -0
  148. fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/CMakeLists.txt +39 -0
  149. fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/cfg/FissPlanner.cfg +69 -0
  150. fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/launch/planner.launch +31 -0
  151. fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/package.xml +32 -0
  152. fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/src/controller_node.cpp +77 -0
  153. fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/src/planner_node.cpp +375 -0
  154. fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/test/planner_node.test +8 -0
  155. fiss_planner-1.0.0/ros/ros1/fiss_planner_ros1/test/test_planner_node.cpp +94 -0
  156. fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/CMakeLists.txt +63 -0
  157. fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/config/planner.yaml +39 -0
  158. fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/include/fiss_planner_ros2/planner_node.hpp +120 -0
  159. fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/launch/planner.launch.py +71 -0
  160. fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/package.xml +39 -0
  161. fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/rviz/fiss_planner.rviz +55 -0
  162. fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/scripts/bag_replay_eval.py +240 -0
  163. fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/src/controller_main.cpp +12 -0
  164. fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/src/controller_node.cpp +82 -0
  165. fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/src/main.cpp +12 -0
  166. fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/src/planner_node.cpp +664 -0
  167. fiss_planner-1.0.0/ros/ros2/fiss_planner_ros2/test/test_planner_node.cpp +180 -0
@@ -0,0 +1,5 @@
1
+ BasedOnStyle: Google
2
+ ColumnLimit: 110
3
+ DerivePointerAlignment: false
4
+ PointerAlignment: Left
5
+ IncludeBlocks: Regroup
@@ -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,11 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an improvement
4
+ labels: enhancement
5
+ ---
6
+
7
+ **Use case**
8
+
9
+ **Proposed solution**
10
+
11
+ **Alternatives considered**
@@ -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.