MRPT  1.9.9
CVehicleSimul_Holo.h
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | https://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2019, Individual contributors, see AUTHORS file |
6  | See: https://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See: https://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 #pragma once
10 
13 #include <mrpt/math/TTwist2D.h>
14 
15 namespace mrpt::kinematics
16 {
17 /** Kinematic simulator of a holonomic 2D robot capable of moving in any
18  * direction, with "blended"
19  * velocity profiles. See CVehicleSimul_Holo::sendVelCmd() for a description of
20  * the velocity commands in this kinematic model.
21  * \ingroup mrpt_kinematics_grp
22  */
24 {
25  public:
27 
29 
30  /** Sends a velocity cmd to the holonomic robot.
31  * \param[in] vel Linear speed (m/s)
32  * \param[in] dir Direction (rad) (In the odometry frame of reference)
33  * \param[in] ramp_time Blend the cmd during this period (seconds)
34  * \param[in] rot_speed Rotational speed while there is heading error and
35  * to this constant (rad/s)
36  */
37  void sendVelRampCmd(
38  double vel, double dir, double ramp_time, double rot_speed);
39 
40  void sendVelCmd(const CVehicleVelCmd& cmd_vel) override
41  {
42  const auto* cmd = dynamic_cast<const kinematic_cmd_t*>(&cmd_vel);
43  ASSERTMSG_(
44  cmd,
45  "Wrong vehicle kinematic class, expected `CVehicleVelCmd_Holo`");
47  cmd->vel,
48  cmd->dir_local + m_odometry.phi /* local to odometry dir */,
49  cmd->ramp_time, cmd->rot_speed);
50  }
52  {
54  }
55 
56  private:
57  /** @name Vel ramp cmds
58  * @{ */
59  struct TVelRampCmd
60  {
61  /** time when the cmd was issued. (<0: invalid, means there are no
62  * pending cmds to execute) */
63  double issue_time{-1.0};
66 
67  TVelRampCmd() = default;
68  };
69  /** the last cmd received from the user. */
71  /** @} */
72 
73  void internal_simulControlStep(const double dt) override;
74  void internal_clear() override;
75 };
76 } // namespace mrpt::kinematics
CVehicleVelCmd::Ptr getVelCmdType() const override
Gets an empty velocity command object that can be queried to find out the number of velcmd components...
This class can be used to simulate the kinematics and dynamics of a differential driven planar mobile...
void sendVelRampCmd(double vel, double dir, double ramp_time, double rot_speed)
Sends a velocity cmd to the holonomic robot.
void internal_simulControlStep(const double dt) override
Virtual base for velocity commands of different kinematic models of planar mobile robot...
2D twist: 2D velocity vector (vx,vy) + planar angular velocity (omega)
Definition: TTwist2D.h:19
void sendVelCmd(const CVehicleVelCmd &cmd_vel) override
Sends a velocity command to the robot.
double issue_time
time when the cmd was issued.
#define ASSERTMSG_(f, __ERROR_MSG)
Defines an assertion mechanism.
Definition: exceptions.h:108
Kinematic simulator of a holonomic 2D robot capable of moving in any direction, with "blended" veloci...
void internal_clear() override
Resets all pending cmds.
std::shared_ptr< CVehicleVelCmd > Ptr
TVelRampCmd m_vel_ramp_cmd
the last cmd received from the user.
double phi
Orientation (rads)
Definition: TPose2D.h:32



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 4363012a5 Tue Nov 19 10:55:26 2019 +0100 at mar nov 19 11:00:13 CET 2019