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 & vx = control_sequence.vx;
114 auto & wz = control_sequence.wz;
116 auto view = xt::masked_view(wz, (xt::fabs(vx) / xt::fabs(wz)) < min_turning_r_);
117 view = xt::sign(wz) * xt::fabs(vx) / min_turning_r_;
127 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.