Ubuntu 16.04下arduino示例ros_lib例程Blink
介绍:
- 该文主要讲述如何通过rosserial创建subscribers(订阅者),点亮Arduino开发板上的LED
- 使用例程为应用(一)中Arduino IDE 文件->示例->ros_lib->Blink
示例中的代码如下:
/*
* rosserial Subscriber Example
* Blinks an LED on callback
*/
#include <ros.h> //包含了标准ROS类的声明
#include <std_msgs/Empty.h> //包含消息头文件
ros::NodeHandle nh; /*(节点句柄)对象是你的程序用于和ROS系统交互的主要机制。创建此对象会将你的程序注册为ROS节点管理器的节点。最简单的方法就是在整个程序中只创建一个NodeHandle对象*/
void messageCb( const std_msgs::Empty& toggle_msg) /*定义回调函数messageCb,且形式参数为常量消息引用值,消息类型是std_msgs::Empty,消息名称是toggle_msg*/
{
digitalWrite(13, HIGH-digitalRead(13)); // blink the led
}
ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );/*实例化一个订阅,且含有两个参数,主题名toggle_led与回调函数,且主题类型为std_msgs::Empty*/
void setup() //Arduino的Setup函数,用于初始化ROS节点处理,并宣告所有的发布或订阅
{
pinMode(13, OUTPUT);
nh.initNode();
nh.subscribe(sub);
}
void loop() //在Arduino的loop函数,定义发布的内容,并调用nh.spinOnce(),这样所有的ROS回调函数就会被处理。
{
nh.spinOnce();
delay(1);
}
代码下载:
- 将arduino开发板通过串口与电脑连接,点击Arduino IDE 文件->下载
运行代码:
1.打开终端,输入如下:
$ roscore
2.打开另一个终端,输入如下:
$ rosrun rosserial_python serial_node.py /dev/ttyACM0
或
$ rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0
3.3.打开另一个终端,输入如下代码,发布主题toggle_led,点亮Arduino板上的LED灯
$ rostopic pub toggle_led std_msgs/Empty --once
或
rostopic pub -r 1 /toggle_led std_msgs/Empty
- PS:其中rostopic pub为ros的发布命令。
- rostopic pub -r rate-in-hz topic-name message-type message-content
其中-r rate-in-hz 可以用 -1代替表示发送一次
上述内容为本人参考下方链接并结合自身操作所遇问题,对前者进行了相关补充,由于编者水平有限,如有错误,还请指出。