机器人操作系统(ROS)教程20:使用rosserial创建一个publisher
2016-02-24 18:51
399 查看
在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] 纯文本查看 复制代码
?
下面来看一下代码的解释:
#include <ros.h>
#include <std_msgs/String.h>
上面的两行代码是任何ROS
arduino 程序的一部分。你需要包含ros.h和其它可能会用到的消息的头文件。
ros::NodeHandle nh;
创建了一个节点的句柄,它允许我们用来创建发布者和订阅者。这个节点的句柄同样与串口通信有关。
std_msgs::String str_msg;
ros:
![](http://www.arduino.cn/static/image/smiley/default/tongue.gif)
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确实在发送数据给电脑。
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] 纯文本查看 复制代码
?
#include <ros.h>
#include <std_msgs/String.h>
上面的两行代码是任何ROS
arduino 程序的一部分。你需要包含ros.h和其它可能会用到的消息的头文件。
ros::NodeHandle nh;
创建了一个节点的句柄,它允许我们用来创建发布者和订阅者。这个节点的句柄同样与串口通信有关。
std_msgs::String str_msg;
ros:
![](http://www.arduino.cn/static/image/smiley/default/tongue.gif)
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确实在发送数据给电脑。
相关文章推荐
- Cocos2d-x 3.1.1 Lua演示样例 ActionEaseTest(动作)
- hibernate开发(1)
- 归还文物(有时间就翻译。。)
- 机器人操作系统(ROS)教程19:安装ARDUINO IDE使用rosserial
- UI整理-----part8--导航控制器(navigationController)
- BZOJ 3713: [PA2014]Iloczyn|暴力
- arm9+linux fl2440 led 驱动 plat_led.c
- C语言常用转义字符表 和 ASCII码表
- 二维数组排序 array_multisort
- Activity横竖屏切换
- JavaSript模块规范 - AMD规范与CMD规范介绍
- **集团RAC 11g 虚拟机生产库环境
- 【Web API】1.1 ASP.NET Web API入门
- 《高级语言程序设计》课程指导
- [Computer Security : Art and Science] Chapter_1 1.1 基础部分
- Centos7搭建LNMP环境
- USACO-Section 3.2 Factorials(模拟)
- HDU 4994 Revenge of Nim(玄学)(Nim问题)
- 331. Verify Preorder Serialization of a Binary Tree【M】【16】【leetcode】
- 点击导航下的某个栏目,出现在相应区域;滚动到某个区域,导航下的某个栏目相应效果