Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Maxime CLEMENT
- Alqudah Mohammad
Authors
Obstacle Velocity Limiter
Purpose
This node limits the velocity when driving in the direction of an obstacle. For example, it allows to reduce the velocity when driving close to a guard rail in a curve.
Without this node | With this node |
---|---|
![]() |
![]() |
Inner-workings / Algorithms
Using a parameter min_ttc
(minimum time to collision), the node set velocity limits such that
no collision with an obstacle would occur, even without new control inputs for a duration of min_ttc
.
To achieve this, the motion of the ego vehicle is simulated forward in time at each point of the trajectory to create a corresponding footprint. If the footprint collides with some obstacle, the velocity at the trajectory point is reduced such that the new simulated footprint do not have any collision.
Simulated Motion, Footprint, and Collision Distance
The motion of the ego vehicle is simulated at each trajectory point using the heading
, velocity
, and steering
defined at the point.
Footprints are then constructed from these simulations and checked for collision.
If a collision is found, the distance from the trajectory point is used to calculate the adjusted velocity that would produce a collision-free footprint. Parameter simulation.distance_method
allow to switch between an exact distance calculation and a less expensive approximation using a simple euclidean distance.
Two models can be selected with parameter simulation.model
for simulating the motion of the vehicle: a simple particle model and a more complicated bicycle model.
Particle Model
The particle model uses the constant heading and velocity of the vehicle at a trajectory point to simulate the future motion. The simulated forward motion corresponds to a straight line and the footprint to a rectangle.
Footprint
The rectangle footprint is built from 2 lines parallel to the simulated forward motion and at a distance of half the vehicle width.
Distance
When a collision point is found within the footprint, the distance is calculated as described in the following figure.
Bicycle Model
The bicycle model uses the constant heading, velocity, and steering of the vehicle at a trajectory point to simulate the future motion.
The simulated forward motion corresponds to an arc around the circle of curvature associated with the steering.
Uncertainty in the steering can be introduced with the simulation.steering_offset
parameter which will generate a range of motion from a left-most to a right-most steering.
This results in 3 curved lines starting from the same trajectory point.
A parameter simulation.nb_points
is used to adjust the precision of these lines, with a minimum of 2
resulting in straight lines and higher values increasing the precision of the curves.
By default, the steering values contained in the trajectory message are used.
Parameter trajectory_preprocessing.calculate_steering_angles
allows to recalculate these values when set to true
.
Footprint
The footprint of the bicycle model is created from lines parallel to the left and right simulated motion at a distance of half the vehicle width. In addition, the two points on the left and right of the end point of the central simulated motion are used to complete the polygon.
Distance
The distance to a collision point is calculated by finding the curvature circle passing through the trajectory point and the collision point.
Obstacle Detection
Obstacles are represented as points or linestrings (i.e., sequence of points) around the obstacles and are constructed from an occupancy grid, a pointcloud, or the lanelet map.
The lanelet map is always checked for obstacles but the other source is switched using parameter obstacles.dynamic_source
.
To efficiently find obstacles intersecting with a footprint, they are stored in a R-tree. Two trees are used, one for the obstacle points, and one for the obstacle linestrings (which are decomposed into segments to simplify the R-tree).
Obstacle masks
Dynamic obstacles
Moving obstacles such as other cars should not be considered by this module. These obstacles are detected by the perception modules and represented as polygons. Obstacles inside these polygons are ignored.
Only dynamic obstacles with a velocity above parameter obstacles.dynamic_obstacles_min_vel
are removed.
To deal with delays and precision errors, the polygons can be enlarged with parameter obstacles.dynamic_obstacles_buffer
.
Obstacles outside of the safety envelope
Obstacles that are not inside any forward simulated footprint are ignored if parameter obstacles.filter_envelope
is set to true.
The safety envelope polygon is built from all the footprints and used as a positive mask on the occupancy grid or pointcloud.
This option can reduce the total number of obstacles which reduces the cost of collision detection. However, the cost of masking the envelope is usually too high to be interesting.
Obstacles on the ego path
If parameter obstacles.ignore_obstacles_on_path
is set to true
, a polygon mask is built from the trajectory and the vehicle dimension. Any obstacle in this polygon is ignored.
File truncated at 100 lines see the full file
Changelog for package autoware_motion_velocity_obstacle_velocity_limiter_module
0.47.0 (2025-08-11)
- style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
- Contributors: Mete Fatih Cırıt
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat(autoware_motion_velocity_planner): only wait for required subscriptions (#10732)
- Contributors: Ryohsuke Mitsudome, TaikiYamada4
0.45.0 (2025-05-22)
0.44.2 (2025-06-10)
0.44.1 (2025-05-01)
0.44.0 (2025-04-18)
- Merge remote-tracking branch 'origin/main' into humble
- chore(motion_velocity_planner): move common and node packages to core (#10367)
- Contributors: Maxime CLEMENT, Ryohsuke Mitsudome
0.43.0 (2025-03-21)
- Merge remote-tracking branch 'origin/main' into chore/bump-version-0.43
- chore: rename from [autoware.universe]{.title-ref} to [autoware_universe]{.title-ref} (#10306)
- Contributors: Hayato Mizushima, Yutaka Kondo
0.42.0 (2025-03-03)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_utils): replace autoware_universe_utils with autoware_utils (#10191)
-
feat(motion_velocity_planner): common implementation for motion_velocity_obstacle_<stop/slow_down/cruise>_module (#10035)
- feat(motion_velocity_planner): prepare for motion_velocity_<stop/slow_down/cruise>_module
* update launch ---------
-
Contributors: Fumiya Watanabe, Takayuki Murooka, 心刚
0.41.2 (2025-02-19)
- chore: bump version to 0.41.1 (#10088)
- Contributors: Ryohsuke Mitsudome
0.41.1 (2025-02-10)
0.41.0 (2025-01-29)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(motion_velocity_planner)!: add _universe suffix to autoware_motion_velocity_planner_common and autoware_motion_velocity_planner_node (#9942)
-
feat(planning_factor)!: remove velocity_factor, steering_factor and introduce planning_factor (#9927) Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>> Co-authored-by: Ryohsuke Mitsudome <<43976834+mitsudome-r@users.noreply.github.com>> Co-authored-by: satoshi-ota <<satoshi.ota928@gmail.com>>
-
fix(autoware_motion_velocity_obstacle_velocity_limiter_module): remove cppcheck suppressions (#9843)
-
feat(motion_velocity_planner): introduce Object/Pointcloud structure in PlannerData (#9812)
- feat: new object/pointcloud struct in motion velocity planner
- update planner_data
- modify modules
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_motion_velocity_obstacle_velocity_limiter_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Maxime CLEMENT
- Alqudah Mohammad
Authors
Obstacle Velocity Limiter
Purpose
This node limits the velocity when driving in the direction of an obstacle. For example, it allows to reduce the velocity when driving close to a guard rail in a curve.
Without this node | With this node |
---|---|
![]() |
![]() |
Inner-workings / Algorithms
Using a parameter min_ttc
(minimum time to collision), the node set velocity limits such that
no collision with an obstacle would occur, even without new control inputs for a duration of min_ttc
.
To achieve this, the motion of the ego vehicle is simulated forward in time at each point of the trajectory to create a corresponding footprint. If the footprint collides with some obstacle, the velocity at the trajectory point is reduced such that the new simulated footprint do not have any collision.
Simulated Motion, Footprint, and Collision Distance
The motion of the ego vehicle is simulated at each trajectory point using the heading
, velocity
, and steering
defined at the point.
Footprints are then constructed from these simulations and checked for collision.
If a collision is found, the distance from the trajectory point is used to calculate the adjusted velocity that would produce a collision-free footprint. Parameter simulation.distance_method
allow to switch between an exact distance calculation and a less expensive approximation using a simple euclidean distance.
Two models can be selected with parameter simulation.model
for simulating the motion of the vehicle: a simple particle model and a more complicated bicycle model.
Particle Model
The particle model uses the constant heading and velocity of the vehicle at a trajectory point to simulate the future motion. The simulated forward motion corresponds to a straight line and the footprint to a rectangle.
Footprint
The rectangle footprint is built from 2 lines parallel to the simulated forward motion and at a distance of half the vehicle width.
Distance
When a collision point is found within the footprint, the distance is calculated as described in the following figure.
Bicycle Model
The bicycle model uses the constant heading, velocity, and steering of the vehicle at a trajectory point to simulate the future motion.
The simulated forward motion corresponds to an arc around the circle of curvature associated with the steering.
Uncertainty in the steering can be introduced with the simulation.steering_offset
parameter which will generate a range of motion from a left-most to a right-most steering.
This results in 3 curved lines starting from the same trajectory point.
A parameter simulation.nb_points
is used to adjust the precision of these lines, with a minimum of 2
resulting in straight lines and higher values increasing the precision of the curves.
By default, the steering values contained in the trajectory message are used.
Parameter trajectory_preprocessing.calculate_steering_angles
allows to recalculate these values when set to true
.
Footprint
The footprint of the bicycle model is created from lines parallel to the left and right simulated motion at a distance of half the vehicle width. In addition, the two points on the left and right of the end point of the central simulated motion are used to complete the polygon.
Distance
The distance to a collision point is calculated by finding the curvature circle passing through the trajectory point and the collision point.
Obstacle Detection
Obstacles are represented as points or linestrings (i.e., sequence of points) around the obstacles and are constructed from an occupancy grid, a pointcloud, or the lanelet map.
The lanelet map is always checked for obstacles but the other source is switched using parameter obstacles.dynamic_source
.
To efficiently find obstacles intersecting with a footprint, they are stored in a R-tree. Two trees are used, one for the obstacle points, and one for the obstacle linestrings (which are decomposed into segments to simplify the R-tree).
Obstacle masks
Dynamic obstacles
Moving obstacles such as other cars should not be considered by this module. These obstacles are detected by the perception modules and represented as polygons. Obstacles inside these polygons are ignored.
Only dynamic obstacles with a velocity above parameter obstacles.dynamic_obstacles_min_vel
are removed.
To deal with delays and precision errors, the polygons can be enlarged with parameter obstacles.dynamic_obstacles_buffer
.
Obstacles outside of the safety envelope
Obstacles that are not inside any forward simulated footprint are ignored if parameter obstacles.filter_envelope
is set to true.
The safety envelope polygon is built from all the footprints and used as a positive mask on the occupancy grid or pointcloud.
This option can reduce the total number of obstacles which reduces the cost of collision detection. However, the cost of masking the envelope is usually too high to be interesting.
Obstacles on the ego path
If parameter obstacles.ignore_obstacles_on_path
is set to true
, a polygon mask is built from the trajectory and the vehicle dimension. Any obstacle in this polygon is ignored.
File truncated at 100 lines see the full file
Changelog for package autoware_motion_velocity_obstacle_velocity_limiter_module
0.47.0 (2025-08-11)
- style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
- Contributors: Mete Fatih Cırıt
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat(autoware_motion_velocity_planner): only wait for required subscriptions (#10732)
- Contributors: Ryohsuke Mitsudome, TaikiYamada4
0.45.0 (2025-05-22)
0.44.2 (2025-06-10)
0.44.1 (2025-05-01)
0.44.0 (2025-04-18)
- Merge remote-tracking branch 'origin/main' into humble
- chore(motion_velocity_planner): move common and node packages to core (#10367)
- Contributors: Maxime CLEMENT, Ryohsuke Mitsudome
0.43.0 (2025-03-21)
- Merge remote-tracking branch 'origin/main' into chore/bump-version-0.43
- chore: rename from [autoware.universe]{.title-ref} to [autoware_universe]{.title-ref} (#10306)
- Contributors: Hayato Mizushima, Yutaka Kondo
0.42.0 (2025-03-03)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_utils): replace autoware_universe_utils with autoware_utils (#10191)
-
feat(motion_velocity_planner): common implementation for motion_velocity_obstacle_<stop/slow_down/cruise>_module (#10035)
- feat(motion_velocity_planner): prepare for motion_velocity_<stop/slow_down/cruise>_module
* update launch ---------
-
Contributors: Fumiya Watanabe, Takayuki Murooka, 心刚
0.41.2 (2025-02-19)
- chore: bump version to 0.41.1 (#10088)
- Contributors: Ryohsuke Mitsudome
0.41.1 (2025-02-10)
0.41.0 (2025-01-29)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(motion_velocity_planner)!: add _universe suffix to autoware_motion_velocity_planner_common and autoware_motion_velocity_planner_node (#9942)
-
feat(planning_factor)!: remove velocity_factor, steering_factor and introduce planning_factor (#9927) Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>> Co-authored-by: Ryohsuke Mitsudome <<43976834+mitsudome-r@users.noreply.github.com>> Co-authored-by: satoshi-ota <<satoshi.ota928@gmail.com>>
-
fix(autoware_motion_velocity_obstacle_velocity_limiter_module): remove cppcheck suppressions (#9843)
-
feat(motion_velocity_planner): introduce Object/Pointcloud structure in PlannerData (#9812)
- feat: new object/pointcloud struct in motion velocity planner
- update planner_data
- modify modules
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_motion_velocity_obstacle_velocity_limiter_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Maxime CLEMENT
- Alqudah Mohammad
Authors
Obstacle Velocity Limiter
Purpose
This node limits the velocity when driving in the direction of an obstacle. For example, it allows to reduce the velocity when driving close to a guard rail in a curve.
Without this node | With this node |
---|---|
![]() |
![]() |
Inner-workings / Algorithms
Using a parameter min_ttc
(minimum time to collision), the node set velocity limits such that
no collision with an obstacle would occur, even without new control inputs for a duration of min_ttc
.
To achieve this, the motion of the ego vehicle is simulated forward in time at each point of the trajectory to create a corresponding footprint. If the footprint collides with some obstacle, the velocity at the trajectory point is reduced such that the new simulated footprint do not have any collision.
Simulated Motion, Footprint, and Collision Distance
The motion of the ego vehicle is simulated at each trajectory point using the heading
, velocity
, and steering
defined at the point.
Footprints are then constructed from these simulations and checked for collision.
If a collision is found, the distance from the trajectory point is used to calculate the adjusted velocity that would produce a collision-free footprint. Parameter simulation.distance_method
allow to switch between an exact distance calculation and a less expensive approximation using a simple euclidean distance.
Two models can be selected with parameter simulation.model
for simulating the motion of the vehicle: a simple particle model and a more complicated bicycle model.
Particle Model
The particle model uses the constant heading and velocity of the vehicle at a trajectory point to simulate the future motion. The simulated forward motion corresponds to a straight line and the footprint to a rectangle.
Footprint
The rectangle footprint is built from 2 lines parallel to the simulated forward motion and at a distance of half the vehicle width.
Distance
When a collision point is found within the footprint, the distance is calculated as described in the following figure.
Bicycle Model
The bicycle model uses the constant heading, velocity, and steering of the vehicle at a trajectory point to simulate the future motion.
The simulated forward motion corresponds to an arc around the circle of curvature associated with the steering.
Uncertainty in the steering can be introduced with the simulation.steering_offset
parameter which will generate a range of motion from a left-most to a right-most steering.
This results in 3 curved lines starting from the same trajectory point.
A parameter simulation.nb_points
is used to adjust the precision of these lines, with a minimum of 2
resulting in straight lines and higher values increasing the precision of the curves.
By default, the steering values contained in the trajectory message are used.
Parameter trajectory_preprocessing.calculate_steering_angles
allows to recalculate these values when set to true
.
Footprint
The footprint of the bicycle model is created from lines parallel to the left and right simulated motion at a distance of half the vehicle width. In addition, the two points on the left and right of the end point of the central simulated motion are used to complete the polygon.
Distance
The distance to a collision point is calculated by finding the curvature circle passing through the trajectory point and the collision point.
Obstacle Detection
Obstacles are represented as points or linestrings (i.e., sequence of points) around the obstacles and are constructed from an occupancy grid, a pointcloud, or the lanelet map.
The lanelet map is always checked for obstacles but the other source is switched using parameter obstacles.dynamic_source
.
To efficiently find obstacles intersecting with a footprint, they are stored in a R-tree. Two trees are used, one for the obstacle points, and one for the obstacle linestrings (which are decomposed into segments to simplify the R-tree).
Obstacle masks
Dynamic obstacles
Moving obstacles such as other cars should not be considered by this module. These obstacles are detected by the perception modules and represented as polygons. Obstacles inside these polygons are ignored.
Only dynamic obstacles with a velocity above parameter obstacles.dynamic_obstacles_min_vel
are removed.
To deal with delays and precision errors, the polygons can be enlarged with parameter obstacles.dynamic_obstacles_buffer
.
Obstacles outside of the safety envelope
Obstacles that are not inside any forward simulated footprint are ignored if parameter obstacles.filter_envelope
is set to true.
The safety envelope polygon is built from all the footprints and used as a positive mask on the occupancy grid or pointcloud.
This option can reduce the total number of obstacles which reduces the cost of collision detection. However, the cost of masking the envelope is usually too high to be interesting.
Obstacles on the ego path
If parameter obstacles.ignore_obstacles_on_path
is set to true
, a polygon mask is built from the trajectory and the vehicle dimension. Any obstacle in this polygon is ignored.
File truncated at 100 lines see the full file
Changelog for package autoware_motion_velocity_obstacle_velocity_limiter_module
0.47.0 (2025-08-11)
- style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
- Contributors: Mete Fatih Cırıt
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat(autoware_motion_velocity_planner): only wait for required subscriptions (#10732)
- Contributors: Ryohsuke Mitsudome, TaikiYamada4
0.45.0 (2025-05-22)
0.44.2 (2025-06-10)
0.44.1 (2025-05-01)
0.44.0 (2025-04-18)
- Merge remote-tracking branch 'origin/main' into humble
- chore(motion_velocity_planner): move common and node packages to core (#10367)
- Contributors: Maxime CLEMENT, Ryohsuke Mitsudome
0.43.0 (2025-03-21)
- Merge remote-tracking branch 'origin/main' into chore/bump-version-0.43
- chore: rename from [autoware.universe]{.title-ref} to [autoware_universe]{.title-ref} (#10306)
- Contributors: Hayato Mizushima, Yutaka Kondo
0.42.0 (2025-03-03)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_utils): replace autoware_universe_utils with autoware_utils (#10191)
-
feat(motion_velocity_planner): common implementation for motion_velocity_obstacle_<stop/slow_down/cruise>_module (#10035)
- feat(motion_velocity_planner): prepare for motion_velocity_<stop/slow_down/cruise>_module
* update launch ---------
-
Contributors: Fumiya Watanabe, Takayuki Murooka, 心刚
0.41.2 (2025-02-19)
- chore: bump version to 0.41.1 (#10088)
- Contributors: Ryohsuke Mitsudome
0.41.1 (2025-02-10)
0.41.0 (2025-01-29)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(motion_velocity_planner)!: add _universe suffix to autoware_motion_velocity_planner_common and autoware_motion_velocity_planner_node (#9942)
-
feat(planning_factor)!: remove velocity_factor, steering_factor and introduce planning_factor (#9927) Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>> Co-authored-by: Ryohsuke Mitsudome <<43976834+mitsudome-r@users.noreply.github.com>> Co-authored-by: satoshi-ota <<satoshi.ota928@gmail.com>>
-
fix(autoware_motion_velocity_obstacle_velocity_limiter_module): remove cppcheck suppressions (#9843)
-
feat(motion_velocity_planner): introduce Object/Pointcloud structure in PlannerData (#9812)
- feat: new object/pointcloud struct in motion velocity planner
- update planner_data
- modify modules
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_motion_velocity_obstacle_velocity_limiter_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Maxime CLEMENT
- Alqudah Mohammad
Authors
Obstacle Velocity Limiter
Purpose
This node limits the velocity when driving in the direction of an obstacle. For example, it allows to reduce the velocity when driving close to a guard rail in a curve.
Without this node | With this node |
---|---|
![]() |
![]() |
Inner-workings / Algorithms
Using a parameter min_ttc
(minimum time to collision), the node set velocity limits such that
no collision with an obstacle would occur, even without new control inputs for a duration of min_ttc
.
To achieve this, the motion of the ego vehicle is simulated forward in time at each point of the trajectory to create a corresponding footprint. If the footprint collides with some obstacle, the velocity at the trajectory point is reduced such that the new simulated footprint do not have any collision.
Simulated Motion, Footprint, and Collision Distance
The motion of the ego vehicle is simulated at each trajectory point using the heading
, velocity
, and steering
defined at the point.
Footprints are then constructed from these simulations and checked for collision.
If a collision is found, the distance from the trajectory point is used to calculate the adjusted velocity that would produce a collision-free footprint. Parameter simulation.distance_method
allow to switch between an exact distance calculation and a less expensive approximation using a simple euclidean distance.
Two models can be selected with parameter simulation.model
for simulating the motion of the vehicle: a simple particle model and a more complicated bicycle model.
Particle Model
The particle model uses the constant heading and velocity of the vehicle at a trajectory point to simulate the future motion. The simulated forward motion corresponds to a straight line and the footprint to a rectangle.
Footprint
The rectangle footprint is built from 2 lines parallel to the simulated forward motion and at a distance of half the vehicle width.
Distance
When a collision point is found within the footprint, the distance is calculated as described in the following figure.
Bicycle Model
The bicycle model uses the constant heading, velocity, and steering of the vehicle at a trajectory point to simulate the future motion.
The simulated forward motion corresponds to an arc around the circle of curvature associated with the steering.
Uncertainty in the steering can be introduced with the simulation.steering_offset
parameter which will generate a range of motion from a left-most to a right-most steering.
This results in 3 curved lines starting from the same trajectory point.
A parameter simulation.nb_points
is used to adjust the precision of these lines, with a minimum of 2
resulting in straight lines and higher values increasing the precision of the curves.
By default, the steering values contained in the trajectory message are used.
Parameter trajectory_preprocessing.calculate_steering_angles
allows to recalculate these values when set to true
.
Footprint
The footprint of the bicycle model is created from lines parallel to the left and right simulated motion at a distance of half the vehicle width. In addition, the two points on the left and right of the end point of the central simulated motion are used to complete the polygon.
Distance
The distance to a collision point is calculated by finding the curvature circle passing through the trajectory point and the collision point.
Obstacle Detection
Obstacles are represented as points or linestrings (i.e., sequence of points) around the obstacles and are constructed from an occupancy grid, a pointcloud, or the lanelet map.
The lanelet map is always checked for obstacles but the other source is switched using parameter obstacles.dynamic_source
.
To efficiently find obstacles intersecting with a footprint, they are stored in a R-tree. Two trees are used, one for the obstacle points, and one for the obstacle linestrings (which are decomposed into segments to simplify the R-tree).
Obstacle masks
Dynamic obstacles
Moving obstacles such as other cars should not be considered by this module. These obstacles are detected by the perception modules and represented as polygons. Obstacles inside these polygons are ignored.
Only dynamic obstacles with a velocity above parameter obstacles.dynamic_obstacles_min_vel
are removed.
To deal with delays and precision errors, the polygons can be enlarged with parameter obstacles.dynamic_obstacles_buffer
.
Obstacles outside of the safety envelope
Obstacles that are not inside any forward simulated footprint are ignored if parameter obstacles.filter_envelope
is set to true.
The safety envelope polygon is built from all the footprints and used as a positive mask on the occupancy grid or pointcloud.
This option can reduce the total number of obstacles which reduces the cost of collision detection. However, the cost of masking the envelope is usually too high to be interesting.
Obstacles on the ego path
If parameter obstacles.ignore_obstacles_on_path
is set to true
, a polygon mask is built from the trajectory and the vehicle dimension. Any obstacle in this polygon is ignored.
File truncated at 100 lines see the full file
Changelog for package autoware_motion_velocity_obstacle_velocity_limiter_module
0.47.0 (2025-08-11)
- style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
- Contributors: Mete Fatih Cırıt
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat(autoware_motion_velocity_planner): only wait for required subscriptions (#10732)
- Contributors: Ryohsuke Mitsudome, TaikiYamada4
0.45.0 (2025-05-22)
0.44.2 (2025-06-10)
0.44.1 (2025-05-01)
0.44.0 (2025-04-18)
- Merge remote-tracking branch 'origin/main' into humble
- chore(motion_velocity_planner): move common and node packages to core (#10367)
- Contributors: Maxime CLEMENT, Ryohsuke Mitsudome
0.43.0 (2025-03-21)
- Merge remote-tracking branch 'origin/main' into chore/bump-version-0.43
- chore: rename from [autoware.universe]{.title-ref} to [autoware_universe]{.title-ref} (#10306)
- Contributors: Hayato Mizushima, Yutaka Kondo
0.42.0 (2025-03-03)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_utils): replace autoware_universe_utils with autoware_utils (#10191)
-
feat(motion_velocity_planner): common implementation for motion_velocity_obstacle_<stop/slow_down/cruise>_module (#10035)
- feat(motion_velocity_planner): prepare for motion_velocity_<stop/slow_down/cruise>_module
* update launch ---------
-
Contributors: Fumiya Watanabe, Takayuki Murooka, 心刚
0.41.2 (2025-02-19)
- chore: bump version to 0.41.1 (#10088)
- Contributors: Ryohsuke Mitsudome
0.41.1 (2025-02-10)
0.41.0 (2025-01-29)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(motion_velocity_planner)!: add _universe suffix to autoware_motion_velocity_planner_common and autoware_motion_velocity_planner_node (#9942)
-
feat(planning_factor)!: remove velocity_factor, steering_factor and introduce planning_factor (#9927) Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>> Co-authored-by: Ryohsuke Mitsudome <<43976834+mitsudome-r@users.noreply.github.com>> Co-authored-by: satoshi-ota <<satoshi.ota928@gmail.com>>
-
fix(autoware_motion_velocity_obstacle_velocity_limiter_module): remove cppcheck suppressions (#9843)
-
feat(motion_velocity_planner): introduce Object/Pointcloud structure in PlannerData (#9812)
- feat: new object/pointcloud struct in motion velocity planner
- update planner_data
- modify modules
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_motion_velocity_obstacle_velocity_limiter_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Maxime CLEMENT
- Alqudah Mohammad
Authors
Obstacle Velocity Limiter
Purpose
This node limits the velocity when driving in the direction of an obstacle. For example, it allows to reduce the velocity when driving close to a guard rail in a curve.
Without this node | With this node |
---|---|
![]() |
![]() |
Inner-workings / Algorithms
Using a parameter min_ttc
(minimum time to collision), the node set velocity limits such that
no collision with an obstacle would occur, even without new control inputs for a duration of min_ttc
.
To achieve this, the motion of the ego vehicle is simulated forward in time at each point of the trajectory to create a corresponding footprint. If the footprint collides with some obstacle, the velocity at the trajectory point is reduced such that the new simulated footprint do not have any collision.
Simulated Motion, Footprint, and Collision Distance
The motion of the ego vehicle is simulated at each trajectory point using the heading
, velocity
, and steering
defined at the point.
Footprints are then constructed from these simulations and checked for collision.
If a collision is found, the distance from the trajectory point is used to calculate the adjusted velocity that would produce a collision-free footprint. Parameter simulation.distance_method
allow to switch between an exact distance calculation and a less expensive approximation using a simple euclidean distance.
Two models can be selected with parameter simulation.model
for simulating the motion of the vehicle: a simple particle model and a more complicated bicycle model.
Particle Model
The particle model uses the constant heading and velocity of the vehicle at a trajectory point to simulate the future motion. The simulated forward motion corresponds to a straight line and the footprint to a rectangle.
Footprint
The rectangle footprint is built from 2 lines parallel to the simulated forward motion and at a distance of half the vehicle width.
Distance
When a collision point is found within the footprint, the distance is calculated as described in the following figure.
Bicycle Model
The bicycle model uses the constant heading, velocity, and steering of the vehicle at a trajectory point to simulate the future motion.
The simulated forward motion corresponds to an arc around the circle of curvature associated with the steering.
Uncertainty in the steering can be introduced with the simulation.steering_offset
parameter which will generate a range of motion from a left-most to a right-most steering.
This results in 3 curved lines starting from the same trajectory point.
A parameter simulation.nb_points
is used to adjust the precision of these lines, with a minimum of 2
resulting in straight lines and higher values increasing the precision of the curves.
By default, the steering values contained in the trajectory message are used.
Parameter trajectory_preprocessing.calculate_steering_angles
allows to recalculate these values when set to true
.
Footprint
The footprint of the bicycle model is created from lines parallel to the left and right simulated motion at a distance of half the vehicle width. In addition, the two points on the left and right of the end point of the central simulated motion are used to complete the polygon.
Distance
The distance to a collision point is calculated by finding the curvature circle passing through the trajectory point and the collision point.
Obstacle Detection
Obstacles are represented as points or linestrings (i.e., sequence of points) around the obstacles and are constructed from an occupancy grid, a pointcloud, or the lanelet map.
The lanelet map is always checked for obstacles but the other source is switched using parameter obstacles.dynamic_source
.
To efficiently find obstacles intersecting with a footprint, they are stored in a R-tree. Two trees are used, one for the obstacle points, and one for the obstacle linestrings (which are decomposed into segments to simplify the R-tree).
Obstacle masks
Dynamic obstacles
Moving obstacles such as other cars should not be considered by this module. These obstacles are detected by the perception modules and represented as polygons. Obstacles inside these polygons are ignored.
Only dynamic obstacles with a velocity above parameter obstacles.dynamic_obstacles_min_vel
are removed.
To deal with delays and precision errors, the polygons can be enlarged with parameter obstacles.dynamic_obstacles_buffer
.
Obstacles outside of the safety envelope
Obstacles that are not inside any forward simulated footprint are ignored if parameter obstacles.filter_envelope
is set to true.
The safety envelope polygon is built from all the footprints and used as a positive mask on the occupancy grid or pointcloud.
This option can reduce the total number of obstacles which reduces the cost of collision detection. However, the cost of masking the envelope is usually too high to be interesting.
Obstacles on the ego path
If parameter obstacles.ignore_obstacles_on_path
is set to true
, a polygon mask is built from the trajectory and the vehicle dimension. Any obstacle in this polygon is ignored.
File truncated at 100 lines see the full file
Changelog for package autoware_motion_velocity_obstacle_velocity_limiter_module
0.47.0 (2025-08-11)
- style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
- Contributors: Mete Fatih Cırıt
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat(autoware_motion_velocity_planner): only wait for required subscriptions (#10732)
- Contributors: Ryohsuke Mitsudome, TaikiYamada4
0.45.0 (2025-05-22)
0.44.2 (2025-06-10)
0.44.1 (2025-05-01)
0.44.0 (2025-04-18)
- Merge remote-tracking branch 'origin/main' into humble
- chore(motion_velocity_planner): move common and node packages to core (#10367)
- Contributors: Maxime CLEMENT, Ryohsuke Mitsudome
0.43.0 (2025-03-21)
- Merge remote-tracking branch 'origin/main' into chore/bump-version-0.43
- chore: rename from [autoware.universe]{.title-ref} to [autoware_universe]{.title-ref} (#10306)
- Contributors: Hayato Mizushima, Yutaka Kondo
0.42.0 (2025-03-03)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_utils): replace autoware_universe_utils with autoware_utils (#10191)
-
feat(motion_velocity_planner): common implementation for motion_velocity_obstacle_<stop/slow_down/cruise>_module (#10035)
- feat(motion_velocity_planner): prepare for motion_velocity_<stop/slow_down/cruise>_module
* update launch ---------
-
Contributors: Fumiya Watanabe, Takayuki Murooka, 心刚
0.41.2 (2025-02-19)
- chore: bump version to 0.41.1 (#10088)
- Contributors: Ryohsuke Mitsudome
0.41.1 (2025-02-10)
0.41.0 (2025-01-29)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(motion_velocity_planner)!: add _universe suffix to autoware_motion_velocity_planner_common and autoware_motion_velocity_planner_node (#9942)
-
feat(planning_factor)!: remove velocity_factor, steering_factor and introduce planning_factor (#9927) Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>> Co-authored-by: Ryohsuke Mitsudome <<43976834+mitsudome-r@users.noreply.github.com>> Co-authored-by: satoshi-ota <<satoshi.ota928@gmail.com>>
-
fix(autoware_motion_velocity_obstacle_velocity_limiter_module): remove cppcheck suppressions (#9843)
-
feat(motion_velocity_planner): introduce Object/Pointcloud structure in PlannerData (#9812)
- feat: new object/pointcloud struct in motion velocity planner
- update planner_data
- modify modules
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_motion_velocity_obstacle_velocity_limiter_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Maxime CLEMENT
- Alqudah Mohammad
Authors
Obstacle Velocity Limiter
Purpose
This node limits the velocity when driving in the direction of an obstacle. For example, it allows to reduce the velocity when driving close to a guard rail in a curve.
Without this node | With this node |
---|---|
![]() |
![]() |
Inner-workings / Algorithms
Using a parameter min_ttc
(minimum time to collision), the node set velocity limits such that
no collision with an obstacle would occur, even without new control inputs for a duration of min_ttc
.
To achieve this, the motion of the ego vehicle is simulated forward in time at each point of the trajectory to create a corresponding footprint. If the footprint collides with some obstacle, the velocity at the trajectory point is reduced such that the new simulated footprint do not have any collision.
Simulated Motion, Footprint, and Collision Distance
The motion of the ego vehicle is simulated at each trajectory point using the heading
, velocity
, and steering
defined at the point.
Footprints are then constructed from these simulations and checked for collision.
If a collision is found, the distance from the trajectory point is used to calculate the adjusted velocity that would produce a collision-free footprint. Parameter simulation.distance_method
allow to switch between an exact distance calculation and a less expensive approximation using a simple euclidean distance.
Two models can be selected with parameter simulation.model
for simulating the motion of the vehicle: a simple particle model and a more complicated bicycle model.
Particle Model
The particle model uses the constant heading and velocity of the vehicle at a trajectory point to simulate the future motion. The simulated forward motion corresponds to a straight line and the footprint to a rectangle.
Footprint
The rectangle footprint is built from 2 lines parallel to the simulated forward motion and at a distance of half the vehicle width.
Distance
When a collision point is found within the footprint, the distance is calculated as described in the following figure.
Bicycle Model
The bicycle model uses the constant heading, velocity, and steering of the vehicle at a trajectory point to simulate the future motion.
The simulated forward motion corresponds to an arc around the circle of curvature associated with the steering.
Uncertainty in the steering can be introduced with the simulation.steering_offset
parameter which will generate a range of motion from a left-most to a right-most steering.
This results in 3 curved lines starting from the same trajectory point.
A parameter simulation.nb_points
is used to adjust the precision of these lines, with a minimum of 2
resulting in straight lines and higher values increasing the precision of the curves.
By default, the steering values contained in the trajectory message are used.
Parameter trajectory_preprocessing.calculate_steering_angles
allows to recalculate these values when set to true
.
Footprint
The footprint of the bicycle model is created from lines parallel to the left and right simulated motion at a distance of half the vehicle width. In addition, the two points on the left and right of the end point of the central simulated motion are used to complete the polygon.
Distance
The distance to a collision point is calculated by finding the curvature circle passing through the trajectory point and the collision point.
Obstacle Detection
Obstacles are represented as points or linestrings (i.e., sequence of points) around the obstacles and are constructed from an occupancy grid, a pointcloud, or the lanelet map.
The lanelet map is always checked for obstacles but the other source is switched using parameter obstacles.dynamic_source
.
To efficiently find obstacles intersecting with a footprint, they are stored in a R-tree. Two trees are used, one for the obstacle points, and one for the obstacle linestrings (which are decomposed into segments to simplify the R-tree).
Obstacle masks
Dynamic obstacles
Moving obstacles such as other cars should not be considered by this module. These obstacles are detected by the perception modules and represented as polygons. Obstacles inside these polygons are ignored.
Only dynamic obstacles with a velocity above parameter obstacles.dynamic_obstacles_min_vel
are removed.
To deal with delays and precision errors, the polygons can be enlarged with parameter obstacles.dynamic_obstacles_buffer
.
Obstacles outside of the safety envelope
Obstacles that are not inside any forward simulated footprint are ignored if parameter obstacles.filter_envelope
is set to true.
The safety envelope polygon is built from all the footprints and used as a positive mask on the occupancy grid or pointcloud.
This option can reduce the total number of obstacles which reduces the cost of collision detection. However, the cost of masking the envelope is usually too high to be interesting.
Obstacles on the ego path
If parameter obstacles.ignore_obstacles_on_path
is set to true
, a polygon mask is built from the trajectory and the vehicle dimension. Any obstacle in this polygon is ignored.
File truncated at 100 lines see the full file
Changelog for package autoware_motion_velocity_obstacle_velocity_limiter_module
0.47.0 (2025-08-11)
- style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
- Contributors: Mete Fatih Cırıt
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat(autoware_motion_velocity_planner): only wait for required subscriptions (#10732)
- Contributors: Ryohsuke Mitsudome, TaikiYamada4
0.45.0 (2025-05-22)
0.44.2 (2025-06-10)
0.44.1 (2025-05-01)
0.44.0 (2025-04-18)
- Merge remote-tracking branch 'origin/main' into humble
- chore(motion_velocity_planner): move common and node packages to core (#10367)
- Contributors: Maxime CLEMENT, Ryohsuke Mitsudome
0.43.0 (2025-03-21)
- Merge remote-tracking branch 'origin/main' into chore/bump-version-0.43
- chore: rename from [autoware.universe]{.title-ref} to [autoware_universe]{.title-ref} (#10306)
- Contributors: Hayato Mizushima, Yutaka Kondo
0.42.0 (2025-03-03)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_utils): replace autoware_universe_utils with autoware_utils (#10191)
-
feat(motion_velocity_planner): common implementation for motion_velocity_obstacle_<stop/slow_down/cruise>_module (#10035)
- feat(motion_velocity_planner): prepare for motion_velocity_<stop/slow_down/cruise>_module
* update launch ---------
-
Contributors: Fumiya Watanabe, Takayuki Murooka, 心刚
0.41.2 (2025-02-19)
- chore: bump version to 0.41.1 (#10088)
- Contributors: Ryohsuke Mitsudome
0.41.1 (2025-02-10)
0.41.0 (2025-01-29)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(motion_velocity_planner)!: add _universe suffix to autoware_motion_velocity_planner_common and autoware_motion_velocity_planner_node (#9942)
-
feat(planning_factor)!: remove velocity_factor, steering_factor and introduce planning_factor (#9927) Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>> Co-authored-by: Ryohsuke Mitsudome <<43976834+mitsudome-r@users.noreply.github.com>> Co-authored-by: satoshi-ota <<satoshi.ota928@gmail.com>>
-
fix(autoware_motion_velocity_obstacle_velocity_limiter_module): remove cppcheck suppressions (#9843)
-
feat(motion_velocity_planner): introduce Object/Pointcloud structure in PlannerData (#9812)
- feat: new object/pointcloud struct in motion velocity planner
- update planner_data
- modify modules
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_motion_velocity_obstacle_velocity_limiter_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Maxime CLEMENT
- Alqudah Mohammad
Authors
Obstacle Velocity Limiter
Purpose
This node limits the velocity when driving in the direction of an obstacle. For example, it allows to reduce the velocity when driving close to a guard rail in a curve.
Without this node | With this node |
---|---|
![]() |
![]() |
Inner-workings / Algorithms
Using a parameter min_ttc
(minimum time to collision), the node set velocity limits such that
no collision with an obstacle would occur, even without new control inputs for a duration of min_ttc
.
To achieve this, the motion of the ego vehicle is simulated forward in time at each point of the trajectory to create a corresponding footprint. If the footprint collides with some obstacle, the velocity at the trajectory point is reduced such that the new simulated footprint do not have any collision.
Simulated Motion, Footprint, and Collision Distance
The motion of the ego vehicle is simulated at each trajectory point using the heading
, velocity
, and steering
defined at the point.
Footprints are then constructed from these simulations and checked for collision.
If a collision is found, the distance from the trajectory point is used to calculate the adjusted velocity that would produce a collision-free footprint. Parameter simulation.distance_method
allow to switch between an exact distance calculation and a less expensive approximation using a simple euclidean distance.
Two models can be selected with parameter simulation.model
for simulating the motion of the vehicle: a simple particle model and a more complicated bicycle model.
Particle Model
The particle model uses the constant heading and velocity of the vehicle at a trajectory point to simulate the future motion. The simulated forward motion corresponds to a straight line and the footprint to a rectangle.
Footprint
The rectangle footprint is built from 2 lines parallel to the simulated forward motion and at a distance of half the vehicle width.
Distance
When a collision point is found within the footprint, the distance is calculated as described in the following figure.
Bicycle Model
The bicycle model uses the constant heading, velocity, and steering of the vehicle at a trajectory point to simulate the future motion.
The simulated forward motion corresponds to an arc around the circle of curvature associated with the steering.
Uncertainty in the steering can be introduced with the simulation.steering_offset
parameter which will generate a range of motion from a left-most to a right-most steering.
This results in 3 curved lines starting from the same trajectory point.
A parameter simulation.nb_points
is used to adjust the precision of these lines, with a minimum of 2
resulting in straight lines and higher values increasing the precision of the curves.
By default, the steering values contained in the trajectory message are used.
Parameter trajectory_preprocessing.calculate_steering_angles
allows to recalculate these values when set to true
.
Footprint
The footprint of the bicycle model is created from lines parallel to the left and right simulated motion at a distance of half the vehicle width. In addition, the two points on the left and right of the end point of the central simulated motion are used to complete the polygon.
Distance
The distance to a collision point is calculated by finding the curvature circle passing through the trajectory point and the collision point.
Obstacle Detection
Obstacles are represented as points or linestrings (i.e., sequence of points) around the obstacles and are constructed from an occupancy grid, a pointcloud, or the lanelet map.
The lanelet map is always checked for obstacles but the other source is switched using parameter obstacles.dynamic_source
.
To efficiently find obstacles intersecting with a footprint, they are stored in a R-tree. Two trees are used, one for the obstacle points, and one for the obstacle linestrings (which are decomposed into segments to simplify the R-tree).
Obstacle masks
Dynamic obstacles
Moving obstacles such as other cars should not be considered by this module. These obstacles are detected by the perception modules and represented as polygons. Obstacles inside these polygons are ignored.
Only dynamic obstacles with a velocity above parameter obstacles.dynamic_obstacles_min_vel
are removed.
To deal with delays and precision errors, the polygons can be enlarged with parameter obstacles.dynamic_obstacles_buffer
.
Obstacles outside of the safety envelope
Obstacles that are not inside any forward simulated footprint are ignored if parameter obstacles.filter_envelope
is set to true.
The safety envelope polygon is built from all the footprints and used as a positive mask on the occupancy grid or pointcloud.
This option can reduce the total number of obstacles which reduces the cost of collision detection. However, the cost of masking the envelope is usually too high to be interesting.
Obstacles on the ego path
If parameter obstacles.ignore_obstacles_on_path
is set to true
, a polygon mask is built from the trajectory and the vehicle dimension. Any obstacle in this polygon is ignored.
File truncated at 100 lines see the full file
Changelog for package autoware_motion_velocity_obstacle_velocity_limiter_module
0.47.0 (2025-08-11)
- style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
- Contributors: Mete Fatih Cırıt
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat(autoware_motion_velocity_planner): only wait for required subscriptions (#10732)
- Contributors: Ryohsuke Mitsudome, TaikiYamada4
0.45.0 (2025-05-22)
0.44.2 (2025-06-10)
0.44.1 (2025-05-01)
0.44.0 (2025-04-18)
- Merge remote-tracking branch 'origin/main' into humble
- chore(motion_velocity_planner): move common and node packages to core (#10367)
- Contributors: Maxime CLEMENT, Ryohsuke Mitsudome
0.43.0 (2025-03-21)
- Merge remote-tracking branch 'origin/main' into chore/bump-version-0.43
- chore: rename from [autoware.universe]{.title-ref} to [autoware_universe]{.title-ref} (#10306)
- Contributors: Hayato Mizushima, Yutaka Kondo
0.42.0 (2025-03-03)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_utils): replace autoware_universe_utils with autoware_utils (#10191)
-
feat(motion_velocity_planner): common implementation for motion_velocity_obstacle_<stop/slow_down/cruise>_module (#10035)
- feat(motion_velocity_planner): prepare for motion_velocity_<stop/slow_down/cruise>_module
* update launch ---------
-
Contributors: Fumiya Watanabe, Takayuki Murooka, 心刚
0.41.2 (2025-02-19)
- chore: bump version to 0.41.1 (#10088)
- Contributors: Ryohsuke Mitsudome
0.41.1 (2025-02-10)
0.41.0 (2025-01-29)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(motion_velocity_planner)!: add _universe suffix to autoware_motion_velocity_planner_common and autoware_motion_velocity_planner_node (#9942)
-
feat(planning_factor)!: remove velocity_factor, steering_factor and introduce planning_factor (#9927) Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>> Co-authored-by: Ryohsuke Mitsudome <<43976834+mitsudome-r@users.noreply.github.com>> Co-authored-by: satoshi-ota <<satoshi.ota928@gmail.com>>
-
fix(autoware_motion_velocity_obstacle_velocity_limiter_module): remove cppcheck suppressions (#9843)
-
feat(motion_velocity_planner): introduce Object/Pointcloud structure in PlannerData (#9812)
- feat: new object/pointcloud struct in motion velocity planner
- update planner_data
- modify modules
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_motion_velocity_obstacle_velocity_limiter_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Maxime CLEMENT
- Alqudah Mohammad
Authors
Obstacle Velocity Limiter
Purpose
This node limits the velocity when driving in the direction of an obstacle. For example, it allows to reduce the velocity when driving close to a guard rail in a curve.
Without this node | With this node |
---|---|
![]() |
![]() |
Inner-workings / Algorithms
Using a parameter min_ttc
(minimum time to collision), the node set velocity limits such that
no collision with an obstacle would occur, even without new control inputs for a duration of min_ttc
.
To achieve this, the motion of the ego vehicle is simulated forward in time at each point of the trajectory to create a corresponding footprint. If the footprint collides with some obstacle, the velocity at the trajectory point is reduced such that the new simulated footprint do not have any collision.
Simulated Motion, Footprint, and Collision Distance
The motion of the ego vehicle is simulated at each trajectory point using the heading
, velocity
, and steering
defined at the point.
Footprints are then constructed from these simulations and checked for collision.
If a collision is found, the distance from the trajectory point is used to calculate the adjusted velocity that would produce a collision-free footprint. Parameter simulation.distance_method
allow to switch between an exact distance calculation and a less expensive approximation using a simple euclidean distance.
Two models can be selected with parameter simulation.model
for simulating the motion of the vehicle: a simple particle model and a more complicated bicycle model.
Particle Model
The particle model uses the constant heading and velocity of the vehicle at a trajectory point to simulate the future motion. The simulated forward motion corresponds to a straight line and the footprint to a rectangle.
Footprint
The rectangle footprint is built from 2 lines parallel to the simulated forward motion and at a distance of half the vehicle width.
Distance
When a collision point is found within the footprint, the distance is calculated as described in the following figure.
Bicycle Model
The bicycle model uses the constant heading, velocity, and steering of the vehicle at a trajectory point to simulate the future motion.
The simulated forward motion corresponds to an arc around the circle of curvature associated with the steering.
Uncertainty in the steering can be introduced with the simulation.steering_offset
parameter which will generate a range of motion from a left-most to a right-most steering.
This results in 3 curved lines starting from the same trajectory point.
A parameter simulation.nb_points
is used to adjust the precision of these lines, with a minimum of 2
resulting in straight lines and higher values increasing the precision of the curves.
By default, the steering values contained in the trajectory message are used.
Parameter trajectory_preprocessing.calculate_steering_angles
allows to recalculate these values when set to true
.
Footprint
The footprint of the bicycle model is created from lines parallel to the left and right simulated motion at a distance of half the vehicle width. In addition, the two points on the left and right of the end point of the central simulated motion are used to complete the polygon.
Distance
The distance to a collision point is calculated by finding the curvature circle passing through the trajectory point and the collision point.
Obstacle Detection
Obstacles are represented as points or linestrings (i.e., sequence of points) around the obstacles and are constructed from an occupancy grid, a pointcloud, or the lanelet map.
The lanelet map is always checked for obstacles but the other source is switched using parameter obstacles.dynamic_source
.
To efficiently find obstacles intersecting with a footprint, they are stored in a R-tree. Two trees are used, one for the obstacle points, and one for the obstacle linestrings (which are decomposed into segments to simplify the R-tree).
Obstacle masks
Dynamic obstacles
Moving obstacles such as other cars should not be considered by this module. These obstacles are detected by the perception modules and represented as polygons. Obstacles inside these polygons are ignored.
Only dynamic obstacles with a velocity above parameter obstacles.dynamic_obstacles_min_vel
are removed.
To deal with delays and precision errors, the polygons can be enlarged with parameter obstacles.dynamic_obstacles_buffer
.
Obstacles outside of the safety envelope
Obstacles that are not inside any forward simulated footprint are ignored if parameter obstacles.filter_envelope
is set to true.
The safety envelope polygon is built from all the footprints and used as a positive mask on the occupancy grid or pointcloud.
This option can reduce the total number of obstacles which reduces the cost of collision detection. However, the cost of masking the envelope is usually too high to be interesting.
Obstacles on the ego path
If parameter obstacles.ignore_obstacles_on_path
is set to true
, a polygon mask is built from the trajectory and the vehicle dimension. Any obstacle in this polygon is ignored.
File truncated at 100 lines see the full file
Changelog for package autoware_motion_velocity_obstacle_velocity_limiter_module
0.47.0 (2025-08-11)
- style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
- Contributors: Mete Fatih Cırıt
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat(autoware_motion_velocity_planner): only wait for required subscriptions (#10732)
- Contributors: Ryohsuke Mitsudome, TaikiYamada4
0.45.0 (2025-05-22)
0.44.2 (2025-06-10)
0.44.1 (2025-05-01)
0.44.0 (2025-04-18)
- Merge remote-tracking branch 'origin/main' into humble
- chore(motion_velocity_planner): move common and node packages to core (#10367)
- Contributors: Maxime CLEMENT, Ryohsuke Mitsudome
0.43.0 (2025-03-21)
- Merge remote-tracking branch 'origin/main' into chore/bump-version-0.43
- chore: rename from [autoware.universe]{.title-ref} to [autoware_universe]{.title-ref} (#10306)
- Contributors: Hayato Mizushima, Yutaka Kondo
0.42.0 (2025-03-03)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_utils): replace autoware_universe_utils with autoware_utils (#10191)
-
feat(motion_velocity_planner): common implementation for motion_velocity_obstacle_<stop/slow_down/cruise>_module (#10035)
- feat(motion_velocity_planner): prepare for motion_velocity_<stop/slow_down/cruise>_module
* update launch ---------
-
Contributors: Fumiya Watanabe, Takayuki Murooka, 心刚
0.41.2 (2025-02-19)
- chore: bump version to 0.41.1 (#10088)
- Contributors: Ryohsuke Mitsudome
0.41.1 (2025-02-10)
0.41.0 (2025-01-29)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(motion_velocity_planner)!: add _universe suffix to autoware_motion_velocity_planner_common and autoware_motion_velocity_planner_node (#9942)
-
feat(planning_factor)!: remove velocity_factor, steering_factor and introduce planning_factor (#9927) Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>> Co-authored-by: Ryohsuke Mitsudome <<43976834+mitsudome-r@users.noreply.github.com>> Co-authored-by: satoshi-ota <<satoshi.ota928@gmail.com>>
-
fix(autoware_motion_velocity_obstacle_velocity_limiter_module): remove cppcheck suppressions (#9843)
-
feat(motion_velocity_planner): introduce Object/Pointcloud structure in PlannerData (#9812)
- feat: new object/pointcloud struct in motion velocity planner
- update planner_data
- modify modules
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_motion_velocity_obstacle_velocity_limiter_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Maxime CLEMENT
- Alqudah Mohammad
Authors
Obstacle Velocity Limiter
Purpose
This node limits the velocity when driving in the direction of an obstacle. For example, it allows to reduce the velocity when driving close to a guard rail in a curve.
Without this node | With this node |
---|---|
![]() |
![]() |
Inner-workings / Algorithms
Using a parameter min_ttc
(minimum time to collision), the node set velocity limits such that
no collision with an obstacle would occur, even without new control inputs for a duration of min_ttc
.
To achieve this, the motion of the ego vehicle is simulated forward in time at each point of the trajectory to create a corresponding footprint. If the footprint collides with some obstacle, the velocity at the trajectory point is reduced such that the new simulated footprint do not have any collision.
Simulated Motion, Footprint, and Collision Distance
The motion of the ego vehicle is simulated at each trajectory point using the heading
, velocity
, and steering
defined at the point.
Footprints are then constructed from these simulations and checked for collision.
If a collision is found, the distance from the trajectory point is used to calculate the adjusted velocity that would produce a collision-free footprint. Parameter simulation.distance_method
allow to switch between an exact distance calculation and a less expensive approximation using a simple euclidean distance.
Two models can be selected with parameter simulation.model
for simulating the motion of the vehicle: a simple particle model and a more complicated bicycle model.
Particle Model
The particle model uses the constant heading and velocity of the vehicle at a trajectory point to simulate the future motion. The simulated forward motion corresponds to a straight line and the footprint to a rectangle.
Footprint
The rectangle footprint is built from 2 lines parallel to the simulated forward motion and at a distance of half the vehicle width.
Distance
When a collision point is found within the footprint, the distance is calculated as described in the following figure.
Bicycle Model
The bicycle model uses the constant heading, velocity, and steering of the vehicle at a trajectory point to simulate the future motion.
The simulated forward motion corresponds to an arc around the circle of curvature associated with the steering.
Uncertainty in the steering can be introduced with the simulation.steering_offset
parameter which will generate a range of motion from a left-most to a right-most steering.
This results in 3 curved lines starting from the same trajectory point.
A parameter simulation.nb_points
is used to adjust the precision of these lines, with a minimum of 2
resulting in straight lines and higher values increasing the precision of the curves.
By default, the steering values contained in the trajectory message are used.
Parameter trajectory_preprocessing.calculate_steering_angles
allows to recalculate these values when set to true
.
Footprint
The footprint of the bicycle model is created from lines parallel to the left and right simulated motion at a distance of half the vehicle width. In addition, the two points on the left and right of the end point of the central simulated motion are used to complete the polygon.
Distance
The distance to a collision point is calculated by finding the curvature circle passing through the trajectory point and the collision point.
Obstacle Detection
Obstacles are represented as points or linestrings (i.e., sequence of points) around the obstacles and are constructed from an occupancy grid, a pointcloud, or the lanelet map.
The lanelet map is always checked for obstacles but the other source is switched using parameter obstacles.dynamic_source
.
To efficiently find obstacles intersecting with a footprint, they are stored in a R-tree. Two trees are used, one for the obstacle points, and one for the obstacle linestrings (which are decomposed into segments to simplify the R-tree).
Obstacle masks
Dynamic obstacles
Moving obstacles such as other cars should not be considered by this module. These obstacles are detected by the perception modules and represented as polygons. Obstacles inside these polygons are ignored.
Only dynamic obstacles with a velocity above parameter obstacles.dynamic_obstacles_min_vel
are removed.
To deal with delays and precision errors, the polygons can be enlarged with parameter obstacles.dynamic_obstacles_buffer
.
Obstacles outside of the safety envelope
Obstacles that are not inside any forward simulated footprint are ignored if parameter obstacles.filter_envelope
is set to true.
The safety envelope polygon is built from all the footprints and used as a positive mask on the occupancy grid or pointcloud.
This option can reduce the total number of obstacles which reduces the cost of collision detection. However, the cost of masking the envelope is usually too high to be interesting.
Obstacles on the ego path
If parameter obstacles.ignore_obstacles_on_path
is set to true
, a polygon mask is built from the trajectory and the vehicle dimension. Any obstacle in this polygon is ignored.
File truncated at 100 lines see the full file
Changelog for package autoware_motion_velocity_obstacle_velocity_limiter_module
0.47.0 (2025-08-11)
- style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
- Contributors: Mete Fatih Cırıt
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat(autoware_motion_velocity_planner): only wait for required subscriptions (#10732)
- Contributors: Ryohsuke Mitsudome, TaikiYamada4
0.45.0 (2025-05-22)
0.44.2 (2025-06-10)
0.44.1 (2025-05-01)
0.44.0 (2025-04-18)
- Merge remote-tracking branch 'origin/main' into humble
- chore(motion_velocity_planner): move common and node packages to core (#10367)
- Contributors: Maxime CLEMENT, Ryohsuke Mitsudome
0.43.0 (2025-03-21)
- Merge remote-tracking branch 'origin/main' into chore/bump-version-0.43
- chore: rename from [autoware.universe]{.title-ref} to [autoware_universe]{.title-ref} (#10306)
- Contributors: Hayato Mizushima, Yutaka Kondo
0.42.0 (2025-03-03)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_utils): replace autoware_universe_utils with autoware_utils (#10191)
-
feat(motion_velocity_planner): common implementation for motion_velocity_obstacle_<stop/slow_down/cruise>_module (#10035)
- feat(motion_velocity_planner): prepare for motion_velocity_<stop/slow_down/cruise>_module
* update launch ---------
-
Contributors: Fumiya Watanabe, Takayuki Murooka, 心刚
0.41.2 (2025-02-19)
- chore: bump version to 0.41.1 (#10088)
- Contributors: Ryohsuke Mitsudome
0.41.1 (2025-02-10)
0.41.0 (2025-01-29)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(motion_velocity_planner)!: add _universe suffix to autoware_motion_velocity_planner_common and autoware_motion_velocity_planner_node (#9942)
-
feat(planning_factor)!: remove velocity_factor, steering_factor and introduce planning_factor (#9927) Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>> Co-authored-by: Ryohsuke Mitsudome <<43976834+mitsudome-r@users.noreply.github.com>> Co-authored-by: satoshi-ota <<satoshi.ota928@gmail.com>>
-
fix(autoware_motion_velocity_obstacle_velocity_limiter_module): remove cppcheck suppressions (#9843)
-
feat(motion_velocity_planner): introduce Object/Pointcloud structure in PlannerData (#9812)
- feat: new object/pointcloud struct in motion velocity planner
- update planner_data
- modify modules
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
libboost-dev |