VehicleAckermann_Drivetrain.h
Go to the documentation of this file.
1 /*+-------------------------------------------------------------------------+
2  | MultiVehicle simulator (libmvsim) |
3  | |
4  | Copyright (C) 2014-2023 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 {
27 {
29  public:
30  // Wheels: [0]:rear-left, [1]:rear-right, [2]: front-left, [3]: front-right
31  enum
32  {
33  WHEEL_RL = 0,
34  WHEEL_RR = 1,
35  WHEEL_FL = 2,
37  };
38 
40  {
44 
48 
50  };
51 
53 
55  double getMaxSteeringAngle() const { return max_steer_ang_; }
56  void setMaxSteeringAngle(double val) { max_steer_ang_ = val; }
61  {
63  };
65  {
66  double drive_torque;
67  double steer_ang;
68  TControllerOutput() : drive_torque(0), steer_ang(0) {}
69  };
70 
74 
76  {
77  public:
79  static const char* class_name() { return "raw"; }
82  double setpoint_wheel_torque, setpoint_steer_ang;
83  virtual void control_step(
86  virtual void load_config(const rapidxml::xml_node<char>& node) override;
87  virtual void teleop_interface(
88  const TeleopInput& in, TeleopOutput& out) override;
89  };
90 
94  {
95  public:
97  static const char* class_name() { return "twist_front_steer_pid"; }
101  setpoint_ang_speed;
102  virtual void control_step(
105  virtual void load_config(const rapidxml::xml_node<char>& node) override;
106  virtual void teleop_interface(
107  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:
121  double dist_fWheels_, r2f_L_;
123  };
124 
126  {
127  public:
129  static const char* class_name() { return "front_steer_pid"; }
132  double setpoint_lin_speed, setpoint_steer_ang;
133  virtual void control_step(
138  virtual void load_config(const rapidxml::xml_node<char>& node) override;
139  virtual void teleop_interface(
140  const TeleopInput& in, TeleopOutput& out) override;
141 
142  double KP, KI, KD;
143  double max_torque;
144  private:
146  double r2f_L_;
147  };
148 
149  const ControllerBase::Ptr& getController() const { return controller_; }
152  {
153  return controller_.get();
154  }
155  // end controllers
157 
158  virtual mrpt::math::TTwist2D getVelocityLocalOdoEstimate() const override;
159 
166  const double desired_equiv_steer_ang, double& out_fl_ang,
167  double& out_fr_ang) const;
168 
172  const double w1, const double w2, const double diffBias,
173  const double defaultSplitRatio, double& t1, double& t2);
174 
175  protected:
176  // See base class docs
177  virtual void dynamics_load_params_from_xml(
178  const rapidxml::xml_node<char>* xml_node) override;
179  // See base class doc
180  virtual std::vector<double> invoke_motor_controllers(
181  const TSimulContext& context) override;
182 
183  private:
185 
186  double max_steer_ang_;
187 
190 
193  double RearLRSplit_;
194 
196  double FrontLRBias_;
197  double RearLRBias_;
198 };
199 } // namespace mvsim
DifferentialType diff_type_
min turning radius
ControllerBase::Ptr controller_
The installed controller.
const ControllerBase::Ptr & getController() const
virtual mrpt::math::TTwist2D getVelocityLocalOdoEstimate() const override
double max_torque
Maximum abs. value torque (for clamp) [Nm].
virtual void dynamics_load_params_from_xml(const rapidxml::xml_node< char > *xml_node) override
virtual ControllerBaseInterface * getControllerInterface() override
void computeDiffTorqueSplit(const double w1, const double w2, const double diffBias, const double defaultSplitRatio, double &t1, double &t2)
std::shared_ptr< ControllerBaseTempl< VEH_DYNAMICS > > Ptr
#define DECLARES_REGISTER_VEHICLE_DYNAMICS(CLASS_NAME)
Definition: VehicleBase.h:262
double steer_ang
Equivalent Ackermann steering angle.
virtual std::vector< double > invoke_motor_controllers(const TSimulContext &context) override
double max_torque
Maximum abs. value torque (for clamp) [Nm].
void computeFrontWheelAngles(const double desired_equiv_steer_ang, double &out_fl_ang, double &out_fr_ang) const
virtual bool setTwistCommand(const mrpt::math::TTwist2D &t) override


mvsim
Author(s):
autogenerated on Tue Jul 4 2023 03:08:21