VNH ROSSERIAL PUB+SUB
Dependencies: Motordriver QEI mbed ros_lib_kinetic
Fork of Test by
main.cpp@4:55882b6d5d9a, 2018-07-17 (annotated)
- Committer:
- apriljunio
- Date:
- Tue Jul 17 17:46:39 2018 +0000
- Revision:
- 4:55882b6d5d9a
- Parent:
- 3:9202fa788d3c
- Child:
- 5:586f5122b731
I'm done
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
apriljunio | 0:99538487421b | 1 | #include "mbed.h" |
apriljunio | 0:99538487421b | 2 | #include "motordriver.h" |
apriljunio | 0:99538487421b | 3 | #include "ros.h" |
apriljunio | 0:99538487421b | 4 | #include "geometry_msgs/Vector3.h" |
apriljunio | 2:82249618b6bc | 5 | #include "QEI.h" |
apriljunio | 3:9202fa788d3c | 6 | #include "geometry_msgs/Quaternion.h" |
apriljunio | 3:9202fa788d3c | 7 | #include "ros/time.h" |
apriljunio | 3:9202fa788d3c | 8 | //#include "std_msgs/String.h" |
apriljunio | 3:9202fa788d3c | 9 | |
apriljunio | 3:9202fa788d3c | 10 | ros:: NodeHandle nh; |
apriljunio | 0:99538487421b | 11 | |
apriljunio | 0:99538487421b | 12 | //pwm, fwd, rev, can brake |
apriljunio | 0:99538487421b | 13 | Motor motorLeft(D9,D5,D4, 1); |
apriljunio | 0:99538487421b | 14 | Motor motorRight(D10, D7, D8, 1); |
apriljunio | 0:99538487421b | 15 | |
apriljunio | 2:82249618b6bc | 16 | //PINA / PINB / INDEXPIN / PPR / ENCODING (X2 BY DEFAULT) |
apriljunio | 3:9202fa788d3c | 17 | QEI leftEncoder(D3, D12, NC, 378); |
apriljunio | 3:9202fa788d3c | 18 | QEI rightEncoder(D2, D13, NC, 378); |
apriljunio | 0:99538487421b | 19 | |
apriljunio | 0:99538487421b | 20 | void messageCb( const geometry_msgs::Vector3& msg) |
apriljunio | 0:99538487421b | 21 | { |
apriljunio | 1:5f2cb6bc0a8e | 22 | motorLeft.speed(msg.x); |
apriljunio | 1:5f2cb6bc0a8e | 23 | motorRight.speed(msg.y); |
apriljunio | 0:99538487421b | 24 | } |
apriljunio | 0:99538487421b | 25 | |
apriljunio | 3:9202fa788d3c | 26 | |
apriljunio | 3:9202fa788d3c | 27 | geometry_msgs::Quaternion wheelMsg; |
apriljunio | 3:9202fa788d3c | 28 | ros::Publisher wheelPub("/odom_msg", &wheelMsg); |
apriljunio | 3:9202fa788d3c | 29 | |
apriljunio | 3:9202fa788d3c | 30 | //std_msgs::String str_msg; |
apriljunio | 3:9202fa788d3c | 31 | //ros::Publisher chatter("chatter", &str_msg); |
apriljunio | 3:9202fa788d3c | 32 | |
apriljunio | 0:99538487421b | 33 | ros::Subscriber<geometry_msgs::Vector3> sub("/motor/command", &messageCb ); |
apriljunio | 0:99538487421b | 34 | |
apriljunio | 3:9202fa788d3c | 35 | int leftPulseA=0; |
apriljunio | 3:9202fa788d3c | 36 | int rightPulseA=0; |
apriljunio | 4:55882b6d5d9a | 37 | int lastLeftPulse=0; |
apriljunio | 4:55882b6d5d9a | 38 | int lastRightPulse=0; |
apriljunio | 3:9202fa788d3c | 39 | unsigned long rightTime; |
apriljunio | 3:9202fa788d3c | 40 | unsigned long leftTime; |
apriljunio | 4:55882b6d5d9a | 41 | unsigned long timeStamp; |
apriljunio | 3:9202fa788d3c | 42 | |
apriljunio | 2:82249618b6bc | 43 | |
apriljunio | 0:99538487421b | 44 | int main() { |
apriljunio | 0:99538487421b | 45 | |
apriljunio | 0:99538487421b | 46 | nh.initNode(); |
apriljunio | 0:99538487421b | 47 | nh.subscribe(sub); |
apriljunio | 3:9202fa788d3c | 48 | //nh.advertise(chatter); |
apriljunio | 3:9202fa788d3c | 49 | nh.advertise(wheelPub); |
apriljunio | 0:99538487421b | 50 | |
apriljunio | 0:99538487421b | 51 | while (true) { |
apriljunio | 2:82249618b6bc | 52 | |
apriljunio | 3:9202fa788d3c | 53 | leftPulseA=leftEncoder.getPulses(); |
apriljunio | 3:9202fa788d3c | 54 | rightPulseA = rightEncoder.getPulses(); |
apriljunio | 3:9202fa788d3c | 55 | leftTime = leftEncoder.getTime(); |
apriljunio | 3:9202fa788d3c | 56 | rightTime = rightEncoder.getTime(); |
apriljunio | 3:9202fa788d3c | 57 | |
apriljunio | 4:55882b6d5d9a | 58 | if(leftTime>rightTime) |
apriljunio | 4:55882b6d5d9a | 59 | timeStamp=leftTime; |
apriljunio | 4:55882b6d5d9a | 60 | else |
apriljunio | 4:55882b6d5d9a | 61 | timeStamp=rightTime; |
apriljunio | 4:55882b6d5d9a | 62 | |
apriljunio | 2:82249618b6bc | 63 | wheelMsg.x= leftPulseA; |
apriljunio | 2:82249618b6bc | 64 | wheelMsg.y = rightPulseA; |
apriljunio | 4:55882b6d5d9a | 65 | wheelMsg.z = timeStamp; |
apriljunio | 4:55882b6d5d9a | 66 | wheelMsg.w = 0.0; |
apriljunio | 4:55882b6d5d9a | 67 | |
apriljunio | 3:9202fa788d3c | 68 | |
apriljunio | 4:55882b6d5d9a | 69 | if((lastLeftPulse!=leftPulseA)||(lastRightPulse!=rightPulseA)){ |
apriljunio | 3:9202fa788d3c | 70 | wheelPub.publish(&wheelMsg); |
apriljunio | 4:55882b6d5d9a | 71 | lastLeftPulse=leftPulseA; |
apriljunio | 4:55882b6d5d9a | 72 | lastRightPulse=rightPulseA; |
apriljunio | 3:9202fa788d3c | 73 | } |
apriljunio | 3:9202fa788d3c | 74 | |
apriljunio | 2:82249618b6bc | 75 | nh.spinOnce(); |
apriljunio | 3:9202fa788d3c | 76 | wait_ms(1000); |
apriljunio | 0:99538487421b | 77 | } |
apriljunio | 0:99538487421b | 78 | } |
apriljunio | 0:99538487421b | 79 |