For ros melodic
Dependencies: mbed MAIDROBO ros_lib_melodic
main.cpp
- Committer:
- tajiri1999
- Date:
- 2020-02-27
- Revision:
- 0:f9a1c6f13adc
File content as of revision 0:f9a1c6f13adc:
#include "mbed.h" #include "Motor.h" #include <ros.h> #include <std_msgs/String.h> #include <geometry_msgs/Twist.h> #define SPEED 100 //set speed target = 1m/s #define AXLE 2.0 // #define WHEELS_SIZE 0.05//5cm //Motor Motor motor( PA_12, PA_11, PA_5, PB_1, PB_2, PA_9, PB_15, PB_14, PB_13, PB_4, PA_8, PB_10); //Switch DigitalIn sw_start(PD_2); //program start switch DigitalIn sw_reset(PC_12); //prototype void MotorCmdCallback(const geometry_msgs::Twist& msg); //instance ros::NodeHandle nh; ros::Subscriber<geometry_msgs::Twist> sub("robot/cmd_vel",&MotorCmdCallback); int main() { //**************************************************************// ////////////////////////initialize setting//////////////////////// //**************************************************************// /*Ros setting*/ nh.getHardware()->setBaud(115200); nh.initNode(); nh.subscribe(sub); /*motor pwm frequency set*/ motor.Wheels(0,0); motor.setPwmPeriod(0.00005);//20kHz while (1) { //***************************************************************// ////////////////MAIN LOOP//////////// //***************************************************************// nh.spinOnce();//毎回呼び出しが必要 if(sw_start.read() == 0) { } //wait_ms(10); //motor.Wheels(0,0); } //return 0; } //**************************************************************// ///////////////motor function/////////////////////////////////// //**************************************************************// void MotorCmdCallback(const geometry_msgs::Twist& msg){ float v_l,v_r;//(m/s) v_l = ((float)msg.angular.z*AXLE-2.0*(float)msg.linear.x)/(-2.0);//(m/s) v_r = ((float)msg.angular.z*AXLE+2.0*(float)msg.linear.x)/2.0;//(m/s) //v_l /= (WHEELS_SIZE * 2 * 3.14);//Wheel_speed(1/s) //v_r /= (WHEELS_SIZE * 2 * 3.14);//Wheel_speed(1/s) v_l *= SPEED; v_r *= SPEED; motor.Wheels(v_l,v_r);//-100~100 }