[置顶] ROS的学习(十八)使用rosserial创建一个publisher

     在arduino开发人群中,经常把源代码称为“sketch”,之后,我们就会使用这个惯例。打开一个终端,启动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

     之后重启计算机,可以看到就可以选择了。设置完成以后,在arduino IDE中,选择File->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和其它可能会用到的消息的头文件。
ros::NodeHandle nh;

     接下来,我们创建了一个节点的句柄,它允许我们用来创建发布者和订阅者。这个节点的句柄同样与串口通信有关。
std_msgs::String str_msg;
ros::Publisher 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


你可能感兴趣的:(robot,Publisher,ROS,arduino,发布者,operating,syst)