链接: http://www.arduino.cn/thread-12614-1-1.html
在前面的一节中,我们已经使用arduino创建了一个publisher节点,接下来将会用arduino来创建一个subscriber,接收电脑传去的信息并做出相应的反应。首先打开arduino IDE:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
/*
* rosserial Subscriber Example
* Blinks an LED on callback
*/
#include <ros.h>
#include <std_msgs/Empty.h>
ros::NodeHandle nh;
void
messageCb(
const
std_msgs::Empty& toggle_msg){
digitalWrite(13, HIGH-digitalRead(13));
// blink the led
}
ros::Subscriber<std_msgs::Empty> sub(
"toggle_led"
, &messageCb );
void
setup()
{
pinMode(13, OUTPUT);
nh.initNode();
nh.subscribe(sub);
}
void
loop()
{
nh.spinOnce();
delay(1);
}
|
在回调函数中,我们可以引用toggle_msg,但是因为它是空的,所以就没有必要了。当收到一次消息时,我们让aduino板子上的LED闪烁一下。
上面代码使我们在话题toggle_led上建立了一个subscriber,并且类型是std_msgs::Empty。在使用Subscriber时,必须用上面<std_msgs::Empty>的这种形式,说明消息的类型。它的两个参数是它将要订阅的话题和所使用回调函数。
在这里,把接收与回调函数相联系。
和前面的一样,在arduino的setup函数中,你需要去初始化ros的节点句柄,告知所有将要订阅的话题,订阅你想收听的任何话题。
最后在loop函数中,我们调用了ros::spinOnce(),在这个函数中,所有ROS通信的回调函数都被处理。在loop函数中,我们不需要去做任何其它的处理。因为这个函数ros::spinOnce()将会传递消息给subscriber的回调函数。
在arduino IDE中点击upload按钮,运行程序。接着运行roscore: