机器人操作系统(ROS)教程20:使用rosserial创建一个publisher

在arduino开发人群中,经常把源代码称为“sketch”。本节我们将用上arduino来进行ROS开发。打开一个终端,启动arduino:
arduino  

将arduino开发板连接到电脑的usb口,在arduino IDE中进行设置。选择Tools->Board,选择你所使用的arduino开发板的类型,笔者所使用的arduino开发板是arduino UNO。设置好开发板之后,继续选择Tools->Serial Port->/dev/ttyACM0。在这个设置过程中汇出先一个问题,就是Serial Port不能选择,这是因为在Ubuntu下,默认按装的软件brltty 与arduino IDE有冲突。只需要将之进行卸载即可:
sudo apt-get remove brltty


之后重启虚拟机,就可以选择了。
如果你可以选择 Serial Port,则不用管。(我的就是可以直接选择 Serial Port的 )。
设置完成以后,在arduino IDE中,选择File->Examples->ros_lib->HelloWorld,就打开了如下的代码:
[C]  纯文本查看  复制代码
?
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 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和其它可能会用到的消息的头文件。


  • ros::NodeHandle nh;  

  创建了一个节点的句柄,它允许我们用来创建发布者和订阅者。这个节点的句柄同样与串口通信有关。


  • std_msgs::String str_msg;  
  • ros:ublisher chatter("chatter", &str_msg);  

我们需要创建一个将要使用的发布者和订阅者。在上面的两行代码中,我们在话题chatter上创建了一个发布者。第二个参数是被发布者将来用于发布消息的一个消息的引用。


  • void setup()  
  • {  
  •   nh.initNode();  
  •   nh.advertise(chatter);  
  • }  

在arduino的setup函数中,需要去初始化节点句柄,告知那些话题将会有发布,以及订阅你想收听的话题。  


  • void loop()  
  • {  
  •   str_msg.data = hello;  
  •   chatter.publish( &str_msg );  
  •   nh.spinOnce();  
  •   delay(1000);  
  • }  

最后在loop函数中,节点在chatter话题上发布了消息“hello world”,并且调用了ros::spinOnce(),也就是说所有ROS通信的回调都被处理。

     在arduino IDE中,点击upload运行程序。接着运行roscore:

roscore  

新打开一个终端,运行ros_serial客户端程序来把arduino发送的信息转发到ROS系统的其它部分:
rosrun rosserial_python serial_node.py /dev/ttyACM0  

最后,在一个终端中输入如下命令来查看你的arduino发送的消息:

rostopic echo chatter  

你可看到arduino的数据通信灯在闪,这可以说明arduino确实在发送数据给电脑。

你可能感兴趣的:(机器人操作系统(ROS)教程20:使用rosserial创建一个publisher)