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
ROS的学习(十八)使用rosserial创建一个publisher相关推荐
- PyTorch框架学习十八——Layer Normalization、Instance Normalization、Group Normalization
PyTorch框架学习十八--Layer Normalization.Instance Normalization.Group Normalization 一.为什么要标准化? 二.BN.LN.IN. ...
- C1认证学习十八、十九(表单元素、转义字符)
C1认证学习十八.十九(表单元素.语义化标签) 十八 任务背景 HTML的表单用于收集用户的输入,表单元素是指的不同类型的input元素,复选框,单选按钮,提交按钮等等. 任务目标 掌握表单标签以及其 ...
- 【itext学习之路】--1.创建一个简单的pdf文档
来源:https://blog.csdn.net/tomatocc/article/details/80666011 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文 ...
- maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程
前面maven 学习笔记(二)已经说过了怎样通过插件创建一个简单的工程,有了前面的基础,创建一个较复杂的工程就容易了很多.同样是通过已经有了插件,同样如果插件系统中并未存在,还是需要通过Add Arc ...
- ROS的学习(十九)用rosserial创建一个subscriber
在前面的一篇博客中,我们已经使用arduino创建了一个publisher节点,接下来将会创建一个subscriber,打开arduino IDE: arduino 选择File->Exampl ...
- android学习十八(Service服务的基本用法)
定义一个服务 在项目中定义一个服务,新建一个ServiceTest项目,然后在这个项目中新增一个名为MyService的类,并让它继承自Service,完成后的代码如下所示: package com. ...
- 我的Go语言学习之旅七:创建一个GUI窗体
在上次中,刚刚学过了 弹窗效果,这里再接着学习一下如何创建一个窗体. 还是老路子,先上代码: package mainimport ( "github.com/lxn/go-winapi& ...
- Extjs6 --- 学习笔记(1)创建一个新项目
原公司使用的前端框架是Extjs,于是系统学习了Extjs的4和6.旧东家的项目主要为后台管理系统,因此对前端界面UI的要求并不高,侧重于数据的展示与处理 ,刚开始使用的是Extjs4,后升级成6. ...
- 学习UE4动画蓝图:创建一个射击姿势并使用
目标 本篇的目标是从一个包含射击的动画序列中创建一个射击姿势,并让角色可以随时切换成"射击姿势".我的工程上接<使用UE4动画混合空间实现侧向和后退移动>,不过理论上只 ...
最新文章
- 交互式python shell
- OpenCascade Primitives BRep-Cylinder
- 一篇网站架构的文章:一步步构建大型网站架构
- 【Python小游戏】扫雷游戏竟有世界排行榜,中国90后00后霸占半壁江山?
- 跨计算机建立视图_计算机二级office
- 介绍一个办法查TREX search的log
- zigbee的路由器能分配网络地址吗_真核细胞无丝分裂能将核DNA精准的平均分配到两个子细胞中吗?...
- shell执行oracle存储过程,获得存储过程返回值
- bpsk调制及解调实验_无线通信中的IQ调制,BPSK调制,QPSK调制,16QAM调制的理解...
- sdut 取数字问题(深搜,动态规划)
- UE3 使用光源函数
- 88mph将上线碎片化零息债券功能,目前正接受Peckshield的安全审计
- 算法之【大整数乘法】
- Julia: bug? = split ,isnumber
- broadcom linux网卡驱动下载,Broadcom Bcm57xx芯片网卡驱动Linux下安装方法
- easypr4android,车牌识别系统EasyPR的批量识别功能测试界面
- 400多个JavaScript特效大全
- Debian和Ubuntu版本比较
- Hyperledger Fabric教程--Peer命令
- uniapp开发关于视频播放器适配H5的全屏(横屏)操作
热门文章
- C:\WINDOWS\system32\drivers\etc\hosts
- 深入ASP.NET 2.0的提供者模型
- [转载] 用python 获取当前时间(年-月-日 时:分:秒),并且返回当前时间的下一秒
- [转载] Python 内置函数 lambda、filter、map、reduce
- [转载] Python学习之Numpy
- 解决移动端遮罩层无法覆盖全部页面问题
- 汇编语言学习之汇编语言源程序的输入
- 【转载】产品经理如何行之有效的提高执行力
- HTML5 Canvas学习---第一章 《Hello World及图片显示》
- IK Analyzer 中文分词器