参考:http://wiki.ros.org/rosserial_arduino/Tutorials/Hello%20World
我们将以在我们的Arduino上创建一个“Hello World”程序来开始我们的rosserial探索之旅。通过选择Arduino examples菜单的ros_lib->HelloWorld,可以获得代码。
代码如下:
/*
* rosserial Publisher Example
* Prints "hello world!"
*/
#include <ros.h>
#include <std_msgs/String.h>
ros::NodeHandle nh;
std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);
char hello[13] = "hello world!";
void setup()
{
nh.initNode();
nh.advertise(chatter);
}
void loop(){
str_msg.data = hello;
chatter.publish( &str_msg );
nh.spinOnce();
delay(1000);
}
代码说明:
#include <ros.h>
#include <std_msgs/String.h>
作为每一个ROS Arduino程序的一部分,需要包含ros.h头文件和会使用到的任何信息的头文件。为了在代码中使用rosserial库,必须首先放置
#include <ros.h>
先于包含任何其他和ROS相关的头文件,如:
#include <std_msgs/String.h>
否则,Arduino IDE不能定位到它们。
ros::NodeHandle nh;
接着我们将实例化一个节点句柄,允许我们的程序创建发布者和订阅者。注意,节点需要通过串口通信。
std_msgs::String str_msg;
ros::Publisher chatter(“chatter”,&str_msg);
我们需要实例化我们将会使用到的发布者和订阅者。这里我们实例化主题名为“chatter”的发布者。发布者的第二个参数是用于发布的消息实例的引用。
void setup()
{
nh.initNode();
nh.advertise(chatter);
}
在Arduino setup()函数里,需要初始化ROS节点句柄,广播将要发布的任何主题,订阅你想监听的任何主题。
void loop()
{
str_msg.data = hello;
chatter.publish( &str_msg );
nh.spinOnce();
delay(1000);
}
最后,在loop函数里,节点发布“Hello World”,并调用spinOnce(),在这个函数里处理所有的ROS通信回掉。
上传代码到Arduino里。这与上传其他任何sketch相同。
运行代码:
现在,在新的terminal窗口,启动roscore
roscore
接着,在新的窗口运行rosserial客户端程序,将你的Arduino消息传到ROS。Python需要安装串口模块,如果没有安装的话,使用下面的命令:
sudo apt-get install python-serial
可能需要执行下面的指令:
source ~/<ws>/install/setup.bash
为你安装rosserial的工作空间
确保使用正确的串口:
rosrun rosserial_python serial_node.py/dev/ttyACM0

最后,启动一个窗口并输入:
rostopic echo chatter
