Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed ros_lib_kinetic
FreeFlyerHardware.h@4:cae255669971, 2018-06-29 (annotated)
- 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?
User | Revision | Line number | New 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 |