Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache 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
- Takamasa Horibe
- Takayuki Murooka
- Kyoichi Sugahara
- Alqudah Mohammad
Authors
- Takamasa Horibe
- Maxime CLEMENT
- Takayuki Murooka
MPC Lateral Controller
This is the design document for the lateral controller node
in the autoware_trajectory_follower_node
package.
Purpose / Use cases
This node is used to general lateral control commands (steering angle and steering rate) when following a path.
Design
The node uses an implementation of linear model predictive control (MPC) for accurate path tracking. The MPC uses a model of the vehicle to simulate the trajectory resulting from the control command. The optimization of the control command is formulated as a Quadratic Program (QP).
Different vehicle models are implemented:
- kinematics : bicycle kinematics model with steering 1st-order delay.
- kinematics_no_delay : bicycle kinematics model without steering delay.
- dynamics : bicycle dynamics model considering slip angle. The kinematics model is being used by default. Please see the reference [1] for more details.
For the optimization, a Quadratic Programming (QP) solver is used and two options are currently implemented:
- unconstraint_fast : use least square method to solve unconstraint QP with eigen.
- osqp: run the following ADMM algorithm (for more details see the related papers at the Citing OSQP section):
Filtering
Filtering is required for good noise reduction. A Butterworth filter is employed for processing the yaw and lateral errors, which are used as inputs for the MPC, as well as for refining the output steering angle. Other filtering methods can be considered as long as the noise reduction performances are good enough. The moving average filter for example is not suited and can yield worse results than without any filtering.
Assumptions / Known limits
The tracking is not accurate if the first point of the reference trajectory is at or in front of the current ego pose.
Inputs / Outputs / API
Inputs
Set the following from the controller_node
-
autoware_planning_msgs/Trajectory
: reference trajectory to follow. -
nav_msgs/Odometry
: current odometry -
autoware_vehicle_msgs/SteeringReport
: current steering
Outputs
Return LateralOutput which contains the following to the controller node
autoware_control_msgs/Lateral
- LateralSyncData
- steer angle convergence
Publish the following messages.
Name | Type | Description |
---|---|---|
~/output/predicted_trajectory |
autoware_planning_msgs::Trajectory | Predicted trajectory calculated by MPC. The trajectory size will be empty when the controller is in an emergency such as too large deviation from the planning trajectory. |
MPC class
The MPC
class (defined in mpc.hpp
) provides the interface with the MPC algorithm.
Once a vehicle model, a QP solver, and the reference trajectory to follow have been set
(using setVehicleModel()
, setQPSolver()
, setReferenceTrajectory()
), a lateral control command
can be calculated by providing the current steer, velocity, and pose to function calculateMPC()
.
Parameter description
The default parameters defined in param/lateral_controller_defaults.param.yaml
are adjusted to the
AutonomouStuff Lexus RX 450h for under 40 km/h driving.
System
{{ json_to_markdown(“control/autoware_mpc_lateral_controller/schema/sub/system.json”) }}
Path Smoothing
File truncated at 100 lines see the full file
Changelog for package autoware_mpc_lateral_controller
0.47.0 (2025-08-11)
- fix(mpc): update time from start in the predicted trajectory (#10753)
- Contributors: Zulfaqar Azmi
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat: change info messages to debug, and debug_throttle method (#10757) change info messages to debug, and debug_throttle method
- feat: mpc info throttle msgs (#10687) add info msgs
- Contributors: TaikiYamada4, danielsanchezaran
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
- fix(control): apply THROTTLE to frequent log
(#10418)
- fix(control): apply THROTTLE to frequent log
- fix
- fix
- fix
* fix
- refactor(mpc_lateral_controller): rework parameter (#8935)
- Contributors: Prakash Kannaiah, Ryohsuke Mitsudome, Takayuki Murooka
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)
-
feat(path_optimizer): additional failure logging and failure mode handling (#10276) MRM when MPT fails
-
fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation (#10235)
- fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation
* docs(autoware_mpc_lateral_controller): update comments for state representation and discretization considerations ---------
-
chore(mpc_lateral_controller): add package maintainer (#10239) add package maintainer
-
Contributors: Arjun Jagdish Ram, Hayato Mizushima, Kyoichi Sugahara, Yutaka Kondo, mkquda
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)
- Contributors: Fumiya Watanabe, 心刚
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: tier4_debug_msgs changed to autoware_internal_debug_msgs in fil… (#9846)
- feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files ontrol/autoware_mpc_lateral_controller
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
Dependant Packages
Name | Deps |
---|---|
autoware_trajectory_follower_node |
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_mpc_lateral_controller at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache 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
- Takamasa Horibe
- Takayuki Murooka
- Kyoichi Sugahara
- Alqudah Mohammad
Authors
- Takamasa Horibe
- Maxime CLEMENT
- Takayuki Murooka
MPC Lateral Controller
This is the design document for the lateral controller node
in the autoware_trajectory_follower_node
package.
Purpose / Use cases
This node is used to general lateral control commands (steering angle and steering rate) when following a path.
Design
The node uses an implementation of linear model predictive control (MPC) for accurate path tracking. The MPC uses a model of the vehicle to simulate the trajectory resulting from the control command. The optimization of the control command is formulated as a Quadratic Program (QP).
Different vehicle models are implemented:
- kinematics : bicycle kinematics model with steering 1st-order delay.
- kinematics_no_delay : bicycle kinematics model without steering delay.
- dynamics : bicycle dynamics model considering slip angle. The kinematics model is being used by default. Please see the reference [1] for more details.
For the optimization, a Quadratic Programming (QP) solver is used and two options are currently implemented:
- unconstraint_fast : use least square method to solve unconstraint QP with eigen.
- osqp: run the following ADMM algorithm (for more details see the related papers at the Citing OSQP section):
Filtering
Filtering is required for good noise reduction. A Butterworth filter is employed for processing the yaw and lateral errors, which are used as inputs for the MPC, as well as for refining the output steering angle. Other filtering methods can be considered as long as the noise reduction performances are good enough. The moving average filter for example is not suited and can yield worse results than without any filtering.
Assumptions / Known limits
The tracking is not accurate if the first point of the reference trajectory is at or in front of the current ego pose.
Inputs / Outputs / API
Inputs
Set the following from the controller_node
-
autoware_planning_msgs/Trajectory
: reference trajectory to follow. -
nav_msgs/Odometry
: current odometry -
autoware_vehicle_msgs/SteeringReport
: current steering
Outputs
Return LateralOutput which contains the following to the controller node
autoware_control_msgs/Lateral
- LateralSyncData
- steer angle convergence
Publish the following messages.
Name | Type | Description |
---|---|---|
~/output/predicted_trajectory |
autoware_planning_msgs::Trajectory | Predicted trajectory calculated by MPC. The trajectory size will be empty when the controller is in an emergency such as too large deviation from the planning trajectory. |
MPC class
The MPC
class (defined in mpc.hpp
) provides the interface with the MPC algorithm.
Once a vehicle model, a QP solver, and the reference trajectory to follow have been set
(using setVehicleModel()
, setQPSolver()
, setReferenceTrajectory()
), a lateral control command
can be calculated by providing the current steer, velocity, and pose to function calculateMPC()
.
Parameter description
The default parameters defined in param/lateral_controller_defaults.param.yaml
are adjusted to the
AutonomouStuff Lexus RX 450h for under 40 km/h driving.
System
{{ json_to_markdown(“control/autoware_mpc_lateral_controller/schema/sub/system.json”) }}
Path Smoothing
File truncated at 100 lines see the full file
Changelog for package autoware_mpc_lateral_controller
0.47.0 (2025-08-11)
- fix(mpc): update time from start in the predicted trajectory (#10753)
- Contributors: Zulfaqar Azmi
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat: change info messages to debug, and debug_throttle method (#10757) change info messages to debug, and debug_throttle method
- feat: mpc info throttle msgs (#10687) add info msgs
- Contributors: TaikiYamada4, danielsanchezaran
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
- fix(control): apply THROTTLE to frequent log
(#10418)
- fix(control): apply THROTTLE to frequent log
- fix
- fix
- fix
* fix
- refactor(mpc_lateral_controller): rework parameter (#8935)
- Contributors: Prakash Kannaiah, Ryohsuke Mitsudome, Takayuki Murooka
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)
-
feat(path_optimizer): additional failure logging and failure mode handling (#10276) MRM when MPT fails
-
fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation (#10235)
- fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation
* docs(autoware_mpc_lateral_controller): update comments for state representation and discretization considerations ---------
-
chore(mpc_lateral_controller): add package maintainer (#10239) add package maintainer
-
Contributors: Arjun Jagdish Ram, Hayato Mizushima, Kyoichi Sugahara, Yutaka Kondo, mkquda
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)
- Contributors: Fumiya Watanabe, 心刚
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: tier4_debug_msgs changed to autoware_internal_debug_msgs in fil… (#9846)
- feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files ontrol/autoware_mpc_lateral_controller
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
Dependant Packages
Name | Deps |
---|---|
autoware_trajectory_follower_node |
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_mpc_lateral_controller at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache 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
- Takamasa Horibe
- Takayuki Murooka
- Kyoichi Sugahara
- Alqudah Mohammad
Authors
- Takamasa Horibe
- Maxime CLEMENT
- Takayuki Murooka
MPC Lateral Controller
This is the design document for the lateral controller node
in the autoware_trajectory_follower_node
package.
Purpose / Use cases
This node is used to general lateral control commands (steering angle and steering rate) when following a path.
Design
The node uses an implementation of linear model predictive control (MPC) for accurate path tracking. The MPC uses a model of the vehicle to simulate the trajectory resulting from the control command. The optimization of the control command is formulated as a Quadratic Program (QP).
Different vehicle models are implemented:
- kinematics : bicycle kinematics model with steering 1st-order delay.
- kinematics_no_delay : bicycle kinematics model without steering delay.
- dynamics : bicycle dynamics model considering slip angle. The kinematics model is being used by default. Please see the reference [1] for more details.
For the optimization, a Quadratic Programming (QP) solver is used and two options are currently implemented:
- unconstraint_fast : use least square method to solve unconstraint QP with eigen.
- osqp: run the following ADMM algorithm (for more details see the related papers at the Citing OSQP section):
Filtering
Filtering is required for good noise reduction. A Butterworth filter is employed for processing the yaw and lateral errors, which are used as inputs for the MPC, as well as for refining the output steering angle. Other filtering methods can be considered as long as the noise reduction performances are good enough. The moving average filter for example is not suited and can yield worse results than without any filtering.
Assumptions / Known limits
The tracking is not accurate if the first point of the reference trajectory is at or in front of the current ego pose.
Inputs / Outputs / API
Inputs
Set the following from the controller_node
-
autoware_planning_msgs/Trajectory
: reference trajectory to follow. -
nav_msgs/Odometry
: current odometry -
autoware_vehicle_msgs/SteeringReport
: current steering
Outputs
Return LateralOutput which contains the following to the controller node
autoware_control_msgs/Lateral
- LateralSyncData
- steer angle convergence
Publish the following messages.
Name | Type | Description |
---|---|---|
~/output/predicted_trajectory |
autoware_planning_msgs::Trajectory | Predicted trajectory calculated by MPC. The trajectory size will be empty when the controller is in an emergency such as too large deviation from the planning trajectory. |
MPC class
The MPC
class (defined in mpc.hpp
) provides the interface with the MPC algorithm.
Once a vehicle model, a QP solver, and the reference trajectory to follow have been set
(using setVehicleModel()
, setQPSolver()
, setReferenceTrajectory()
), a lateral control command
can be calculated by providing the current steer, velocity, and pose to function calculateMPC()
.
Parameter description
The default parameters defined in param/lateral_controller_defaults.param.yaml
are adjusted to the
AutonomouStuff Lexus RX 450h for under 40 km/h driving.
System
{{ json_to_markdown(“control/autoware_mpc_lateral_controller/schema/sub/system.json”) }}
Path Smoothing
File truncated at 100 lines see the full file
Changelog for package autoware_mpc_lateral_controller
0.47.0 (2025-08-11)
- fix(mpc): update time from start in the predicted trajectory (#10753)
- Contributors: Zulfaqar Azmi
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat: change info messages to debug, and debug_throttle method (#10757) change info messages to debug, and debug_throttle method
- feat: mpc info throttle msgs (#10687) add info msgs
- Contributors: TaikiYamada4, danielsanchezaran
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
- fix(control): apply THROTTLE to frequent log
(#10418)
- fix(control): apply THROTTLE to frequent log
- fix
- fix
- fix
* fix
- refactor(mpc_lateral_controller): rework parameter (#8935)
- Contributors: Prakash Kannaiah, Ryohsuke Mitsudome, Takayuki Murooka
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)
-
feat(path_optimizer): additional failure logging and failure mode handling (#10276) MRM when MPT fails
-
fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation (#10235)
- fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation
* docs(autoware_mpc_lateral_controller): update comments for state representation and discretization considerations ---------
-
chore(mpc_lateral_controller): add package maintainer (#10239) add package maintainer
-
Contributors: Arjun Jagdish Ram, Hayato Mizushima, Kyoichi Sugahara, Yutaka Kondo, mkquda
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)
- Contributors: Fumiya Watanabe, 心刚
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: tier4_debug_msgs changed to autoware_internal_debug_msgs in fil… (#9846)
- feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files ontrol/autoware_mpc_lateral_controller
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
Dependant Packages
Name | Deps |
---|---|
autoware_trajectory_follower_node |
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_mpc_lateral_controller at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache 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
- Takamasa Horibe
- Takayuki Murooka
- Kyoichi Sugahara
- Alqudah Mohammad
Authors
- Takamasa Horibe
- Maxime CLEMENT
- Takayuki Murooka
MPC Lateral Controller
This is the design document for the lateral controller node
in the autoware_trajectory_follower_node
package.
Purpose / Use cases
This node is used to general lateral control commands (steering angle and steering rate) when following a path.
Design
The node uses an implementation of linear model predictive control (MPC) for accurate path tracking. The MPC uses a model of the vehicle to simulate the trajectory resulting from the control command. The optimization of the control command is formulated as a Quadratic Program (QP).
Different vehicle models are implemented:
- kinematics : bicycle kinematics model with steering 1st-order delay.
- kinematics_no_delay : bicycle kinematics model without steering delay.
- dynamics : bicycle dynamics model considering slip angle. The kinematics model is being used by default. Please see the reference [1] for more details.
For the optimization, a Quadratic Programming (QP) solver is used and two options are currently implemented:
- unconstraint_fast : use least square method to solve unconstraint QP with eigen.
- osqp: run the following ADMM algorithm (for more details see the related papers at the Citing OSQP section):
Filtering
Filtering is required for good noise reduction. A Butterworth filter is employed for processing the yaw and lateral errors, which are used as inputs for the MPC, as well as for refining the output steering angle. Other filtering methods can be considered as long as the noise reduction performances are good enough. The moving average filter for example is not suited and can yield worse results than without any filtering.
Assumptions / Known limits
The tracking is not accurate if the first point of the reference trajectory is at or in front of the current ego pose.
Inputs / Outputs / API
Inputs
Set the following from the controller_node
-
autoware_planning_msgs/Trajectory
: reference trajectory to follow. -
nav_msgs/Odometry
: current odometry -
autoware_vehicle_msgs/SteeringReport
: current steering
Outputs
Return LateralOutput which contains the following to the controller node
autoware_control_msgs/Lateral
- LateralSyncData
- steer angle convergence
Publish the following messages.
Name | Type | Description |
---|---|---|
~/output/predicted_trajectory |
autoware_planning_msgs::Trajectory | Predicted trajectory calculated by MPC. The trajectory size will be empty when the controller is in an emergency such as too large deviation from the planning trajectory. |
MPC class
The MPC
class (defined in mpc.hpp
) provides the interface with the MPC algorithm.
Once a vehicle model, a QP solver, and the reference trajectory to follow have been set
(using setVehicleModel()
, setQPSolver()
, setReferenceTrajectory()
), a lateral control command
can be calculated by providing the current steer, velocity, and pose to function calculateMPC()
.
Parameter description
The default parameters defined in param/lateral_controller_defaults.param.yaml
are adjusted to the
AutonomouStuff Lexus RX 450h for under 40 km/h driving.
System
{{ json_to_markdown(“control/autoware_mpc_lateral_controller/schema/sub/system.json”) }}
Path Smoothing
File truncated at 100 lines see the full file
Changelog for package autoware_mpc_lateral_controller
0.47.0 (2025-08-11)
- fix(mpc): update time from start in the predicted trajectory (#10753)
- Contributors: Zulfaqar Azmi
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat: change info messages to debug, and debug_throttle method (#10757) change info messages to debug, and debug_throttle method
- feat: mpc info throttle msgs (#10687) add info msgs
- Contributors: TaikiYamada4, danielsanchezaran
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
- fix(control): apply THROTTLE to frequent log
(#10418)
- fix(control): apply THROTTLE to frequent log
- fix
- fix
- fix
* fix
- refactor(mpc_lateral_controller): rework parameter (#8935)
- Contributors: Prakash Kannaiah, Ryohsuke Mitsudome, Takayuki Murooka
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)
-
feat(path_optimizer): additional failure logging and failure mode handling (#10276) MRM when MPT fails
-
fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation (#10235)
- fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation
* docs(autoware_mpc_lateral_controller): update comments for state representation and discretization considerations ---------
-
chore(mpc_lateral_controller): add package maintainer (#10239) add package maintainer
-
Contributors: Arjun Jagdish Ram, Hayato Mizushima, Kyoichi Sugahara, Yutaka Kondo, mkquda
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)
- Contributors: Fumiya Watanabe, 心刚
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: tier4_debug_msgs changed to autoware_internal_debug_msgs in fil… (#9846)
- feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files ontrol/autoware_mpc_lateral_controller
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
Dependant Packages
Name | Deps |
---|---|
autoware_trajectory_follower_node |
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_mpc_lateral_controller at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache 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
- Takamasa Horibe
- Takayuki Murooka
- Kyoichi Sugahara
- Alqudah Mohammad
Authors
- Takamasa Horibe
- Maxime CLEMENT
- Takayuki Murooka
MPC Lateral Controller
This is the design document for the lateral controller node
in the autoware_trajectory_follower_node
package.
Purpose / Use cases
This node is used to general lateral control commands (steering angle and steering rate) when following a path.
Design
The node uses an implementation of linear model predictive control (MPC) for accurate path tracking. The MPC uses a model of the vehicle to simulate the trajectory resulting from the control command. The optimization of the control command is formulated as a Quadratic Program (QP).
Different vehicle models are implemented:
- kinematics : bicycle kinematics model with steering 1st-order delay.
- kinematics_no_delay : bicycle kinematics model without steering delay.
- dynamics : bicycle dynamics model considering slip angle. The kinematics model is being used by default. Please see the reference [1] for more details.
For the optimization, a Quadratic Programming (QP) solver is used and two options are currently implemented:
- unconstraint_fast : use least square method to solve unconstraint QP with eigen.
- osqp: run the following ADMM algorithm (for more details see the related papers at the Citing OSQP section):
Filtering
Filtering is required for good noise reduction. A Butterworth filter is employed for processing the yaw and lateral errors, which are used as inputs for the MPC, as well as for refining the output steering angle. Other filtering methods can be considered as long as the noise reduction performances are good enough. The moving average filter for example is not suited and can yield worse results than without any filtering.
Assumptions / Known limits
The tracking is not accurate if the first point of the reference trajectory is at or in front of the current ego pose.
Inputs / Outputs / API
Inputs
Set the following from the controller_node
-
autoware_planning_msgs/Trajectory
: reference trajectory to follow. -
nav_msgs/Odometry
: current odometry -
autoware_vehicle_msgs/SteeringReport
: current steering
Outputs
Return LateralOutput which contains the following to the controller node
autoware_control_msgs/Lateral
- LateralSyncData
- steer angle convergence
Publish the following messages.
Name | Type | Description |
---|---|---|
~/output/predicted_trajectory |
autoware_planning_msgs::Trajectory | Predicted trajectory calculated by MPC. The trajectory size will be empty when the controller is in an emergency such as too large deviation from the planning trajectory. |
MPC class
The MPC
class (defined in mpc.hpp
) provides the interface with the MPC algorithm.
Once a vehicle model, a QP solver, and the reference trajectory to follow have been set
(using setVehicleModel()
, setQPSolver()
, setReferenceTrajectory()
), a lateral control command
can be calculated by providing the current steer, velocity, and pose to function calculateMPC()
.
Parameter description
The default parameters defined in param/lateral_controller_defaults.param.yaml
are adjusted to the
AutonomouStuff Lexus RX 450h for under 40 km/h driving.
System
{{ json_to_markdown(“control/autoware_mpc_lateral_controller/schema/sub/system.json”) }}
Path Smoothing
File truncated at 100 lines see the full file
Changelog for package autoware_mpc_lateral_controller
0.47.0 (2025-08-11)
- fix(mpc): update time from start in the predicted trajectory (#10753)
- Contributors: Zulfaqar Azmi
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat: change info messages to debug, and debug_throttle method (#10757) change info messages to debug, and debug_throttle method
- feat: mpc info throttle msgs (#10687) add info msgs
- Contributors: TaikiYamada4, danielsanchezaran
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
- fix(control): apply THROTTLE to frequent log
(#10418)
- fix(control): apply THROTTLE to frequent log
- fix
- fix
- fix
* fix
- refactor(mpc_lateral_controller): rework parameter (#8935)
- Contributors: Prakash Kannaiah, Ryohsuke Mitsudome, Takayuki Murooka
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)
-
feat(path_optimizer): additional failure logging and failure mode handling (#10276) MRM when MPT fails
-
fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation (#10235)
- fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation
* docs(autoware_mpc_lateral_controller): update comments for state representation and discretization considerations ---------
-
chore(mpc_lateral_controller): add package maintainer (#10239) add package maintainer
-
Contributors: Arjun Jagdish Ram, Hayato Mizushima, Kyoichi Sugahara, Yutaka Kondo, mkquda
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)
- Contributors: Fumiya Watanabe, 心刚
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: tier4_debug_msgs changed to autoware_internal_debug_msgs in fil… (#9846)
- feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files ontrol/autoware_mpc_lateral_controller
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
Dependant Packages
Name | Deps |
---|---|
autoware_trajectory_follower_node |
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_mpc_lateral_controller at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache 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
- Takamasa Horibe
- Takayuki Murooka
- Kyoichi Sugahara
- Alqudah Mohammad
Authors
- Takamasa Horibe
- Maxime CLEMENT
- Takayuki Murooka
MPC Lateral Controller
This is the design document for the lateral controller node
in the autoware_trajectory_follower_node
package.
Purpose / Use cases
This node is used to general lateral control commands (steering angle and steering rate) when following a path.
Design
The node uses an implementation of linear model predictive control (MPC) for accurate path tracking. The MPC uses a model of the vehicle to simulate the trajectory resulting from the control command. The optimization of the control command is formulated as a Quadratic Program (QP).
Different vehicle models are implemented:
- kinematics : bicycle kinematics model with steering 1st-order delay.
- kinematics_no_delay : bicycle kinematics model without steering delay.
- dynamics : bicycle dynamics model considering slip angle. The kinematics model is being used by default. Please see the reference [1] for more details.
For the optimization, a Quadratic Programming (QP) solver is used and two options are currently implemented:
- unconstraint_fast : use least square method to solve unconstraint QP with eigen.
- osqp: run the following ADMM algorithm (for more details see the related papers at the Citing OSQP section):
Filtering
Filtering is required for good noise reduction. A Butterworth filter is employed for processing the yaw and lateral errors, which are used as inputs for the MPC, as well as for refining the output steering angle. Other filtering methods can be considered as long as the noise reduction performances are good enough. The moving average filter for example is not suited and can yield worse results than without any filtering.
Assumptions / Known limits
The tracking is not accurate if the first point of the reference trajectory is at or in front of the current ego pose.
Inputs / Outputs / API
Inputs
Set the following from the controller_node
-
autoware_planning_msgs/Trajectory
: reference trajectory to follow. -
nav_msgs/Odometry
: current odometry -
autoware_vehicle_msgs/SteeringReport
: current steering
Outputs
Return LateralOutput which contains the following to the controller node
autoware_control_msgs/Lateral
- LateralSyncData
- steer angle convergence
Publish the following messages.
Name | Type | Description |
---|---|---|
~/output/predicted_trajectory |
autoware_planning_msgs::Trajectory | Predicted trajectory calculated by MPC. The trajectory size will be empty when the controller is in an emergency such as too large deviation from the planning trajectory. |
MPC class
The MPC
class (defined in mpc.hpp
) provides the interface with the MPC algorithm.
Once a vehicle model, a QP solver, and the reference trajectory to follow have been set
(using setVehicleModel()
, setQPSolver()
, setReferenceTrajectory()
), a lateral control command
can be calculated by providing the current steer, velocity, and pose to function calculateMPC()
.
Parameter description
The default parameters defined in param/lateral_controller_defaults.param.yaml
are adjusted to the
AutonomouStuff Lexus RX 450h for under 40 km/h driving.
System
{{ json_to_markdown(“control/autoware_mpc_lateral_controller/schema/sub/system.json”) }}
Path Smoothing
File truncated at 100 lines see the full file
Changelog for package autoware_mpc_lateral_controller
0.47.0 (2025-08-11)
- fix(mpc): update time from start in the predicted trajectory (#10753)
- Contributors: Zulfaqar Azmi
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat: change info messages to debug, and debug_throttle method (#10757) change info messages to debug, and debug_throttle method
- feat: mpc info throttle msgs (#10687) add info msgs
- Contributors: TaikiYamada4, danielsanchezaran
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
- fix(control): apply THROTTLE to frequent log
(#10418)
- fix(control): apply THROTTLE to frequent log
- fix
- fix
- fix
* fix
- refactor(mpc_lateral_controller): rework parameter (#8935)
- Contributors: Prakash Kannaiah, Ryohsuke Mitsudome, Takayuki Murooka
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)
-
feat(path_optimizer): additional failure logging and failure mode handling (#10276) MRM when MPT fails
-
fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation (#10235)
- fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation
* docs(autoware_mpc_lateral_controller): update comments for state representation and discretization considerations ---------
-
chore(mpc_lateral_controller): add package maintainer (#10239) add package maintainer
-
Contributors: Arjun Jagdish Ram, Hayato Mizushima, Kyoichi Sugahara, Yutaka Kondo, mkquda
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)
- Contributors: Fumiya Watanabe, 心刚
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: tier4_debug_msgs changed to autoware_internal_debug_msgs in fil… (#9846)
- feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files ontrol/autoware_mpc_lateral_controller
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
Dependant Packages
Name | Deps |
---|---|
autoware_trajectory_follower_node |
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_mpc_lateral_controller at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache 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
- Takamasa Horibe
- Takayuki Murooka
- Kyoichi Sugahara
- Alqudah Mohammad
Authors
- Takamasa Horibe
- Maxime CLEMENT
- Takayuki Murooka
MPC Lateral Controller
This is the design document for the lateral controller node
in the autoware_trajectory_follower_node
package.
Purpose / Use cases
This node is used to general lateral control commands (steering angle and steering rate) when following a path.
Design
The node uses an implementation of linear model predictive control (MPC) for accurate path tracking. The MPC uses a model of the vehicle to simulate the trajectory resulting from the control command. The optimization of the control command is formulated as a Quadratic Program (QP).
Different vehicle models are implemented:
- kinematics : bicycle kinematics model with steering 1st-order delay.
- kinematics_no_delay : bicycle kinematics model without steering delay.
- dynamics : bicycle dynamics model considering slip angle. The kinematics model is being used by default. Please see the reference [1] for more details.
For the optimization, a Quadratic Programming (QP) solver is used and two options are currently implemented:
- unconstraint_fast : use least square method to solve unconstraint QP with eigen.
- osqp: run the following ADMM algorithm (for more details see the related papers at the Citing OSQP section):
Filtering
Filtering is required for good noise reduction. A Butterworth filter is employed for processing the yaw and lateral errors, which are used as inputs for the MPC, as well as for refining the output steering angle. Other filtering methods can be considered as long as the noise reduction performances are good enough. The moving average filter for example is not suited and can yield worse results than without any filtering.
Assumptions / Known limits
The tracking is not accurate if the first point of the reference trajectory is at or in front of the current ego pose.
Inputs / Outputs / API
Inputs
Set the following from the controller_node
-
autoware_planning_msgs/Trajectory
: reference trajectory to follow. -
nav_msgs/Odometry
: current odometry -
autoware_vehicle_msgs/SteeringReport
: current steering
Outputs
Return LateralOutput which contains the following to the controller node
autoware_control_msgs/Lateral
- LateralSyncData
- steer angle convergence
Publish the following messages.
Name | Type | Description |
---|---|---|
~/output/predicted_trajectory |
autoware_planning_msgs::Trajectory | Predicted trajectory calculated by MPC. The trajectory size will be empty when the controller is in an emergency such as too large deviation from the planning trajectory. |
MPC class
The MPC
class (defined in mpc.hpp
) provides the interface with the MPC algorithm.
Once a vehicle model, a QP solver, and the reference trajectory to follow have been set
(using setVehicleModel()
, setQPSolver()
, setReferenceTrajectory()
), a lateral control command
can be calculated by providing the current steer, velocity, and pose to function calculateMPC()
.
Parameter description
The default parameters defined in param/lateral_controller_defaults.param.yaml
are adjusted to the
AutonomouStuff Lexus RX 450h for under 40 km/h driving.
System
{{ json_to_markdown(“control/autoware_mpc_lateral_controller/schema/sub/system.json”) }}
Path Smoothing
File truncated at 100 lines see the full file
Changelog for package autoware_mpc_lateral_controller
0.47.0 (2025-08-11)
- fix(mpc): update time from start in the predicted trajectory (#10753)
- Contributors: Zulfaqar Azmi
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat: change info messages to debug, and debug_throttle method (#10757) change info messages to debug, and debug_throttle method
- feat: mpc info throttle msgs (#10687) add info msgs
- Contributors: TaikiYamada4, danielsanchezaran
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
- fix(control): apply THROTTLE to frequent log
(#10418)
- fix(control): apply THROTTLE to frequent log
- fix
- fix
- fix
* fix
- refactor(mpc_lateral_controller): rework parameter (#8935)
- Contributors: Prakash Kannaiah, Ryohsuke Mitsudome, Takayuki Murooka
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)
-
feat(path_optimizer): additional failure logging and failure mode handling (#10276) MRM when MPT fails
-
fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation (#10235)
- fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation
* docs(autoware_mpc_lateral_controller): update comments for state representation and discretization considerations ---------
-
chore(mpc_lateral_controller): add package maintainer (#10239) add package maintainer
-
Contributors: Arjun Jagdish Ram, Hayato Mizushima, Kyoichi Sugahara, Yutaka Kondo, mkquda
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)
- Contributors: Fumiya Watanabe, 心刚
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: tier4_debug_msgs changed to autoware_internal_debug_msgs in fil… (#9846)
- feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files ontrol/autoware_mpc_lateral_controller
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
Dependant Packages
Name | Deps |
---|---|
autoware_trajectory_follower_node |
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_mpc_lateral_controller at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache 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
- Takamasa Horibe
- Takayuki Murooka
- Kyoichi Sugahara
- Alqudah Mohammad
Authors
- Takamasa Horibe
- Maxime CLEMENT
- Takayuki Murooka
MPC Lateral Controller
This is the design document for the lateral controller node
in the autoware_trajectory_follower_node
package.
Purpose / Use cases
This node is used to general lateral control commands (steering angle and steering rate) when following a path.
Design
The node uses an implementation of linear model predictive control (MPC) for accurate path tracking. The MPC uses a model of the vehicle to simulate the trajectory resulting from the control command. The optimization of the control command is formulated as a Quadratic Program (QP).
Different vehicle models are implemented:
- kinematics : bicycle kinematics model with steering 1st-order delay.
- kinematics_no_delay : bicycle kinematics model without steering delay.
- dynamics : bicycle dynamics model considering slip angle. The kinematics model is being used by default. Please see the reference [1] for more details.
For the optimization, a Quadratic Programming (QP) solver is used and two options are currently implemented:
- unconstraint_fast : use least square method to solve unconstraint QP with eigen.
- osqp: run the following ADMM algorithm (for more details see the related papers at the Citing OSQP section):
Filtering
Filtering is required for good noise reduction. A Butterworth filter is employed for processing the yaw and lateral errors, which are used as inputs for the MPC, as well as for refining the output steering angle. Other filtering methods can be considered as long as the noise reduction performances are good enough. The moving average filter for example is not suited and can yield worse results than without any filtering.
Assumptions / Known limits
The tracking is not accurate if the first point of the reference trajectory is at or in front of the current ego pose.
Inputs / Outputs / API
Inputs
Set the following from the controller_node
-
autoware_planning_msgs/Trajectory
: reference trajectory to follow. -
nav_msgs/Odometry
: current odometry -
autoware_vehicle_msgs/SteeringReport
: current steering
Outputs
Return LateralOutput which contains the following to the controller node
autoware_control_msgs/Lateral
- LateralSyncData
- steer angle convergence
Publish the following messages.
Name | Type | Description |
---|---|---|
~/output/predicted_trajectory |
autoware_planning_msgs::Trajectory | Predicted trajectory calculated by MPC. The trajectory size will be empty when the controller is in an emergency such as too large deviation from the planning trajectory. |
MPC class
The MPC
class (defined in mpc.hpp
) provides the interface with the MPC algorithm.
Once a vehicle model, a QP solver, and the reference trajectory to follow have been set
(using setVehicleModel()
, setQPSolver()
, setReferenceTrajectory()
), a lateral control command
can be calculated by providing the current steer, velocity, and pose to function calculateMPC()
.
Parameter description
The default parameters defined in param/lateral_controller_defaults.param.yaml
are adjusted to the
AutonomouStuff Lexus RX 450h for under 40 km/h driving.
System
{{ json_to_markdown(“control/autoware_mpc_lateral_controller/schema/sub/system.json”) }}
Path Smoothing
File truncated at 100 lines see the full file
Changelog for package autoware_mpc_lateral_controller
0.47.0 (2025-08-11)
- fix(mpc): update time from start in the predicted trajectory (#10753)
- Contributors: Zulfaqar Azmi
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat: change info messages to debug, and debug_throttle method (#10757) change info messages to debug, and debug_throttle method
- feat: mpc info throttle msgs (#10687) add info msgs
- Contributors: TaikiYamada4, danielsanchezaran
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
- fix(control): apply THROTTLE to frequent log
(#10418)
- fix(control): apply THROTTLE to frequent log
- fix
- fix
- fix
* fix
- refactor(mpc_lateral_controller): rework parameter (#8935)
- Contributors: Prakash Kannaiah, Ryohsuke Mitsudome, Takayuki Murooka
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)
-
feat(path_optimizer): additional failure logging and failure mode handling (#10276) MRM when MPT fails
-
fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation (#10235)
- fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation
* docs(autoware_mpc_lateral_controller): update comments for state representation and discretization considerations ---------
-
chore(mpc_lateral_controller): add package maintainer (#10239) add package maintainer
-
Contributors: Arjun Jagdish Ram, Hayato Mizushima, Kyoichi Sugahara, Yutaka Kondo, mkquda
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)
- Contributors: Fumiya Watanabe, 心刚
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: tier4_debug_msgs changed to autoware_internal_debug_msgs in fil… (#9846)
- feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files ontrol/autoware_mpc_lateral_controller
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
Dependant Packages
Name | Deps |
---|---|
autoware_trajectory_follower_node |
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_mpc_lateral_controller at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.0 |
License | Apache 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
- Takamasa Horibe
- Takayuki Murooka
- Kyoichi Sugahara
- Alqudah Mohammad
Authors
- Takamasa Horibe
- Maxime CLEMENT
- Takayuki Murooka
MPC Lateral Controller
This is the design document for the lateral controller node
in the autoware_trajectory_follower_node
package.
Purpose / Use cases
This node is used to general lateral control commands (steering angle and steering rate) when following a path.
Design
The node uses an implementation of linear model predictive control (MPC) for accurate path tracking. The MPC uses a model of the vehicle to simulate the trajectory resulting from the control command. The optimization of the control command is formulated as a Quadratic Program (QP).
Different vehicle models are implemented:
- kinematics : bicycle kinematics model with steering 1st-order delay.
- kinematics_no_delay : bicycle kinematics model without steering delay.
- dynamics : bicycle dynamics model considering slip angle. The kinematics model is being used by default. Please see the reference [1] for more details.
For the optimization, a Quadratic Programming (QP) solver is used and two options are currently implemented:
- unconstraint_fast : use least square method to solve unconstraint QP with eigen.
- osqp: run the following ADMM algorithm (for more details see the related papers at the Citing OSQP section):
Filtering
Filtering is required for good noise reduction. A Butterworth filter is employed for processing the yaw and lateral errors, which are used as inputs for the MPC, as well as for refining the output steering angle. Other filtering methods can be considered as long as the noise reduction performances are good enough. The moving average filter for example is not suited and can yield worse results than without any filtering.
Assumptions / Known limits
The tracking is not accurate if the first point of the reference trajectory is at or in front of the current ego pose.
Inputs / Outputs / API
Inputs
Set the following from the controller_node
-
autoware_planning_msgs/Trajectory
: reference trajectory to follow. -
nav_msgs/Odometry
: current odometry -
autoware_vehicle_msgs/SteeringReport
: current steering
Outputs
Return LateralOutput which contains the following to the controller node
autoware_control_msgs/Lateral
- LateralSyncData
- steer angle convergence
Publish the following messages.
Name | Type | Description |
---|---|---|
~/output/predicted_trajectory |
autoware_planning_msgs::Trajectory | Predicted trajectory calculated by MPC. The trajectory size will be empty when the controller is in an emergency such as too large deviation from the planning trajectory. |
MPC class
The MPC
class (defined in mpc.hpp
) provides the interface with the MPC algorithm.
Once a vehicle model, a QP solver, and the reference trajectory to follow have been set
(using setVehicleModel()
, setQPSolver()
, setReferenceTrajectory()
), a lateral control command
can be calculated by providing the current steer, velocity, and pose to function calculateMPC()
.
Parameter description
The default parameters defined in param/lateral_controller_defaults.param.yaml
are adjusted to the
AutonomouStuff Lexus RX 450h for under 40 km/h driving.
System
{{ json_to_markdown(“control/autoware_mpc_lateral_controller/schema/sub/system.json”) }}
Path Smoothing
File truncated at 100 lines see the full file
Changelog for package autoware_mpc_lateral_controller
0.47.0 (2025-08-11)
- fix(mpc): update time from start in the predicted trajectory (#10753)
- Contributors: Zulfaqar Azmi
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat: change info messages to debug, and debug_throttle method (#10757) change info messages to debug, and debug_throttle method
- feat: mpc info throttle msgs (#10687) add info msgs
- Contributors: TaikiYamada4, danielsanchezaran
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
- fix(control): apply THROTTLE to frequent log
(#10418)
- fix(control): apply THROTTLE to frequent log
- fix
- fix
- fix
* fix
- refactor(mpc_lateral_controller): rework parameter (#8935)
- Contributors: Prakash Kannaiah, Ryohsuke Mitsudome, Takayuki Murooka
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)
-
feat(path_optimizer): additional failure logging and failure mode handling (#10276) MRM when MPT fails
-
fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation (#10235)
- fix(autoware_mpc_lateral_controller): replace Eigen::VectorXd with Eigen::Vector3d for state representation
* docs(autoware_mpc_lateral_controller): update comments for state representation and discretization considerations ---------
-
chore(mpc_lateral_controller): add package maintainer (#10239) add package maintainer
-
Contributors: Arjun Jagdish Ram, Hayato Mizushima, Kyoichi Sugahara, Yutaka Kondo, mkquda
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)
- Contributors: Fumiya Watanabe, 心刚
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: tier4_debug_msgs changed to autoware_internal_debug_msgs in fil… (#9846)
- feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files ontrol/autoware_mpc_lateral_controller
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
eigen |
Dependant Packages
Name | Deps |
---|---|
autoware_trajectory_follower_node |