VehicleAckermann.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 {
22 {
24  public:
25  // Wheels: [0]:rear-left, [1]:rear-right, [2]: front-left, [3]: front-right
26  enum
27  {
28  WHEEL_RL = 0,
29  WHEEL_RR = 1,
30  WHEEL_FL = 2,
32  };
33 
35 
37  double getMaxSteeringAngle() const { return max_steer_ang_; }
38  void setMaxSteeringAngle(double val) { max_steer_ang_ = val; }
43  {
45  };
47  {
48  double fl_torque, fr_torque, rl_torque, rr_torque;
49  double steer_ang;
51  : fl_torque(0),
52  fr_torque(0),
53  rl_torque(0),
54  rr_torque(0),
55  steer_ang(0)
56  {
57  }
58  };
59 
62 
64  {
65  public:
67  static const char* class_name() { return "raw"; }
70  double setpoint_wheel_torque_l, setpoint_wheel_torque_r,
71  setpoint_steer_ang;
72  virtual void control_step(
75  virtual void load_config(const rapidxml::xml_node<char>& node) override;
76  virtual void teleop_interface(
77  const TeleopInput& in, TeleopOutput& out) override;
78  };
79 
83  {
84  public:
86  static const char* class_name() { return "twist_front_steer_pid"; }
90  setpoint_ang_speed;
91  virtual void control_step(
94  virtual void load_config(const rapidxml::xml_node<char>& node) override;
95  virtual void teleop_interface(
96  const TeleopInput& in, TeleopOutput& out) override;
97 
98  double KP, KI, KD;
99  double max_torque;
100 
101  // See base docs.
102  virtual bool setTwistCommand(const mrpt::math::TTwist2D& t) override
103  {
104  setpoint_lin_speed = t.vx;
105  setpoint_ang_speed = t.omega;
106  return true;
107  }
108 
109  private:
110  double dist_fWheels_, r2f_L_;
111  PID_Controller PID_[2]; //<! [0]:fl, [1]: fr
112  };
113 
117  {
118  public:
120  static const char* class_name() { return "front_steer_pid"; }
123  double setpoint_lin_speed, setpoint_steer_ang;
124  virtual void control_step(
129  virtual void load_config(const rapidxml::xml_node<char>& node) override;
130  virtual void teleop_interface(
131  const TeleopInput& in, TeleopOutput& out) override;
132 
133  double KP, KI, KD;
134  double max_torque;
135  private:
137  double r2f_L_;
138  };
139 
140  const ControllerBase::Ptr& getController() const { return controller_; }
143  {
144  return controller_.get();
145  }
146  // end controllers
148 
149  virtual mrpt::math::TTwist2D getVelocityLocalOdoEstimate() const override;
150 
157  const double desired_equiv_steer_ang, double& out_fl_ang,
158  double& out_fr_ang) const;
159 
160  protected:
161  // See base class docs
162  virtual void dynamics_load_params_from_xml(
163  const rapidxml::xml_node<char>* xml_node) override;
164  // See base class doc
165  virtual std::vector<double> invoke_motor_controllers(
166  const TSimulContext& context) override;
167 
168  private:
170 
172  double max_steer_ang_ = mrpt::DEG2RAD(30);
173 };
174 } // namespace mvsim
ControllerBase::Ptr & getController()
virtual std::vector< double > invoke_motor_controllers(const TSimulContext &context) override
DynamicsAckermann(World *parent)
double max_torque
Maximum abs. value torque (for clamp) [Nm].
virtual mrpt::math::TTwist2D getVelocityLocalOdoEstimate() const override
ControllerBase::Ptr controller_
The installed controller.
void computeFrontWheelAngles(const double desired_equiv_steer_ang, double &out_fl_ang, double &out_fr_ang) const
virtual void dynamics_load_params_from_xml(const rapidxml::xml_node< char > *xml_node) override
void setMaxSteeringAngle(double val)
double getMaxSteeringAngle() const
std::shared_ptr< ControllerBaseTempl< VEH_DYNAMICS > > Ptr
#define DECLARES_REGISTER_VEHICLE_DYNAMICS(CLASS_NAME)
Definition: VehicleBase.h:262
virtual bool setTwistCommand(const mrpt::math::TTwist2D &t) override
const ControllerBase::Ptr & getController() const
double steer_ang
Equivalent Ackermann steering angle.
double max_torque
Maximum abs. value torque (for clamp) [Nm].
virtual ControllerBaseInterface * getControllerInterface() override


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