15 #ifndef NAV2_MPPI_CONTROLLER__MOTION_MODELS_HPP_
16 #define NAV2_MPPI_CONTROLLER__MOTION_MODELS_HPP_
21 #include "nav2_mppi_controller/models/control_sequence.hpp"
22 #include "nav2_mppi_controller/models/state.hpp"
23 #include <xtensor/xmath.hpp>
24 #include <xtensor/xmasked_view.hpp>
25 #include <xtensor/xview.hpp>
26 #include <xtensor/xnoalias.hpp>
28 #include "nav2_mppi_controller/tools/parameters_handler.hpp"
56 using namespace xt::placeholders;
57 xt::noalias(xt::view(state.vx, xt::all(), xt::range(1, _))) =
58 xt::view(state.cvx, xt::all(), xt::range(0, -1));
60 xt::noalias(xt::view(state.wz, xt::all(), xt::range(1, _))) =
61 xt::view(state.cwz, xt::all(), xt::range(0, -1));
64 xt::noalias(xt::view(state.vy, xt::all(), xt::range(1, _))) =
65 xt::view(state.cvy, xt::all(), xt::range(0, -1));
94 auto getParam = param_handler->
getParamGetter(name +
".AckermannConstraints");
95 getParam(min_turning_r_,
"min_turning_r", 0.2);
113 auto & wz = control_sequence.wz;
114 auto abs_vx = xt::fabs(control_sequence.vx);
115 auto abs_wz = xt::fabs(wz);
117 for (
size_t i = 0; i < wz.size(); ++i) {
118 if ((abs_vx[i] / abs_wz[i]) < min_turning_r_) {
119 wz[i] = std::copysign(abs_vx[i] / min_turning_r_, wz[i]);
131 float min_turning_r_{0};
float getMinTurningRadius()
Get minimum turning radius of ackermann drive.
void applyConstraints(models::ControlSequence &control_sequence) override
Apply hard vehicle constraints to a control sequence.
bool isHolonomic() override
Whether the motion model is holonomic, using Y axis.
AckermannMotionModel(ParametersHandler *param_handler, const std::string &name)
Constructor for mppi::AckermannMotionModel.
Differential drive motion model.
DiffDriveMotionModel()=default
Constructor for mppi::DiffDriveMotionModel.
bool isHolonomic() override
Whether the motion model is holonomic, using Y axis.
Abstract motion model for modeling a vehicle.
virtual void predict(models::State &state)
With input velocities, find the vehicle's output velocities.
virtual void applyConstraints(models::ControlSequence &)
Apply hard vehicle constraints to a control sequence.
MotionModel()=default
Constructor for mppi::MotionModel.
virtual bool isHolonomic()=0
Whether the motion model is holonomic, using Y axis.
virtual ~MotionModel()=default
Destructor for mppi::MotionModel.
Omnidirectional motion model.
OmniMotionModel()=default
Constructor for mppi::OmniMotionModel.
bool isHolonomic() override
Whether the motion model is holonomic, using Y axis.
Handles getting parameters and dynamic parmaeter changes.
auto getParamGetter(const std::string &ns)
Get an object to retreive parameters.
A control sequence over time (e.g. trajectory)
State information: velocities, controls, poses, speed.