ControllerBase.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 <mvsim/basic_types.h>
13 
14 #include <optional>
15 
16 namespace mvsim
17 {
23 {
24  public:
25  struct TeleopInput
26  {
27  int keycode = 0;
28  std::optional<TJoyStickEvent> js;
29 
30  TeleopInput() = default;
31  };
32 
33  struct TeleopOutput
34  {
35  std::string append_gui_lines;
36  };
37 
38  virtual void teleop_interface(
39  [[maybe_unused]] const TeleopInput& in, [[maybe_unused]] TeleopOutput& out)
40  {
41  /*default: do nothing*/
42  }
43 
51  virtual bool setTwistCommand([[maybe_unused]] const mrpt::math::TTwist2D& t)
52  {
53  return false; /* default: no */
54  }
55 };
56 
58 template <class VEH_DYNAMICS>
60 {
61  public:
62  using Ptr = std::shared_ptr<ControllerBaseTempl<VEH_DYNAMICS>>;
63 
64  ControllerBaseTempl(VEH_DYNAMICS& veh) : veh_(veh) {}
65  virtual ~ControllerBaseTempl() {}
67  virtual void teleop_interface(const TeleopInput& in, TeleopOutput& out) override
68  {
69  /*default: handle logging events*/
70  static bool isRecording = false;
71  switch (in.keycode)
72  {
73  case 'l':
74  case 'L':
75  {
76  isRecording = !isRecording;
77  setLogRecording(isRecording);
78  }
79  break;
80  case 'c':
81  case 'C':
82  {
83  clearLogs();
84  }
85  break;
86 
87  case 'n':
88  case 'N':
89  {
90  newLogSession();
91  }
92  break;
93 
94  default:
95  break;
96  }
97 
98  out.append_gui_lines += std::string(
99  "Toggle logging [L]. Clear logs[C]. New log session [N]. "
100  "Now ") +
101  std::string(isRecording ? "logging" : "not logging") +
102  std::string("\n");
103  }
104 
107  virtual void control_step(
108  const typename VEH_DYNAMICS::TControllerInput& ci,
109  typename VEH_DYNAMICS::TControllerOutput& co) = 0;
110 
111  virtual void on_post_step([[maybe_unused]] const TSimulContext& context) {}
112 
114  virtual void load_config( //
115  [[maybe_unused]] const rapidxml::xml_node<char>& node)
116  { /*default: do nothing*/
117  }
118 
119  virtual void setLogRecording(bool recording) { veh_.setRecording(recording); }
120  virtual void clearLogs() { veh_.clearLogs(); }
121  virtual void newLogSession() { veh_.newLogSession(); }
122 
123  protected:
124  VEH_DYNAMICS& veh_;
125 };
126 } // namespace mvsim
mvsim
Definition: Client.h:21
mvsim::ControllerBaseTempl::teleop_interface
virtual void teleop_interface(const TeleopInput &in, TeleopOutput &out) override
Definition: ControllerBase.h:67
basic_types.h
mvsim::ControllerBaseInterface::TeleopOutput::append_gui_lines
std::string append_gui_lines
Definition: ControllerBase.h:35
mvsim::ControllerBaseTempl::control_step
virtual void control_step(const typename VEH_DYNAMICS::TControllerInput &ci, typename VEH_DYNAMICS::TControllerOutput &co)=0
mvsim::ControllerBaseInterface::setTwistCommand
virtual bool setTwistCommand([[maybe_unused]] const mrpt::math::TTwist2D &t)
Definition: ControllerBase.h:51
mvsim::ControllerBaseInterface::TeleopInput::TeleopInput
TeleopInput()=default
mvsim::ControllerBaseTempl::Ptr
std::shared_ptr< ControllerBaseTempl< VEH_DYNAMICS > > Ptr
Definition: ControllerBase.h:62
mvsim::ControllerBaseTempl::~ControllerBaseTempl
virtual ~ControllerBaseTempl()
Definition: ControllerBase.h:65
mvsim::ControllerBaseTempl
Definition: ControllerBase.h:59
mvsim::ControllerBaseTempl::newLogSession
virtual void newLogSession()
Definition: ControllerBase.h:121
mvsim::TSimulContext
Definition: basic_types.h:58
mvsim::ControllerBaseTempl::ControllerBaseTempl
ControllerBaseTempl(VEH_DYNAMICS &veh)
Definition: ControllerBase.h:64
mvsim::ControllerBaseInterface::TeleopOutput
Definition: ControllerBase.h:33
rapidxml::xml_node< char >
mvsim::ControllerBaseInterface
Definition: ControllerBase.h:22
mvsim::ControllerBaseTempl::load_config
virtual void load_config([[maybe_unused]] const rapidxml::xml_node< char > &node)
Definition: ControllerBase.h:114
mvsim::ControllerBaseInterface::teleop_interface
virtual void teleop_interface([[maybe_unused]] const TeleopInput &in, [[maybe_unused]] TeleopOutput &out)
Definition: ControllerBase.h:38
mvsim::ControllerBaseTempl::clearLogs
virtual void clearLogs()
Definition: ControllerBase.h:120
mvsim::ControllerBaseInterface::TeleopInput
Definition: ControllerBase.h:25
mvsim::ControllerBaseTempl::veh_
VEH_DYNAMICS & veh_
Definition: ControllerBase.h:124
mvsim::ControllerBaseInterface::TeleopInput::js
std::optional< TJoyStickEvent > js
Definition: ControllerBase.h:28
mvsim::ControllerBaseInterface::TeleopInput::keycode
int keycode
Definition: ControllerBase.h:27
mvsim::ControllerBaseTempl::on_post_step
virtual void on_post_step([[maybe_unused]] const TSimulContext &context)
Definition: ControllerBase.h:111
mvsim::ControllerBaseTempl::setLogRecording
virtual void setLogRecording(bool recording)
Definition: ControllerBase.h:119


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