用rosserial创建一个subscriber
来源:互联网 发布:热电材料 知乎 编辑:程序博客网 时间:2024/06/07 03:47
在前面的一篇博客中,我们已经使用arduino创建了一个publisher节点,接下来将会创建一个subscriber,打开arduino IDE:
下面看一下代码解释:
像前面的例子一样,我们需要包括ros.h,同样需要包括消息的头文件。
上面的一行代码创建了一个节点句柄,这允许我们的程序能够创建发布者和订阅者,节点句柄同样和串口通信有关系。
我们为subscriber创建了一个回调函数,这个函数必须使用一个消息的常引用作为一个参数。在我们的回调函数messageCb中,消息的类型是std_msgs::Empty,消息的名字是toggle_msg。
上面代码使我们在话题toggle_led上建立了一个subscriber,并且类型是std_msgs::Empty。在使用Subscriber时,必须用上面<std_msgs::Empty>的这种形式,说明消息的类型。它的两个参数是它将要订阅的话题和所使用回调函数。
在arduino的setup函数中,你需要去初始化ros的节点句柄,告知所有将要订阅的话题,订阅你想收听的任何话题。
最后在loop函数中,我们调用了ros::spinOnce(),在这个函数中,所有ROS通信的回调函数都被处理。在loop函数中,我们不许要去做任何其它的处理。因为这个函数ros::spinOnce()将会传递消息给subscriber的回调函数。
接着运行rosserial客户端应用,它把你的arduino消息转发到ROS系统的其它部分:
最后你可以输入一下命令来查看你的arduino板子上的LED灯的变化情况:
上述命令运行一次后LED灯亮了,在运行一下次又灭了,如此反复的运行,挥发生相应的变化。
- arduino
选择File->Examples->ros_lib->Blink,就可以打开一个示例程序,代码如下:
- /*
- * 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);
- }
下面看一下代码解释:
- #include <ros.h>
- #include <std_msgs/Empty.h>
像前面的例子一样,我们需要包括ros.h,同样需要包括消息的头文件。
- ros::NodeHandle nh;
上面的一行代码创建了一个节点句柄,这允许我们的程序能够创建发布者和订阅者,节点句柄同样和串口通信有关系。
- void messageCb( const std_msgs::Empty& toggle_msg){
- digitalWrite(13, HIGH-digitalRead(13)); // blink the led
- }
我们为subscriber创建了一个回调函数,这个函数必须使用一个消息的常引用作为一个参数。在我们的回调函数messageCb中,消息的类型是std_msgs::Empty,消息的名字是toggle_msg。
在回调函数中,我们可以引用toggle_msg,但是因为它是空的,所以就没有必要了。当收到一次消息时,我们让aduino板子上的LED闪烁一下。
- ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );
上面代码使我们在话题toggle_led上建立了一个subscriber,并且类型是std_msgs::Empty。在使用Subscriber时,必须用上面<std_msgs::Empty>的这种形式,说明消息的类型。它的两个参数是它将要订阅的话题和所使用回调函数。
- void setup()
- {
- pinMode(13, OUTPUT);
- nh.initNode();
- nh.subscribe(sub);
- }
在arduino的setup函数中,你需要去初始化ros的节点句柄,告知所有将要订阅的话题,订阅你想收听的任何话题。
- void loop()
- {
- nh.spinOnce();
- delay(1);
- }
最后在loop函数中,我们调用了ros::spinOnce(),在这个函数中,所有ROS通信的回调函数都被处理。在loop函数中,我们不许要去做任何其它的处理。因为这个函数ros::spinOnce()将会传递消息给subscriber的回调函数。
在arduino IDE中点击upload按钮,运行程序。接着运行roscore:
- roscore
接着运行rosserial客户端应用,它把你的arduino消息转发到ROS系统的其它部分:
- rosrun rosserial_python serial_node.py /dev/ttyACM0
最后你可以输入一下命令来查看你的arduino板子上的LED灯的变化情况:
- rostopic pub toggle_led std_msgs/Empty --once
上述命令运行一次后LED灯亮了,在运行一下次又灭了,如此反复的运行,挥发生相应的变化。
- 用rosserial创建一个subscriber
- ROS的学习(十九)用rosserial创建一个subscriber
- 机器人操作系统(ROS)教程21:用rosserial创建一个subscriber
- 使用rosserial创建一个publisher
- ROS的学习(十八)使用rosserial创建一个publisher
- rosserial中的Publisher和Subscriber中的编程步骤
- 机器人操作系统(ROS)教程20:使用rosserial创建一个publisher
- ROS的学习(二十)rosserial中的Publisher和Subscriber中的编程步骤
- Rxjava--Subscriber创建流程(观察者)
- (十)解释创建的简单publisher和subscriber
- 使用rosserial把Arduino作为ROS一个Node遇到的一个问题
- rosserial for hydro
- rosserial通信协议简介
- 创建ROS消息发布器(publisher)、订阅器(subscriber)
- 8、ROS使用C++编写一个简单的Publisher和Subscriber
- ROS(二)自己动手写一个简单的发布(Publisher)、订阅(Subscriber)程序
- rosserial客户端库之rosserial_windows
- ROS的初步学习(五)--自己写一个简单的发布(Publisher)、订阅(Subscriber)程序
- 跨Linux和Windows的C编程杂记
- Framework概述
- 得到一个BitMap对象
- psql 小结
- libmemcached的头文件
- 用rosserial创建一个subscriber
- OCP-1Z0-052-V9.02-115题
- oralce从第一位不是0的数据开始截取字符串
- c++入门<一>
- ORACLE删除正在链接的用户
- rosserial中的Publisher和Subscriber中的编程步骤
- Matlab中的“prod”函数
- OCP-1Z0-052-V9.02-201题
- 设计模式--模版方法--UML