VehicleAckermann_ControllerRaw.cpp
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 
11 
12 #include "xml_utils.h"
13 
14 using namespace mvsim;
15 using namespace std;
16 
18  DynamicsAckermann& veh)
19  : ControllerBase(veh),
20  setpoint_wheel_torque_l(0),
21  setpoint_wheel_torque_r(0),
22  setpoint_steer_ang(0)
23 {
24 }
25 
26 // See base class docs
28  [[maybe_unused]] const DynamicsAckermann::TControllerInput& ci,
30 {
33  co.steer_ang = this->setpoint_steer_ang;
34 }
35 
37  const rapidxml::xml_node<char>& node)
38 {
39  TParameterDefinitions params;
40  params["fl_torque"] = TParamEntry("%lf", &setpoint_wheel_torque_l);
41  params["fr_torque"] = TParamEntry("%lf", &setpoint_wheel_torque_r);
42 
43  // Initial speed.
44  params["steer_ang_deg"] = TParamEntry("%lf_deg", &this->setpoint_steer_ang);
45 
46  parse_xmlnode_children_as_param(node, params);
47 }
48 
50  const TeleopInput& in, TeleopOutput& out)
51 {
53 
54  switch (in.keycode)
55  {
56  case 'W':
57  case 'w':
60  break;
61 
62  case 'S':
63  case 's':
66  break;
67 
68  case 'A':
69  case 'a':
70  setpoint_steer_ang += 1.0 * M_PI / 180.0;
71  mrpt::keep_min(setpoint_steer_ang, veh_.getMaxSteeringAngle());
72  break;
73 
74  case 'D':
75  case 'd':
76  setpoint_steer_ang -= 1.0 * M_PI / 180.0;
77  mrpt::keep_max(setpoint_steer_ang, -veh_.getMaxSteeringAngle());
78  break;
79 
80  case ' ':
83  break;
84  };
85  out.append_gui_lines += "[Controller=" + string(class_name()) +
86  "] Teleop keys:\n"
87  "w/s=incr/decr torques.\n"
88  "a/d=left/right steering.\n"
89  "spacebar=stop.\n";
90  out.append_gui_lines += mrpt::format(
91  "setpoint: t=%.03f steer=%.03f deg\n", setpoint_wheel_torque_l,
92  setpoint_steer_ang * 180.0 / M_PI);
93 }
virtual void load_config(const rapidxml::xml_node< char > &node) override
std::map< std::string, TParamEntry > TParameterDefinitions
void parse_xmlnode_children_as_param(const rapidxml::xml_node< char > &xml_node, const TParameterDefinitions &params, const std::map< std::string, std::string > &variableNamesValues={}, const char *functionNameContext="", mrpt::system::COutputLogger *logger=nullptr)
Definition: xml_utils.cpp:224
virtual void teleop_interface(const TeleopInput &in, TeleopOutput &out) override
virtual void control_step(const DynamicsAckermann::TControllerInput &ci, DynamicsAckermann::TControllerOutput &co) override
#define M_PI
virtual void teleop_interface(const TeleopInput &in, TeleopOutput &out) override
double steer_ang
Equivalent Ackermann steering angle.


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