Thomas Lew / Mbed 2 deprecated FreeFlyerROS

Dependencies:   mbed ros_lib_kinetic

Committer:
ambyld
Date:
Fri Jun 29 02:30:38 2018 +0000
Revision:
4:cae255669971
Parent:
1:40bdbe1a93b7
Child:
5:864709d3eb76
Enabled negative wheel speed measurement

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Knillinux 0:dd126a1080d3 1 #ifndef FREEFLYERHARDWARE_H
Knillinux 0:dd126a1080d3 2 #define FREEFLYERHARDWARE_H
Knillinux 0:dd126a1080d3 3
Knillinux 0:dd126a1080d3 4 #include "mbed.h"
Knillinux 0:dd126a1080d3 5 #include "math.h"
Knillinux 0:dd126a1080d3 6 #include <ros.h>
Knillinux 0:dd126a1080d3 7 #include <std_msgs/Float32.h>
Knillinux 0:dd126a1080d3 8 #include <std_msgs/Float32MultiArray.h>
Knillinux 0:dd126a1080d3 9 #include "PID.h"
Knillinux 0:dd126a1080d3 10 #include "QEI.h"
Knillinux 0:dd126a1080d3 11 #include "defines.h"
Knillinux 1:40bdbe1a93b7 12 #include "RGBA_LED.h"
Knillinux 0:dd126a1080d3 13 #include "utilities.h"
Knillinux 1:40bdbe1a93b7 14 #include <algorithm>
Knillinux 0:dd126a1080d3 15
Knillinux 0:dd126a1080d3 16 class FreeFlyerHardware
Knillinux 0:dd126a1080d3 17 {
Knillinux 0:dd126a1080d3 18 public:
Knillinux 0:dd126a1080d3 19
Knillinux 1:40bdbe1a93b7 20 FreeFlyerHardware(ros::NodeHandle &nh, I2C *i2c, DigitalOut *thruster_pinouts,
Knillinux 1:40bdbe1a93b7 21 DigitalOut *led_inv_out_en, bool debug_flag);
Knillinux 0:dd126a1080d3 22
Knillinux 0:dd126a1080d3 23 void updatePID();
Knillinux 0:dd126a1080d3 24 void commandThrusters(int *thruster_on_off_cmd); // switch to char for easy use?
Knillinux 0:dd126a1080d3 25 void stepThrusterPWM();
Knillinux 1:40bdbe1a93b7 26 void publishWheelMeas();
Knillinux 1:40bdbe1a93b7 27 void publishPIDParam();
Knillinux 0:dd126a1080d3 28
Knillinux 1:40bdbe1a93b7 29 float getPWMOut();
Knillinux 1:40bdbe1a93b7 30 void setPWMOut(float pwm_out);
Knillinux 1:40bdbe1a93b7 31 void setPIDSetpoint(float pid_setpoint);
Knillinux 1:40bdbe1a93b7 32
Knillinux 1:40bdbe1a93b7 33 float duty_cycle_cmd_; // Only for duty cycle command mode
Knillinux 1:40bdbe1a93b7 34 bool duty_cycle_command_mode_;
Knillinux 1:40bdbe1a93b7 35 bool feed_forward_mode_;
Knillinux 1:40bdbe1a93b7 36
Knillinux 1:40bdbe1a93b7 37 RGBA_LED *rgba_led_;
Knillinux 0:dd126a1080d3 38
ambyld 4:cae255669971 39 QEI *wheel_encoder_; // object to interact with encoder outputs
ambyld 4:cae255669971 40
Knillinux 0:dd126a1080d3 41 protected:
Knillinux 0:dd126a1080d3 42 int NUM_THRUSTERS;
Knillinux 0:dd126a1080d3 43
Knillinux 0:dd126a1080d3 44 PID *controller_;
Knillinux 0:dd126a1080d3 45
Knillinux 0:dd126a1080d3 46 int thruster_pwm_stop_[8]; // Number that the PWM count reaches before each thruster turns off
Knillinux 0:dd126a1080d3 47 int thruster_pwm_clock_;
Knillinux 0:dd126a1080d3 48
Knillinux 1:40bdbe1a93b7 49 float shaft_vel_meas_; // [RPM] Measured shaft speed
Knillinux 1:40bdbe1a93b7 50 float current_out_, voltage_out_, pwm_out_;
Knillinux 1:40bdbe1a93b7 51
Knillinux 1:40bdbe1a93b7 52 float slope_ff_, inter_ff_; // Feedforward slope, intercept terms
Knillinux 0:dd126a1080d3 53
Knillinux 0:dd126a1080d3 54 DigitalOut *thruster_pinouts_;
Knillinux 0:dd126a1080d3 55
Knillinux 0:dd126a1080d3 56 // ROS
Knillinux 0:dd126a1080d3 57 ros::NodeHandle *root_nh_;
Knillinux 0:dd126a1080d3 58
Knillinux 1:40bdbe1a93b7 59 ros::Publisher *velocity_sns_pub_, *setpoint_pub_, *acc_error_pub_;
Knillinux 1:40bdbe1a93b7 60 ros::Publisher *pid_param_pub_;
Knillinux 0:dd126a1080d3 61
Knillinux 1:40bdbe1a93b7 62 std_msgs::Float32 velocity_sns_msg_, setpoint_msg_, acc_error_msg_;
Knillinux 1:40bdbe1a93b7 63 std_msgs::Float32MultiArray pid_param_msg_;
Knillinux 0:dd126a1080d3 64
Knillinux 1:40bdbe1a93b7 65 ros::Subscriber<std_msgs::Float32, FreeFlyerHardware> *wheel_vel_cmd_sub_,
Knillinux 1:40bdbe1a93b7 66 *wheel_duty_cycle_cmd_sub_;
Knillinux 1:40bdbe1a93b7 67 ros::Subscriber<std_msgs::Float32MultiArray, FreeFlyerHardware> *thruster_duty_cmd_sub_,
Knillinux 1:40bdbe1a93b7 68 *wheel_pid_params_cmd_sub_;
Knillinux 0:dd126a1080d3 69
Knillinux 0:dd126a1080d3 70 void wheelVelCmdCallback(const std_msgs::Float32& msg);
Knillinux 1:40bdbe1a93b7 71 void wheelDutyCycleCmdCallback(const std_msgs::Float32& msg);
Knillinux 1:40bdbe1a93b7 72 void wheelPidParamsCmdCallback(const std_msgs::Float32MultiArray& msg);
Knillinux 0:dd126a1080d3 73 void thrusterDutyCmdCallback(const std_msgs::Float32MultiArray& msg);
Knillinux 0:dd126a1080d3 74
Knillinux 1:40bdbe1a93b7 75 bool debug_flag_;
Knillinux 0:dd126a1080d3 76 };
Knillinux 0:dd126a1080d3 77
Knillinux 0:dd126a1080d3 78
Knillinux 0:dd126a1080d3 79 #endif