openrover.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <ros/ros.h>
4 #include <ros/timer.h>
5 #include <fcntl.h>
6 #include <termios.h>
7 #include <vector>
8 #include <stdint.h>
9 #include <string>
10 #include <fstream>
11 
12 #include <geometry_msgs/Twist.h>
13 #include <std_msgs/Bool.h>
14 #include <std_msgs/Float32.h>
15 #include "rr_openrover_driver_msgs/RawRrOpenroverDriverFastRateData.h"
16 #include "rr_openrover_driver_msgs/RawRrOpenroverDriverMedRateData.h"
17 #include "rr_openrover_driver_msgs/RawRrOpenroverDriverSlowRateData.h"
18 #include "rr_openrover_driver_msgs/SmartBatteryStatus.h"
19 
22 
23 namespace openrover
24 {
25 class OpenRover
26 {
27 public:
29 
32 
34 
35  bool start();
36  bool openComs();
37  bool setupRobotParams();
39 
40  void robotDataFastCB(const ros::WallTimerEvent& e);
42  void robotDataSlowCB(const ros::WallTimerEvent& e);
43  void timeoutCB(const ros::WallTimerEvent& e);
44 
45  void serialManager();
46 
51  bool e_stop_on_;
52 
53 private:
54  // PID debug variables
55  std::string l_pid_csv_file_;
56  std::string r_pid_csv_file_;
57  std::ofstream l_fs_;
58  std::ofstream r_fs_;
59 
60  // ROS Parameters
61  std::string port_;
62  std::string drive_type_;
63 
64  float timeout_; // Default to neutral motor values after timeout seconds
65 
66  // ROS node handlers
69 
70  // ROS Timers
75 
76  // ROS Publisher and Subscribers
82 
88 
94 
95  // General Class variables
98  int robot_data_[250]; // stores all received data from robot
100  int motor_speeds_commanded_[3]; // stores most recent commanded motor speeds
101  const int LEFT_MOTOR_INDEX_;
106  double fast_rate_hz_; // update rate for encoders, 10Hz recommended
109 
110  // drive dependent parameters
117 
118  // velocity feedback
125 
130  float trim;
131  float total_weight_; // in kg
132  // int motor_speed_diff_max_; ---WIP
133  geometry_msgs::Twist cmd_vel_commanded_;
134  std::vector<unsigned char> serial_fast_buffer_;
135  std::vector<unsigned char> serial_medium_buffer_;
136  std::vector<unsigned char> serial_slow_buffer_;
137  std::vector<unsigned char> serial_fan_buffer_;
138 
139  // ROS Subscriber callback functions
140  void trimCB(const std_msgs::Float32::ConstPtr& msg);
141  void cmdVelCB(const geometry_msgs::Twist::ConstPtr& msg);
142  void fanSpeedCB(const std_msgs::Int32::ConstPtr& msg);
143  void eStopCB(const std_msgs::Bool::ConstPtr& msg);
144  void eStopResetCB(const std_msgs::Bool::ConstPtr& msg);
145 
146  // ROS Publish Functions (robot_data_[X] to ros topics)
147  void publishFastRateData();
148  void publishMedRateData();
149  void publishSlowRateData();
150  void publishOdometry(float left_vel, float right_vel);
151  void publishMotorSpeeds();
152  void publishWheelVels();
153 
154  // Serial Com Functions
155  int getParameterData(int parameter);
156  bool setParameterData(int param1, int param2);
157  void updateRobotData(int parameter);
158  bool sendCommand(int param1, int param2);
159  int readCommand();
160 };
161 
162 rr_openrover_driver_msgs::SmartBatteryStatus interpret_battery_status(uint16_t bits);
163 
164 } // namespace openrover
void robotDataMediumCB(const ros::WallTimerEvent &e)
void robotDataSlowCB(const ros::WallTimerEvent &e)
std::vector< unsigned char > serial_fast_buffer_
Definition: openrover.hpp:134
void robotDataFastCB(const ros::WallTimerEvent &e)
std::vector< unsigned char > serial_slow_buffer_
Definition: openrover.hpp:136
void eStopCB(const std_msgs::Bool::ConstPtr &msg)
ros::NodeHandle & nh_priv_
Definition: openrover.hpp:68
OdomControl left_controller_
Definition: openrover.hpp:30
const int LEFT_MOTOR_INDEX_
Definition: openrover.hpp:101
std::string r_pid_csv_file_
Definition: openrover.hpp:56
ros::Publisher is_charging_pub
Definition: openrover.hpp:79
void eStopResetCB(const std_msgs::Bool::ConstPtr &msg)
ros::Publisher battery_status_a_pub
Definition: openrover.hpp:86
int motor_speeds_commanded_[3]
Definition: openrover.hpp:100
std::string drive_type_
Definition: openrover.hpp:62
ros::WallTimer medium_timer
Definition: openrover.hpp:72
ros::Publisher slow_rate_pub
Definition: openrover.hpp:85
void updateRobotData(int parameter)
bool publish_fast_rate_values_
Definition: openrover.hpp:47
bool publish_slow_rate_values_
Definition: openrover.hpp:49
const int RIGHT_MOTOR_INDEX_
Definition: openrover.hpp:102
OdomControl right_controller_
Definition: openrover.hpp:31
ros::Publisher battery_status_b_pub
Definition: openrover.hpp:86
void timeoutCB(const ros::WallTimerEvent &e)
std::string l_pid_csv_file_
Definition: openrover.hpp:55
ros::Subscriber fan_speed_sub
Definition: openrover.hpp:91
std::ofstream l_fs_
Definition: openrover.hpp:57
ros::Publisher battery_state_of_charge_pub
Definition: openrover.hpp:87
ros::Publisher fast_rate_pub
Definition: openrover.hpp:83
ros::Subscriber trim_sub
Definition: openrover.hpp:89
void fanSpeedCB(const std_msgs::Int32::ConstPtr &msg)
std::vector< unsigned char > serial_fan_buffer_
Definition: openrover.hpp:137
ros::Subscriber e_stop_reset_sub
Definition: openrover.hpp:93
ros::Publisher vel_calc_pub
Definition: openrover.hpp:81
rr_openrover_driver_msgs::SmartBatteryStatus interpret_battery_status(uint16_t bits)
ros::NodeHandle & nh_
Definition: openrover.hpp:67
void trimCB(const std_msgs::Float32::ConstPtr &msg)
ros::Subscriber e_stop_sub
Definition: openrover.hpp:92
ros::WallTimer slow_timer
Definition: openrover.hpp:73
ros::Subscriber cmd_vel_sub
Definition: openrover.hpp:90
ros::Publisher medium_rate_pub
Definition: openrover.hpp:84
std::vector< unsigned char > serial_medium_buffer_
Definition: openrover.hpp:135
ros::WallTimer timeout_timer
Definition: openrover.hpp:74
ros::WallTimer fast_timer
Definition: openrover.hpp:71
bool sendCommand(int param1, int param2)
ros::Publisher odom_enc_pub
Definition: openrover.hpp:77
OpenRover(ros::NodeHandle &nh, ros::NodeHandle &nh_priv)
int getParameterData(int parameter)
bool setParameterData(int param1, int param2)
ros::Publisher motor_speeds_pub
Definition: openrover.hpp:80
void publishOdometry(float left_vel, float right_vel)
const int FLIPPER_MOTOR_INDEX_
Definition: openrover.hpp:103
geometry_msgs::Twist cmd_vel_commanded_
Definition: openrover.hpp:133
std::string port_
Definition: openrover.hpp:61
void cmdVelCB(const geometry_msgs::Twist::ConstPtr &msg)
ros::Publisher battery_state_pub
Definition: openrover.hpp:78
std::ofstream r_fs_
Definition: openrover.hpp:58


rr_openrover_driver
Author(s): Jack Kilian
autogenerated on Mon Feb 28 2022 23:43:54