반응형
STM32 ARM에서 ROS와 연동하기(1, publisher) 에 이어서, Master PC로부터 메시지를 받아 동작하는 코드를 구현해본다.
Master PC에서 servo motor의 position 값을 메세지로 날려주면, microcontroller에서 메세지를 읽고 servo motor의 위치를 조절한다.
먼저, 지난 번과 동일하게 ros_lib_kinetic를 사용하며 추가로 servo 라이브러리를 받았다.
그리고 메세지의 데이터 타입은 float형을 사용한다.
publisher와 달리 subscriber는 callback 함수를 만들어서 사용한다는 차이가 있다. 메세지를 받아서 그에 맞게 적절한 행동을 취할 수 있게 된다.
전체 코드는 아래와 같다.
[ Code ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include "mbed.h" #include "Servo.h" #include <ros.h> #include <std_msgs/Float32.h> Servo myservo(PC_8); ros::NodeHandle nh; ///////////////////////////////////////////////////// DigitalOut led1(LED1); ////////////////////////////////////////////////////// void servo_cb(const std_msgs::Float32& cmd_msg) { myservo.position(cmd_msg.data); } ////////////////////////////////////////////////////// ros::Subscriber<std_msgs::Float32> sub("servo", servo_cb); ////////////////////////////////////////////////////// int main() { nh.initNode(); nh.subscribe(sub); nh.getHardware()->setBaud(57600); while(1) { led1 = !led1; nh.spinOnce(); } } | cs |
반응형
'STM32 > Mbed' 카테고리의 다른 글
Eigen Library 와 Simple Kalman Filter (0) | 2021.04.14 |
---|---|
EtherCAT통신하기 (1) | 2021.02.28 |
Mbed Studio X HAL Library (0) | 2020.11.03 |
BufferedSerial 과 Ticker (0) | 2020.09.19 |
STM32 ARM에서 ROS와 연동하기(1, publisher) (0) | 2020.09.13 |