clober_serial.hpp
Go to the documentation of this file.
1 #ifndef __CLOBER_SERIAL_H__
2 #define __CLOBER_SERIAL_H__
3 
4 #include <chrono>
5 #include <string>
6 #include <bitset>
7 #include <boost/lexical_cast.hpp>
8 #include <boost/algorithm/string.hpp>
9 #include <thread>
10 #include <memory>
11 #include <serial/serial.h>
12 #include "clober_utils.hpp"
13 
14 #include <ros/ros.h>
15 #include <geometry_msgs/Twist.h>
16 #include <geometry_msgs/TransformStamped.h>
17 #include <nav_msgs/Odometry.h>
18 #include <clober_msgs/Feedback.h>
19 
20 #include <tf2/LinearMath/Quaternion.h>
21 #include <tf2_ros/transform_broadcaster.h>
22 
23 
24 using namespace std::chrono_literals;
25 using namespace std;
26 using duration = std::chrono::nanoseconds;
27 
28 
29 const string eol("\r");
30 const size_t max_line_length(128);
31 
32 struct Encoder{
33  int ppr;
34 };
35 
38  float temperature;
41  float current_12v;
42  float current_24v;
43  vector<string> fault_flags;
44 };
45 
46 struct MotorState{
47  float speed;
48  float rpm;
49  float position_rad;
52  float current;
53 };
54 
56  float WIDTH;
57  float WheelRadius;
58  float MAX_SPEED;
59  float MAX_RPM;
64 };
65 
66 struct MotorCommand{
67  float linearVel;
68  float angularVel;
69 };
70 
71 
73  public:
74  CloberSerial();
75  ~CloberSerial();
76 
77  void cmd_vel_callback(const geometry_msgs::Twist::ConstPtr &msg);
78  void updatePose();
79  void updatePose(double dL, double dR);
80 
81  void on_motor_move(MotorCommand cmd);
82 
83  void faultFlags(const uint16_t flags);
84 
85  void SetValues();
86  pair<float,float> toWheelSpeed(float v, float w);
87  void toVW(float l_speed, float r_speed);
88 
89  float limitMaxSpeed(float speed);
90 
91  void read_serial(int ms);
92  void parse();
93 
94  void publishOdom();
95  void publishFeedback();
96  void publish_loop(int hz);
97 
98  void sendRPM(pair<int,int> channel, pair<float,float> rpm);
99  void sendStop(pair<int,int> channel);
100 
101  void sendHeardBeat();
102  void restartScript();
103 
104 
105  private:
107 
108  std::shared_ptr<serial::Serial> serial_;
109  std::string port_;
110  int32_t baudrate_;
111  int timeout_;
113 
114  // switch //
117 
118  // publisher //
121  tf2_ros::TransformBroadcaster tf_broadcaster_;
122 
123  // Subscriber //
125 
127 
128  double odom_freq_;
130 
131  std::string odom_frame_parent_;
132  std::string odom_frame_child_;
133 
135 
136  float linearVel_;
137  float angularVel_;
138 
139  double posX_;
140  double posY_;
141  float heading_;
142 
143  bool trigger_;
144 
145  shared_ptr<thread> readThread_;
146  shared_ptr<thread> publishThread_;
147 
149 
151 };
152 
153 #endif //__CLOBER_SERIAL_H__
CloberSerial::odom_freq_
double odom_freq_
Definition: clober_serial.hpp:128
Encoder::ppr
int ppr
Definition: clober_serial.hpp:33
VehicleConfig::encoder
Encoder encoder
Definition: clober_serial.hpp:60
MotorState::position_rad
float position_rad
Definition: clober_serial.hpp:49
ros::Publisher
ControllerState::emergency_stop
bool emergency_stop
Definition: clober_serial.hpp:37
CloberSerial::odom_frame_parent_
std::string odom_frame_parent_
Definition: clober_serial.hpp:131
VehicleConfig
Definition: clober_serial.hpp:55
CloberSerial::serial_
std::shared_ptr< serial::Serial > serial_
Definition: clober_serial.hpp:108
CloberSerial::tf_broadcaster_
tf2_ros::TransformBroadcaster tf_broadcaster_
Definition: clober_serial.hpp:121
ControllerState::temperature
float temperature
Definition: clober_serial.hpp:38
ros.h
CloberSerial::odom_frame_child_
std::string odom_frame_child_
Definition: clober_serial.hpp:132
CloberSerial::port_
std::string port_
Definition: clober_serial.hpp:109
CloberSerial::control_frequency_
float control_frequency_
Definition: clober_serial.hpp:112
CloberSerial::cmd_vel_sub_
ros::Subscriber cmd_vel_sub_
Definition: clober_serial.hpp:124
CloberSerial::odom_mode_
int odom_mode_
Definition: clober_serial.hpp:150
VehicleConfig::controller_state
ControllerState controller_state
Definition: clober_serial.hpp:63
CloberSerial::publishThread_
shared_ptr< thread > publishThread_
Definition: clober_serial.hpp:146
CloberUtils
Definition: clober_utils.hpp:6
CloberSerial::utils_
CloberUtils utils_
Definition: clober_serial.hpp:148
CloberSerial
Definition: clober_serial.hpp:72
eol
const string eol("\r")
CloberSerial::feedback_pub_
ros::Publisher feedback_pub_
Definition: clober_serial.hpp:120
CloberSerial::trigger_
bool trigger_
Definition: clober_serial.hpp:143
CloberSerial::posY_
double posY_
Definition: clober_serial.hpp:140
CloberSerial::timeout_
int timeout_
Definition: clober_serial.hpp:111
MotorState::rpm
float rpm
Definition: clober_serial.hpp:48
VehicleConfig::WheelRadius
float WheelRadius
Definition: clober_serial.hpp:57
duration
std::chrono::nanoseconds duration
Definition: clober_serial.hpp:26
max_line_length
const size_t max_line_length(128)
CloberSerial::motor_cmd_
MotorCommand motor_cmd_
Definition: clober_serial.hpp:126
CloberSerial::timestamp_
ros::Time timestamp_
Definition: clober_serial.hpp:106
MotorState::speed
float speed
Definition: clober_serial.hpp:47
CloberSerial::cmd_vel_timeout_
double cmd_vel_timeout_
Definition: clober_serial.hpp:129
CloberSerial::publish_tf_
bool publish_tf_
Definition: clober_serial.hpp:116
ControllerState::fault_flags
vector< string > fault_flags
Definition: clober_serial.hpp:43
CloberSerial::odom_pub_
ros::Publisher odom_pub_
Definition: clober_serial.hpp:119
MotorState
Definition: clober_serial.hpp:46
CloberSerial::config_
VehicleConfig config_
Definition: clober_serial.hpp:134
ControllerState::battery_voltage
float battery_voltage
Definition: clober_serial.hpp:39
clober_utils.hpp
MotorState::position_meter_prev
float position_meter_prev
Definition: clober_serial.hpp:50
Encoder
Definition: clober_serial.hpp:32
VehicleConfig::WIDTH
float WIDTH
Definition: clober_serial.hpp:56
ControllerState::current_12v
float current_12v
Definition: clober_serial.hpp:41
VehicleConfig::left_motor
MotorState left_motor
Definition: clober_serial.hpp:61
serial.h
VehicleConfig::MAX_SPEED
float MAX_SPEED
Definition: clober_serial.hpp:58
MotorCommand::linearVel
float linearVel
Definition: clober_serial.hpp:67
VehicleConfig::MAX_RPM
float MAX_RPM
Definition: clober_serial.hpp:59
CloberSerial::heading_
float heading_
Definition: clober_serial.hpp:141
ros::Time
CloberSerial::readThread_
shared_ptr< thread > readThread_
Definition: clober_serial.hpp:145
std
ControllerState
Definition: clober_serial.hpp:36
CloberSerial::baudrate_
int32_t baudrate_
Definition: clober_serial.hpp:110
CloberSerial::linearVel_
float linearVel_
Definition: clober_serial.hpp:136
CloberSerial::cmd_vel_timeout_switch_
bool cmd_vel_timeout_switch_
Definition: clober_serial.hpp:115
ControllerState::current_24v
float current_24v
Definition: clober_serial.hpp:42
CloberSerial::posX_
double posX_
Definition: clober_serial.hpp:139
MotorCommand::angularVel
float angularVel
Definition: clober_serial.hpp:68
MotorCommand
Definition: clober_serial.hpp:66
VehicleConfig::right_motor
MotorState right_motor
Definition: clober_serial.hpp:62
MotorState::position_meter_curr
float position_meter_curr
Definition: clober_serial.hpp:51
ControllerState::charging_voltage
float charging_voltage
Definition: clober_serial.hpp:40
ros::Subscriber
MotorState::current
float current
Definition: clober_serial.hpp:52
CloberSerial::angularVel_
float angularVel_
Definition: clober_serial.hpp:137


clober_serial
Author(s):
autogenerated on Wed Mar 2 2022 00:01:24