VehicleAckermann.h
Go to the documentation of this file.
1 /*+-------------------------------------------------------------------------+
2  | MultiVehicle simulator (libmvsim) |
3  | |
4  | Copyright (C) 2014-2024 Jose Luis Blanco Claraco |
5  | Copyright (C) 2017 Borys Tymchenko (Odessa Polytechnic University) |
6  | Distributed under 3-clause BSD License |
7  | See COPYING |
8  +-------------------------------------------------------------------------+ */
9 
10 #pragma once
11 
12 #include <mrpt/img/TColor.h>
13 #include <mvsim/PID_Controller.h>
14 #include <mvsim/VehicleBase.h>
15 
16 namespace mvsim
17 {
23 {
25  public:
26  // Wheels: [0]:rear-left, [1]:rear-right, [2]: front-left, [3]: front-right
27  enum
28  {
29  WHEEL_RL = 0,
30  WHEEL_RR = 1,
31  WHEEL_FL = 2,
33  };
34 
36 
38  double getMaxSteeringAngle() const { return max_steer_ang_; }
39  void setMaxSteeringAngle(double val) { max_steer_ang_ = val; }
44  {
46  };
48  {
50  double steer_ang;
52  {
53  }
54  };
55 
58 
60  {
61  public:
63  static const char* class_name() { return "raw"; }
67  virtual void control_step(
70  virtual void load_config(const rapidxml::xml_node<char>& node) override;
71  virtual void teleop_interface(const TeleopInput& in, TeleopOutput& out) override;
72  };
73 
77  {
78  public:
80  static const char* class_name() { return "twist_front_steer_pid"; }
85  virtual void control_step(
88  virtual void load_config(const rapidxml::xml_node<char>& node) override;
89  virtual void teleop_interface(const TeleopInput& in, TeleopOutput& out) override;
90 
91  double KP, KI, KD;
92  double max_torque;
93 
94  // See base docs.
95  virtual bool setTwistCommand(const mrpt::math::TTwist2D& t) override
96  {
97  setpoint_lin_speed = t.vx;
98  setpoint_ang_speed = t.omega;
99  return true;
100  }
101 
102  private:
104  PID_Controller PID_[2]; //<! [0]:fl, [1]: fr
105 
106  double joyMaxLinSpeed = 1.0;
107  double joyMaxAngSpeed = 0.7;
108  };
109 
113  {
114  public:
116  static const char* class_name() { return "front_steer_pid"; }
120  virtual void control_step(
125  virtual void load_config(const rapidxml::xml_node<char>& node) override;
126  virtual void teleop_interface(const TeleopInput& in, TeleopOutput& out) override;
127 
128  double KP, KI, KD;
129  double max_torque;
130  private:
132  double r2f_L_;
133 
134  double joyMaxLinSpeed = 1.0;
135  double joyMaxSteerAng = 0.7;
136  };
137 
138  const ControllerBase::Ptr& getController() const { return controller_; }
140  virtual ControllerBaseInterface* getControllerInterface() override { return controller_.get(); }
141  // end controllers
143 
144  virtual mrpt::math::TTwist2D getVelocityLocalOdoEstimate() const override;
145 
152  const double desired_equiv_steer_ang, double& out_fl_ang, double& out_fr_ang) const;
153 
154  protected:
155  // See base class docs
156  virtual void dynamics_load_params_from_xml(const rapidxml::xml_node<char>* xml_node) override;
157  // See base class doc
158  virtual std::vector<double> invoke_motor_controllers(const TSimulContext& context) override;
159 
160  private:
162 
164  double max_steer_ang_ = mrpt::DEG2RAD(30);
165 };
166 } // namespace mvsim
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::r2f_L_
double r2f_L_
Definition: VehicleAckermann.h:103
mvsim::VisualObject::parent
World * parent()
Definition: VisualObject.h:51
mvsim
Definition: Client.h:21
mvsim::DynamicsAckermann::getController
ControllerBase::Ptr & getController()
Definition: VehicleAckermann.h:139
DECLARES_REGISTER_VEHICLE_DYNAMICS
#define DECLARES_REGISTER_VEHICLE_DYNAMICS(CLASS_NAME)
Definition: VehicleBase.h:257
mvsim::DynamicsAckermann::ControllerRawForces::teleop_interface
virtual void teleop_interface(const TeleopInput &in, TeleopOutput &out) override
Definition: VehicleAckermann_ControllerRaw.cpp:47
mvsim::DynamicsAckermann::computeFrontWheelAngles
void computeFrontWheelAngles(const double desired_equiv_steer_ang, double &out_fl_ang, double &out_fr_ang) const
Definition: VehicleAckermann.cpp:192
mvsim::DynamicsAckermann::ControllerRawForces::setpoint_wheel_torque_l
double setpoint_wheel_torque_l
Definition: VehicleAckermann.h:66
mvsim::DynamicsAckermann::ControllerFrontSteerPID::r2f_L_
double r2f_L_
Definition: VehicleAckermann.h:132
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID
Definition: VehicleAckermann.h:76
mvsim::DynamicsAckermann::ControllerFrontSteerPID::KI
double KI
Definition: VehicleAckermann.h:128
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::KD
double KD
PID controller parameters.
Definition: VehicleAckermann.h:91
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::PID_
PID_Controller PID_[2]
Definition: VehicleAckermann.h:104
mvsim::DynamicsAckermann::ControllerRawForces::ControllerRawForces
ControllerRawForces(DynamicsAckermann &veh)
Definition: VehicleAckermann_ControllerRaw.cpp:17
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::dist_fWheels_
double dist_fWheels_
Definition: VehicleAckermann.h:103
mvsim::DynamicsAckermann::WHEEL_RR
@ WHEEL_RR
Definition: VehicleAckermann.h:30
mvsim::ControllerBaseTempl::Ptr
std::shared_ptr< ControllerBaseTempl< VEH_DYNAMICS > > Ptr
Definition: ControllerBase.h:62
mvsim::DynamicsAckermann::ControllerRawForces::setpoint_wheel_torque_r
double setpoint_wheel_torque_r
Definition: VehicleAckermann.h:66
mvsim::DynamicsAckermann::ControllerFrontSteerPID::load_config
virtual void load_config(const rapidxml::xml_node< char > &node) override
Definition: VehicleAckermann_ControllerFrontSteerPID.cpp:64
mvsim::DynamicsAckermann::invoke_motor_controllers
virtual std::vector< double > invoke_motor_controllers(const TSimulContext &context) override
Definition: VehicleAckermann.cpp:164
mvsim::DynamicsAckermann::ControllerFrontSteerPID::control_step
virtual void control_step(const DynamicsAckermann::TControllerInput &ci, DynamicsAckermann::TControllerOutput &co) override
Definition: VehicleAckermann_ControllerFrontSteerPID.cpp:33
mvsim::DynamicsAckermann::dynamics_load_params_from_xml
virtual void dynamics_load_params_from_xml(const rapidxml::xml_node< char > *xml_node) override
Definition: VehicleAckermann.cpp:59
mvsim::DynamicsAckermann::setMaxSteeringAngle
void setMaxSteeringAngle(double val)
Definition: VehicleAckermann.h:39
mvsim::DynamicsAckermann::ControllerRawForces
Definition: VehicleAckermann.h:59
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::max_torque
double max_torque
Maximum abs. value torque (for clamp) [Nm].
Definition: VehicleAckermann.h:92
VehicleBase.h
mvsim::DynamicsAckermann::getVelocityLocalOdoEstimate
virtual mrpt::math::TTwist2D getVelocityLocalOdoEstimate() const override
Definition: VehicleAckermann.cpp:214
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::setpoint_ang_speed
double setpoint_ang_speed
desired velocities (m/s) and (rad/s)
Definition: VehicleAckermann.h:84
mvsim::ControllerBaseTempl
Definition: ControllerBase.h:59
mvsim::DynamicsAckermann::ControllerFrontSteerPID
Definition: VehicleAckermann.h:112
mvsim::DynamicsAckermann::TControllerInput
Definition: VehicleAckermann.h:43
mvsim::DynamicsAckermann::TControllerOutput::TControllerOutput
TControllerOutput()
Definition: VehicleAckermann.h:51
mvsim::TSimulContext
Definition: basic_types.h:58
mvsim::PID_Controller
Definition: PID_Controller.h:14
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::control_step
virtual void control_step(const DynamicsAckermann::TControllerInput &ci, DynamicsAckermann::TControllerOutput &co) override
Definition: VehicleAckermann_ControllerTwistFrontSteerPID.cpp:35
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::joyMaxLinSpeed
double joyMaxLinSpeed
Definition: VehicleAckermann.h:106
mvsim::ControllerBaseInterface::TeleopOutput
Definition: ControllerBase.h:33
mvsim::DynamicsAckermann::ControllerFrontSteerPID::ControllerFrontSteerPID
ControllerFrontSteerPID(DynamicsAckermann &veh)
Definition: VehicleAckermann_ControllerFrontSteerPID.cpp:17
mvsim::DynamicsAckermann::TControllerOutput::fr_torque
double fr_torque
Definition: VehicleAckermann.h:49
mvsim::DynamicsAckermann::ControllerRawForces::setpoint_steer_ang
double setpoint_steer_ang
Definition: VehicleAckermann.h:66
mvsim::DynamicsAckermann::TControllerOutput::steer_ang
double steer_ang
Equivalent Ackermann steering angle.
Definition: VehicleAckermann.h:50
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::KP
double KP
Definition: VehicleAckermann.h:91
mvsim::DynamicsAckermann::ControllerFrontSteerPID::teleop_interface
virtual void teleop_interface(const TeleopInput &in, TeleopOutput &out) override
Definition: VehicleAckermann_ControllerFrontSteerPID.cpp:79
mvsim::World
Definition: World.h:82
mvsim::DynamicsAckermann::ControllerFrontSteerPID::joyMaxSteerAng
double joyMaxSteerAng
Definition: VehicleAckermann.h:135
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::ControllerTwistFrontSteerPID
ControllerTwistFrontSteerPID(DynamicsAckermann &veh)
Definition: VehicleAckermann_ControllerTwistFrontSteerPID.cpp:17
mvsim::DynamicsAckermann::max_steer_ang_
double max_steer_ang_
Definition: VehicleAckermann.h:164
mvsim::VehicleBase
Definition: VehicleBase.h:44
rapidxml::xml_node< char >
mvsim::DynamicsAckermann::ControllerFrontSteerPID::setpoint_steer_ang
double setpoint_steer_ang
Definition: VehicleAckermann.h:119
mvsim::DynamicsAckermann::WHEEL_RL
@ WHEEL_RL
Definition: VehicleAckermann.h:29
mvsim::DynamicsAckermann::ControllerFrontSteerPID::KP
double KP
Definition: VehicleAckermann.h:128
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::KI
double KI
Definition: VehicleAckermann.h:91
mvsim::DynamicsAckermann::getController
const ControllerBase::Ptr & getController() const
Definition: VehicleAckermann.h:138
mvsim::DynamicsAckermann::TControllerInput::context
TSimulContext context
Definition: VehicleAckermann.h:45
mvsim::DynamicsAckermann::WHEEL_FL
@ WHEEL_FL
Definition: VehicleAckermann.h:31
mvsim::DynamicsAckermann::DynamicsAckermann
DynamicsAckermann(World *parent)
Definition: VehicleAckermann.cpp:23
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::setpoint_lin_speed
double setpoint_lin_speed
Definition: VehicleAckermann.h:83
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::load_config
virtual void load_config(const rapidxml::xml_node< char > &node) override
Definition: VehicleAckermann_ControllerTwistFrontSteerPID.cpp:122
mvsim::ControllerBaseInterface
Definition: ControllerBase.h:22
mvsim::DynamicsAckermann::ControllerFrontSteerPID::twist_control_
ControllerTwistFrontSteerPID twist_control_
Definition: VehicleAckermann.h:131
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::teleop_interface
virtual void teleop_interface(const TeleopInput &in, TeleopOutput &out) override
Definition: VehicleAckermann_ControllerTwistFrontSteerPID.cpp:138
mvsim::DynamicsAckermann
Definition: VehicleAckermann.h:22
mvsim::DynamicsAckermann::ControllerFrontSteerPID::max_torque
double max_torque
Maximum abs. value torque (for clamp) [Nm].
Definition: VehicleAckermann.h:129
mvsim::ControllerBaseInterface::TeleopInput
Definition: ControllerBase.h:25
mvsim::DynamicsAckermann::ControllerRawForces::load_config
virtual void load_config(const rapidxml::xml_node< char > &node) override
Definition: VehicleAckermann_ControllerRaw.cpp:35
mvsim::DynamicsAckermann::getMaxSteeringAngle
double getMaxSteeringAngle() const
Definition: VehicleAckermann.h:38
mvsim::DynamicsAckermann::WHEEL_FR
@ WHEEL_FR
Definition: VehicleAckermann.h:32
PID_Controller.h
mvsim::DynamicsAckermann::TControllerOutput::fl_torque
double fl_torque
Definition: VehicleAckermann.h:49
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::setTwistCommand
virtual bool setTwistCommand(const mrpt::math::TTwist2D &t) override
Definition: VehicleAckermann.h:95
mvsim::DynamicsAckermann::ControllerRawForces::control_step
virtual void control_step(const DynamicsAckermann::TControllerInput &ci, DynamicsAckermann::TControllerOutput &co) override
Definition: VehicleAckermann_ControllerRaw.cpp:26
mvsim::DynamicsAckermann::ControllerFrontSteerPID::joyMaxLinSpeed
double joyMaxLinSpeed
Definition: VehicleAckermann.h:134
mvsim::DynamicsAckermann::ControllerFrontSteerPID::KD
double KD
PID controller parameters.
Definition: VehicleAckermann.h:128
t
geometry_msgs::TransformStamped t
mvsim::DynamicsAckermann::TControllerOutput
Definition: VehicleAckermann.h:47
mvsim::DynamicsAckermann::ControllerFrontSteerPID::setpoint_lin_speed
double setpoint_lin_speed
Definition: VehicleAckermann.h:119
mvsim::DynamicsAckermann::TControllerOutput::rr_torque
double rr_torque
Definition: VehicleAckermann.h:49
mvsim::DynamicsAckermann::TControllerOutput::rl_torque
double rl_torque
Definition: VehicleAckermann.h:49
mvsim::DynamicsAckermann::getControllerInterface
virtual ControllerBaseInterface * getControllerInterface() override
Definition: VehicleAckermann.h:140
mvsim::DynamicsAckermann::ControllerTwistFrontSteerPID::joyMaxAngSpeed
double joyMaxAngSpeed
Definition: VehicleAckermann.h:107
mvsim::DynamicsAckermann::controller_
ControllerBase::Ptr controller_
The installed controller.
Definition: VehicleAckermann.h:161


mvsim
Author(s):
autogenerated on Wed May 28 2025 02:13:08