14 using namespace mvsim;
38 const double spVelL = sp.vx - 0.5 * sp.omega *
distWheels_;
39 const double spVelR = sp.vx + 0.5 * sp.omega *
distWheels_;
43 const mrpt::math::TTwist2D vehVelOdo =
veh_.getVelocityLocalOdoEstimate();
44 const double actVelL = vehVelOdo.vx - 0.5 * vehVelOdo.omega *
distWheels_;
45 const double actVelR = vehVelOdo.vx + 0.5 * vehVelOdo.omega *
distWheels_;
48 for (
auto& pid :
PIDs_)
57 const double followErrorL = spVelL - actVelL;
58 const double followErrorR = spVelR - actVelR;
60 const double zeroThres = 0.001;
62 if (std::abs(spVelL) < zeroThres &&
63 std::abs(spVelR) < zeroThres &&
64 std::abs(spVelR) < zeroThres &&
65 std::abs(spVelR) < zeroThres)
69 for (
auto& pid : PIDs_) pid.reset();
126 for (
auto& pid :
PIDs_) pid.reset();
132 "w/s=forward/backward.\n" 136 "setpoint: lin=%.03f ang=%.03f deg/s\n",
setpoint_.vx,
virtual void teleop_interface(const TeleopInput &in, TeleopOutput &out) override
std::map< std::string, TParamEntry > TParameterDefinitions
void parse_xmlnode_children_as_param(const rapidxml::xml_node< char > &xml_node, const TParameterDefinitions ¶ms, const std::map< std::string, std::string > &variableNamesValues={}, const char *functionNameContext="", mrpt::system::COutputLogger *logger=nullptr)
mrpt::math::TTwist2D setpoint_
"vx" and "omega" only
double KP
PID controller parameters.
virtual void teleop_interface(const TeleopInput &in, TeleopOutput &out) override
std::array< PID_Controller, 2 > PIDs_
ControllerTwistPID(DynamicsDifferential &veh)
static const char * class_name()
std::string append_gui_lines
virtual void load_config(const rapidxml::xml_node< char > &node) override
double max_torque
Maximum abs. value torque (for clamp) [Nm].
mrpt::math::TTwist2D setpoint() const
virtual void control_step(const DynamicsDifferential::TControllerInput &ci, DynamicsDifferential::TControllerOutput &co) override