VehicleAckermann_Drivetrain.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 {
29 {
31  public:
32  // Wheels: [0]:rear-left, [1]:rear-right, [2]: front-left, [3]: front-right
33  enum
34  {
35  WHEEL_RL = 0,
36  WHEEL_RR = 1,
37  WHEEL_FL = 2,
39  };
40 
42  {
46 
50 
52  };
53 
55 
57  double getMaxSteeringAngle() const { return max_steer_ang_; }
58  void setMaxSteeringAngle(double val) { max_steer_ang_ = val; }
63  {
65  };
67  {
68  double drive_torque;
69  double steer_ang;
71  };
72 
76 
78  {
79  public:
81  static const char* class_name() { return "raw"; }
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 
95  {
96  public:
98  static const char* class_name() { return "twist_front_steer_pid"; }
103  virtual void control_step(
106  virtual void load_config(const rapidxml::xml_node<char>& node) override;
107  virtual void teleop_interface(const TeleopInput& in, TeleopOutput& out) override;
108 
109  double KP, KI, KD;
110  double max_torque;
111 
112  // See base docs.
113  virtual bool setTwistCommand(const mrpt::math::TTwist2D& t) override
114  {
115  setpoint_lin_speed = t.vx;
116  setpoint_ang_speed = t.omega;
117  return true;
118  }
119 
120  private:
123 
124  double joyMaxLinSpeed = 1.0;
125  double joyMaxAngSpeed = 0.7;
126  };
127 
129  {
130  public:
132  static const char* class_name() { return "front_steer_pid"; }
136  virtual void control_step(
141  virtual void load_config(const rapidxml::xml_node<char>& node) override;
142  virtual void teleop_interface(const TeleopInput& in, TeleopOutput& out) override;
143 
144  double KP, KI, KD;
145  double max_torque;
146  private:
148  double r2f_L_;
149  };
150 
151  const ControllerBase::Ptr& getController() const { return controller_; }
153  virtual ControllerBaseInterface* getControllerInterface() override { return controller_.get(); }
154  // end controllers
156 
157  virtual mrpt::math::TTwist2D getVelocityLocalOdoEstimate() const override;
158 
165  const double desired_equiv_steer_ang, double& out_fl_ang, double& out_fr_ang) const;
166 
170  const double w1, const double w2, const double diffBias, const double defaultSplitRatio,
171  double& t1, double& t2);
172 
173  protected:
174  // See base class docs
175  virtual void dynamics_load_params_from_xml(const rapidxml::xml_node<char>* xml_node) override;
176  // See base class doc
177  virtual std::vector<double> invoke_motor_controllers(const TSimulContext& context) override;
178 
179  private:
181 
182  double max_steer_ang_;
183 
186 
189  double RearLRSplit_;
190 
192  double FrontLRBias_;
193  double RearLRBias_;
194 };
195 } // namespace mvsim
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::setpoint_lin_speed
double setpoint_lin_speed
Definition: VehicleAckermann_Drivetrain.h:101
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::KP
double KP
Definition: VehicleAckermann_Drivetrain.h:109
mvsim::VisualObject::parent
World * parent()
Definition: VisualObject.h:51
mvsim::DynamicsAckermannDrivetrain::DifferentialType
DifferentialType
Definition: VehicleAckermann_Drivetrain.h:41
mvsim::DynamicsAckermannDrivetrain::ControllerFrontSteerPID::KD
double KD
PID controller parameters.
Definition: VehicleAckermann_Drivetrain.h:144
mvsim::DynamicsAckermannDrivetrain::ControllerFrontSteerPID::control_step
virtual void control_step(const DynamicsAckermannDrivetrain::TControllerInput &ci, DynamicsAckermannDrivetrain::TControllerOutput &co) override
Definition: VehicleAckermann_Drivetrain_ControllerFrontSteerPID.cpp:34
mvsim
Definition: Client.h:21
mvsim::DynamicsAckermannDrivetrain::getVelocityLocalOdoEstimate
virtual mrpt::math::TTwist2D getVelocityLocalOdoEstimate() const override
Definition: VehicleAckermann_Drivetrain.cpp:397
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::setpoint_ang_speed
double setpoint_ang_speed
desired velocities (m/s) and (rad/s)
Definition: VehicleAckermann_Drivetrain.h:102
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::PID_
PID_Controller PID_
Definition: VehicleAckermann_Drivetrain.h:122
DECLARES_REGISTER_VEHICLE_DYNAMICS
#define DECLARES_REGISTER_VEHICLE_DYNAMICS(CLASS_NAME)
Definition: VehicleBase.h:257
mvsim::DynamicsAckermannDrivetrain::WHEEL_FR
@ WHEEL_FR
Definition: VehicleAckermann_Drivetrain.h:38
mvsim::DynamicsAckermannDrivetrain::ControllerFrontSteerPID::r2f_L_
double r2f_L_
Definition: VehicleAckermann_Drivetrain.h:148
mvsim::DynamicsAckermannDrivetrain::DIFF_TORSEN_4WD
@ DIFF_TORSEN_4WD
Definition: VehicleAckermann_Drivetrain.h:49
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::max_torque
double max_torque
Maximum abs. value torque (for clamp) [Nm].
Definition: VehicleAckermann_Drivetrain.h:110
mvsim::DynamicsAckermannDrivetrain::FrontLRSplit_
double FrontLRSplit_
Definition: VehicleAckermann_Drivetrain.h:188
mvsim::DynamicsAckermannDrivetrain::getController
ControllerBase::Ptr & getController()
Definition: VehicleAckermann_Drivetrain.h:152
mvsim::DynamicsAckermannDrivetrain::ControllerFrontSteerPID::ControllerFrontSteerPID
ControllerFrontSteerPID(DynamicsAckermannDrivetrain &veh)
Definition: VehicleAckermann_Drivetrain_ControllerFrontSteerPID.cpp:17
mvsim::DynamicsAckermannDrivetrain::DIFF_TORSEN_FRONT
@ DIFF_TORSEN_FRONT
Definition: VehicleAckermann_Drivetrain.h:47
mvsim::DynamicsAckermannDrivetrain::getController
const ControllerBase::Ptr & getController() const
Definition: VehicleAckermann_Drivetrain.h:151
mvsim::DynamicsAckermannDrivetrain::computeDiffTorqueSplit
void computeDiffTorqueSplit(const double w1, const double w2, const double diffBias, const double defaultSplitRatio, double &t1, double &t2)
Definition: VehicleAckermann_Drivetrain.cpp:367
mvsim::DynamicsAckermannDrivetrain::ControllerFrontSteerPID::KP
double KP
Definition: VehicleAckermann_Drivetrain.h:144
mvsim::DynamicsAckermannDrivetrain::ControllerFrontSteerPID::max_torque
double max_torque
Maximum abs. value torque (for clamp) [Nm].
Definition: VehicleAckermann_Drivetrain.h:145
mvsim::DynamicsAckermannDrivetrain::max_steer_ang_
double max_steer_ang_
Definition: VehicleAckermann_Drivetrain.h:182
mvsim::DynamicsAckermannDrivetrain::computeFrontWheelAngles
void computeFrontWheelAngles(const double desired_equiv_steer_ang, double &out_fl_ang, double &out_fr_ang) const
Definition: VehicleAckermann_Drivetrain.cpp:346
mvsim::DynamicsAckermannDrivetrain::ControllerFrontSteerPID::KI
double KI
Definition: VehicleAckermann_Drivetrain.h:144
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::joyMaxAngSpeed
double joyMaxAngSpeed
Definition: VehicleAckermann_Drivetrain.h:125
mvsim::DynamicsAckermannDrivetrain::setMaxSteeringAngle
void setMaxSteeringAngle(double val)
Definition: VehicleAckermann_Drivetrain.h:58
mvsim::ControllerBaseTempl::Ptr
std::shared_ptr< ControllerBaseTempl< VEH_DYNAMICS > > Ptr
Definition: ControllerBase.h:62
mvsim::DynamicsAckermannDrivetrain
Definition: VehicleAckermann_Drivetrain.h:28
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::setTwistCommand
virtual bool setTwistCommand(const mrpt::math::TTwist2D &t) override
Definition: VehicleAckermann_Drivetrain.h:113
mvsim::DynamicsAckermannDrivetrain::WHEEL_RR
@ WHEEL_RR
Definition: VehicleAckermann_Drivetrain.h:36
mvsim::DynamicsAckermannDrivetrain::ControllerFrontSteerPID::setpoint_steer_ang
double setpoint_steer_ang
Definition: VehicleAckermann_Drivetrain.h:135
mvsim::DynamicsAckermannDrivetrain::TControllerOutput::drive_torque
double drive_torque
Definition: VehicleAckermann_Drivetrain.h:68
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::teleop_interface
virtual void teleop_interface(const TeleopInput &in, TeleopOutput &out) override
Definition: Vehicleackermann_Drivetrain_ControllerTwistFrontSteerPID.cpp:79
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::joyMaxLinSpeed
double joyMaxLinSpeed
Definition: VehicleAckermann_Drivetrain.h:124
VehicleBase.h
mvsim::DynamicsAckermannDrivetrain::ControllerFrontSteerPID::teleop_interface
virtual void teleop_interface(const TeleopInput &in, TeleopOutput &out) override
Definition: VehicleAckermann_Drivetrain_ControllerFrontSteerPID.cpp:82
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::control_step
virtual void control_step(const DynamicsAckermannDrivetrain::TControllerInput &ci, DynamicsAckermannDrivetrain::TControllerOutput &co) override
Definition: Vehicleackermann_Drivetrain_ControllerTwistFrontSteerPID.cpp:35
mvsim::DynamicsAckermannDrivetrain::getMaxSteeringAngle
double getMaxSteeringAngle() const
Definition: VehicleAckermann_Drivetrain.h:57
mvsim::ControllerBaseTempl
Definition: ControllerBase.h:59
mvsim::DynamicsAckermannDrivetrain::diff_type_
DifferentialType diff_type_
min turning radius
Definition: VehicleAckermann_Drivetrain.h:185
mvsim::DynamicsAckermannDrivetrain::getControllerInterface
virtual ControllerBaseInterface * getControllerInterface() override
Definition: VehicleAckermann_Drivetrain.h:153
mvsim::DynamicsAckermannDrivetrain::TControllerOutput
Definition: VehicleAckermann_Drivetrain.h:66
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID
Definition: VehicleAckermann_Drivetrain.h:94
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::KD
double KD
PID controller parameters.
Definition: VehicleAckermann_Drivetrain.h:109
mvsim::TSimulContext
Definition: basic_types.h:58
mvsim::PID_Controller
Definition: PID_Controller.h:14
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::dist_fWheels_
double dist_fWheels_
Definition: VehicleAckermann_Drivetrain.h:121
mvsim::DynamicsAckermannDrivetrain::ControllerFrontSteerPID::load_config
virtual void load_config(const rapidxml::xml_node< char > &node) override
Definition: VehicleAckermann_Drivetrain_ControllerFrontSteerPID.cpp:66
mvsim::DynamicsAckermannDrivetrain::FrontRearSplit_
double FrontRearSplit_
Definition: VehicleAckermann_Drivetrain.h:187
mvsim::DynamicsAckermannDrivetrain::FrontLRBias_
double FrontLRBias_
Definition: VehicleAckermann_Drivetrain.h:192
mvsim::ControllerBaseInterface::TeleopOutput
Definition: ControllerBase.h:33
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::KI
double KI
Definition: VehicleAckermann_Drivetrain.h:109
mvsim::DynamicsAckermannDrivetrain::DIFF_TORSEN_REAR
@ DIFF_TORSEN_REAR
Definition: VehicleAckermann_Drivetrain.h:48
mvsim::DynamicsAckermannDrivetrain::ControllerFrontSteerPID
Definition: VehicleAckermann_Drivetrain.h:128
mvsim::DynamicsAckermannDrivetrain::TControllerOutput::TControllerOutput
TControllerOutput()
Definition: VehicleAckermann_Drivetrain.h:70
mvsim::DynamicsAckermannDrivetrain::DIFF_OPEN_FRONT
@ DIFF_OPEN_FRONT
Definition: VehicleAckermann_Drivetrain.h:43
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::ControllerTwistFrontSteerPID
ControllerTwistFrontSteerPID(DynamicsAckermannDrivetrain &veh)
Definition: Vehicleackermann_Drivetrain_ControllerTwistFrontSteerPID.cpp:17
mvsim::DynamicsAckermannDrivetrain::ControllerFrontSteerPID::twist_control_
ControllerTwistFrontSteerPID twist_control_
Definition: VehicleAckermann_Drivetrain.h:147
mvsim::DynamicsAckermannDrivetrain::TControllerInput::context
TSimulContext context
Definition: VehicleAckermann_Drivetrain.h:64
mvsim::DynamicsAckermannDrivetrain::ControllerRawForces
Definition: VehicleAckermann_Drivetrain.h:77
mvsim::DynamicsAckermannDrivetrain::TControllerInput
Definition: VehicleAckermann_Drivetrain.h:62
mvsim::DynamicsAckermannDrivetrain::invoke_motor_controllers
virtual std::vector< double > invoke_motor_controllers(const TSimulContext &context) override
Definition: VehicleAckermann_Drivetrain.cpp:219
mvsim::DynamicsAckermannDrivetrain::WHEEL_RL
@ WHEEL_RL
Definition: VehicleAckermann_Drivetrain.h:35
mvsim::DynamicsAckermannDrivetrain::RearLRSplit_
double RearLRSplit_
Definition: VehicleAckermann_Drivetrain.h:189
mvsim::DynamicsAckermannDrivetrain::controller_
ControllerBase::Ptr controller_
The installed controller.
Definition: VehicleAckermann_Drivetrain.h:180
mvsim::DynamicsAckermannDrivetrain::DIFF_OPEN_REAR
@ DIFF_OPEN_REAR
Definition: VehicleAckermann_Drivetrain.h:44
mvsim::World
Definition: World.h:82
mvsim::DynamicsAckermannDrivetrain::FrontRearBias_
double FrontRearBias_
Definition: VehicleAckermann_Drivetrain.h:191
mvsim::VehicleBase
Definition: VehicleBase.h:44
rapidxml::xml_node< char >
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::load_config
virtual void load_config(const rapidxml::xml_node< char > &node) override
Definition: Vehicleackermann_Drivetrain_ControllerTwistFrontSteerPID.cpp:63
mvsim::DynamicsAckermannDrivetrain::DIFF_OPEN_4WD
@ DIFF_OPEN_4WD
Definition: VehicleAckermann_Drivetrain.h:45
mvsim::ControllerBaseInterface
Definition: ControllerBase.h:22
mvsim::DynamicsAckermannDrivetrain::ControllerRawForces::control_step
virtual void control_step(const DynamicsAckermannDrivetrain::TControllerInput &ci, DynamicsAckermannDrivetrain::TControllerOutput &co) override
Definition: VehicleAckermann_Drivetrain_ControllerRaw.cpp:24
mvsim::DynamicsAckermannDrivetrain::TControllerOutput::steer_ang
double steer_ang
Equivalent Ackermann steering angle.
Definition: VehicleAckermann_Drivetrain.h:69
mvsim::DynamicsAckermannDrivetrain::RearLRBias_
double RearLRBias_
Definition: VehicleAckermann_Drivetrain.h:193
mvsim::DynamicsAckermannDrivetrain::WHEEL_FL
@ WHEEL_FL
Definition: VehicleAckermann_Drivetrain.h:37
mvsim::ControllerBaseInterface::TeleopInput
Definition: ControllerBase.h:25
mvsim::DynamicsAckermannDrivetrain::ControllerRawForces::load_config
virtual void load_config(const rapidxml::xml_node< char > &node) override
Definition: VehicleAckermann_Drivetrain_ControllerRaw.cpp:32
mvsim::DynamicsAckermannDrivetrain::ControllerFrontSteerPID::setpoint_lin_speed
double setpoint_lin_speed
Definition: VehicleAckermann_Drivetrain.h:135
mvsim::DynamicsAckermannDrivetrain::DynamicsAckermannDrivetrain
DynamicsAckermannDrivetrain(World *parent)
Definition: VehicleAckermann_Drivetrain.cpp:23
PID_Controller.h
mvsim::DynamicsAckermannDrivetrain::ControllerTwistFrontSteerPID::r2f_L_
double r2f_L_
Definition: VehicleAckermann_Drivetrain.h:121
mvsim::DynamicsAckermannDrivetrain::DIFF_MAX
@ DIFF_MAX
Definition: VehicleAckermann_Drivetrain.h:51
t
geometry_msgs::TransformStamped t
mvsim::DynamicsAckermannDrivetrain::ControllerRawForces::ControllerRawForces
ControllerRawForces(DynamicsAckermannDrivetrain &veh)
Definition: VehicleAckermann_Drivetrain_ControllerRaw.cpp:17
mvsim::DynamicsAckermannDrivetrain::ControllerRawForces::teleop_interface
virtual void teleop_interface(const TeleopInput &in, TeleopOutput &out) override
Definition: VehicleAckermann_Drivetrain_ControllerRaw.cpp:44
mvsim::DynamicsAckermannDrivetrain::dynamics_load_params_from_xml
virtual void dynamics_load_params_from_xml(const rapidxml::xml_node< char > *xml_node) override
Definition: VehicleAckermann_Drivetrain.cpp:72
mvsim::DynamicsAckermannDrivetrain::ControllerRawForces::setpoint_wheel_torque
double setpoint_wheel_torque
Definition: VehicleAckermann_Drivetrain.h:84
mvsim::DynamicsAckermannDrivetrain::ControllerRawForces::setpoint_steer_ang
double setpoint_steer_ang
Definition: VehicleAckermann_Drivetrain.h:84


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