Nav2 Navigation Stack - rolling
main
ROS 2 Navigation Stack
|
Main algorithm optimizer of the MPPI Controller. More...
#include <nav2_mppi_controller/include/nav2_mppi_controller/optimizer.hpp>
Public Member Functions | |
Optimizer ()=default | |
Constructor for mppi::Optimizer. | |
~Optimizer () | |
Destructor for mppi::Optimizer. | |
void | initialize (nav2::LifecycleNode::WeakPtr parent, const std::string &name, std::shared_ptr< nav2_costmap_2d::Costmap2DROS > costmap_ros, std::shared_ptr< tf2_ros::Buffer > tf_buffer, ParametersHandler *dynamic_parameters_handler) |
Initializes optimizer on startup. More... | |
void | shutdown () |
Shutdown for optimizer at process end. | |
std::tuple< geometry_msgs::msg::TwistStamped, Eigen::ArrayXXf > | evalControl (const geometry_msgs::msg::PoseStamped &robot_pose, const geometry_msgs::msg::Twist &robot_speed, const nav_msgs::msg::Path &plan, const geometry_msgs::msg::Pose &goal, nav2_core::GoalChecker *goal_checker) |
Compute control using MPPI algorithm. More... | |
models::Trajectories & | getGeneratedTrajectories () |
Get the trajectories generated in a cycle for visualization. More... | |
Eigen::ArrayXXf | getOptimizedTrajectory () |
Get the optimal trajectory for a cycle for visualization. More... | |
const models::ControlSequence & | getOptimalControlSequence () |
Get the optimal control sequence for a cycle for visualization. More... | |
void | setSpeedLimit (double speed_limit, bool percentage) |
Set the maximum speed based on the speed limits callback. More... | |
void | reset (bool reset_dynamic_speed_limits=true) |
Reset the optimization problem to initial conditions. More... | |
const models::OptimizerSettings & | getSettings () const |
Get the motion model time step. More... | |
Protected Member Functions | |
void | optimize () |
Main function to generate, score, and return trajectories. | |
void | prepare (const geometry_msgs::msg::PoseStamped &robot_pose, const geometry_msgs::msg::Twist &robot_speed, const nav_msgs::msg::Path &plan, const geometry_msgs::msg::Pose &goal, nav2_core::GoalChecker *goal_checker) |
Prepare state information on new request for trajectory rollouts. More... | |
void | getParams () |
Obtain the main controller's parameters. | |
void | setMotionModel (const std::string &model) |
Set the motion model of the vehicle platform. More... | |
void | shiftControlSequence () |
Shift the optimal control sequence after processing for next iterations initial conditions after execution. | |
void | generateNoisedTrajectories () |
updates generated trajectories with noised trajectories from the last cycle's optimal control | |
void | applyControlSequenceConstraints () |
Apply hard vehicle constraints on control sequence. | |
void | updateStateVelocities (models::State &state) const |
Update velocities in state. More... | |
void | updateInitialStateVelocities (models::State &state) const |
Update initial velocity in state. More... | |
void | propagateStateVelocitiesFromInitials (models::State &state) const |
predict velocities in state using model for time horizon equal to timesteps More... | |
void | integrateStateVelocities (models::Trajectories &trajectories, const models::State &state) const |
Rollout velocities in state to poses. More... | |
void | integrateStateVelocities (Eigen::Array< float, Eigen::Dynamic, 3 > &trajectories, const Eigen::ArrayXXf &state) const |
Rollout velocities in state to poses. More... | |
void | updateControlSequence () |
Update control sequence with state controls weighted by costs using softmax function. | |
geometry_msgs::msg::TwistStamped | getControlFromSequenceAsTwist (const builtin_interfaces::msg::Time &stamp) |
Convert control sequence to a twist command. More... | |
bool | isHolonomic () const |
Whether the motion model is holonomic. More... | |
void | setOffset (double controller_frequency) |
Using control frequencies and time step size, determine if trajectory offset should be used to populate initial state of the next cycle. | |
bool | fallback (bool fail) |
Perform fallback behavior to try to recover from a set of trajectories in collision. More... | |
Protected Attributes | |
nav2::LifecycleNode::WeakPtr | parent_ |
std::shared_ptr< nav2_costmap_2d::Costmap2DROS > | costmap_ros_ |
nav2_costmap_2d::Costmap2D * | costmap_ |
std::string | name_ |
std::shared_ptr< tf2_ros::Buffer > | tf_buffer_ |
std::shared_ptr< MotionModel > | motion_model_ |
ParametersHandler * | parameters_handler_ |
CriticManager | critic_manager_ |
NoiseGenerator | noise_generator_ |
std::unique_ptr< pluginlib::ClassLoader< OptimalTrajectoryValidator > > | validator_loader_ |
OptimalTrajectoryValidator::Ptr | trajectory_validator_ |
models::OptimizerSettings | settings_ |
models::State | state_ |
models::ControlSequence | control_sequence_ |
std::array< mppi::models::Control, 4 > | control_history_ |
models::Trajectories | generated_trajectories_ |
models::Path | path_ |
geometry_msgs::msg::Pose | goal_ |
Eigen::ArrayXf | costs_ |
CriticData | critics_data_ |
rclcpp::Logger | logger_ {rclcpp::get_logger("MPPIController")} |
Caution, keep references. | |
Main algorithm optimizer of the MPPI Controller.
Definition at line 55 of file optimizer.hpp.
std::tuple< geometry_msgs::msg::TwistStamped, Eigen::ArrayXXf > mppi::Optimizer::evalControl | ( | const geometry_msgs::msg::PoseStamped & | robot_pose, |
const geometry_msgs::msg::Twist & | robot_speed, | ||
const nav_msgs::msg::Path & | plan, | ||
const geometry_msgs::msg::Pose & | goal, | ||
nav2_core::GoalChecker * | goal_checker | ||
) |
Compute control using MPPI algorithm.
robot_pose | Pose of the robot at given time |
robot_speed | Speed of the robot at given time |
plan | Path plan to track |
goal | Given Goal pose to reach. |
goal_checker | Object to check if goal is completed |
Definition at line 182 of file optimizer.cpp.
References getOptimizedTrajectory(), optimize(), and prepare().
Referenced by nav2_mppi_controller::MPPIController::computeVelocityCommands().
|
protected |
Perform fallback behavior to try to recover from a set of trajectories in collision.
fail | Whether the system failed to recover from |
Definition at line 232 of file optimizer.cpp.
References reset().
|
protected |
Convert control sequence to a twist command.
stamp | Timestamp to use |
Definition at line 520 of file optimizer.cpp.
References isHolonomic().
models::Trajectories & mppi::Optimizer::getGeneratedTrajectories | ( | ) |
Get the trajectories generated in a cycle for visualization.
Definition at line 580 of file optimizer.cpp.
Referenced by nav2_mppi_controller::MPPIController::visualize().
const models::ControlSequence & mppi::Optimizer::getOptimalControlSequence | ( | ) |
Get the optimal control sequence for a cycle for visualization.
Definition at line 475 of file optimizer.cpp.
Referenced by nav2_mppi_controller::MPPIController::computeVelocityCommands().
Eigen::ArrayXXf mppi::Optimizer::getOptimizedTrajectory | ( | ) |
Get the optimal trajectory for a cycle for visualization.
Definition at line 457 of file optimizer.cpp.
References integrateStateVelocities(), and isHolonomic().
Referenced by evalControl().
|
inline |
Get the motion model time step.
Definition at line 137 of file optimizer.hpp.
Referenced by nav2_mppi_controller::MPPIController::computeVelocityCommands().
void mppi::Optimizer::initialize | ( | nav2::LifecycleNode::WeakPtr | parent, |
const std::string & | name, | ||
std::shared_ptr< nav2_costmap_2d::Costmap2DROS > | costmap_ros, | ||
std::shared_ptr< tf2_ros::Buffer > | tf_buffer, | ||
ParametersHandler * | dynamic_parameters_handler | ||
) |
Initializes optimizer on startup.
parent | WeakPtr to node |
name | Name of plugin |
costmap_ros | Costmap2DROS object of environment |
dynamic_parameter_handler | Parameter handler object |
tf_buffer | TF buffer for transformations |
Definition at line 33 of file optimizer.cpp.
References getParams(), mppi::NoiseGenerator::initialize(), isHolonomic(), logger_, mppi::CriticManager::on_configure(), and reset().
Referenced by nav2_mppi_controller::MPPIController::configure().
|
protected |
Rollout velocities in state to poses.
trajectories | to rollout |
state | fill state |
Definition at line 366 of file optimizer.cpp.
References isHolonomic().
|
protected |
Rollout velocities in state to poses.
trajectories | to rollout |
state | fill state |
Definition at line 416 of file optimizer.cpp.
References isHolonomic().
Referenced by generateNoisedTrajectories(), and getOptimizedTrajectory().
|
protected |
Whether the motion model is holonomic.
y
axis of state Definition at line 177 of file optimizer.cpp.
Referenced by applyControlSequenceConstraints(), getControlFromSequenceAsTwist(), getOptimizedTrajectory(), initialize(), integrateStateVelocities(), reset(), shiftControlSequence(), updateControlSequence(), and updateInitialStateVelocities().
|
protected |
Prepare state information on new request for trajectory rollouts.
robot_pose | Pose of the robot at given time |
robot_speed | Speed of the robot at given time |
plan | Path plan to track |
goal_checker | Object to check if goal is completed |
Definition at line 251 of file optimizer.cpp.
Referenced by evalControl().
|
protected |
predict velocities in state using model for time horizon equal to timesteps
state | fill state |
Definition at line 360 of file optimizer.cpp.
Referenced by updateStateVelocities().
void mppi::Optimizer::reset | ( | bool | reset_dynamic_speed_limits = true | ) |
Reset the optimization problem to initial conditions.
Whether | to reset the constraints to its base values |
Definition at line 152 of file optimizer.cpp.
References isHolonomic(), logger_, mppi::NoiseGenerator::reset(), mppi::models::State::reset(), and mppi::models::Trajectories::reset().
Referenced by fallback(), getParams(), initialize(), and nav2_mppi_controller::MPPIController::reset().
|
protected |
Set the motion model of the vehicle platform.
model | Model string to use |
Definition at line 536 of file optimizer.cpp.
Referenced by getParams().
void mppi::Optimizer::setSpeedLimit | ( | double | speed_limit, |
bool | percentage | ||
) |
Set the maximum speed based on the speed limits callback.
speed_limit | Limit of the speed for use |
percentage | Whether the speed limit is absolute or relative |
Definition at line 553 of file optimizer.cpp.
Referenced by nav2_mppi_controller::MPPIController::setSpeedLimit().
|
protected |
Update initial velocity in state.
state | fill state |
Definition at line 349 of file optimizer.cpp.
References isHolonomic().
Referenced by updateStateVelocities().
|
protected |
Update velocities in state.
state | fill state with velocities on each step |
Definition at line 342 of file optimizer.cpp.
References propagateStateVelocitiesFromInitials(), and updateInitialStateVelocities().
Referenced by generateNoisedTrajectories().
|
protected |
Definition at line 284 of file optimizer.hpp.