几周前,我开始编写一系列教程,以简化ROS中的初学者的工作。第一个教程是关于 发布者节点的模板,第二个教程是关于 ROS 中的订户节点,第三个教程很简单 ROS 的Python订阅者和发布者,第四个模板是关于 发布者使用rosserial.
今天,我继续使用Arduino开发板上的rosserial为ROS订阅者提供模板的系列教程。另外,我’将基于以下模板编写一个订户节点。
在下面,您将在Arduino板上找到使用rosserial的ROS订阅者的模板。要在Arduino上使用rosserial编写您自己的订阅者,请将模板复制到Arduino IDE,删除您输入的信息’需要并替换大写字母中的文本。
ROS 和Arduino
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 | #包括<ros.h> #包括<std_msgs / THE_TYPE_OF_THE_MESSAGE_YOU_SUBSCRIBER> //创建ros节点nh。该节点将用于发布到Arduino 罗斯 :: 节点句柄 h ; 虚空 messageCb ( const std_msgs :: MESSAGE_TYPE & 味精 ) { do_domething 与 味精 . 数据 ; } 罗斯 :: 订户 < std_msgs :: MESSAGE_TYPE > 子 (“ THE_TOPIC_THAT_SUBSCRIBER”, &messageCb); 虚空 设定 () { h . 初始化节点 (); h . 订阅 ( 子 ); } 虚空 循环 () { h . 自旋 (); 延迟 (10); } |
我使用上面的模板编写了一个ROS节点,该节点将订阅一个生成随机数的节点。
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 | #包括<ros.h> #包括<std_msgs/Int32.h> 罗斯 :: 节点句柄 h ; 浮动 变种 ; 虚空 messageCb ( const std_msgs :: Int32 &msg) { 变种 = 味精 . 数据 ; 如果 ( 变种 > 2000) digitalWrite (13, 高 ); //使LED闪烁 其他 digitalWrite (13, 低 ); //关闭LED } 罗斯 :: 订户 < std_msgs :: Int32> 子 ( “ rand_no” , &messageCb); 虚空 设定 () { pinMode (13, 输出值 ); h . 初始化节点 (); h . 订阅 ( 子 ); } 虚空 循环 () { h . 自旋 (); 延迟 (200); } |
如何运行节点
步骤1:打开一个新的终端,键入 罗斯科尔 然后按Enter键;
步骤2:打开一个新的终端并运行该节点以发布消息;
步骤3:打开另一个终端,并通过键入以下命令来启动订户节点:
1 | 罗斯伦 罗斯 serial_python serial_node . py / 开发者 / ttyACM0 |
你好
您知道如何将此模板用于多个回调。我试图以与您类似的方式设置2个回调。我只能读出第一个。
你好
本教程可能会启发您为多个回调编写脚本: //www.whiterabbitchase.com/template-for-a-simple-ros-subscriber-and-publisher-in-python/