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


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