在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相关推荐

  1. PyTorch框架学习十八——Layer Normalization、Instance Normalization、Group Normalization

    PyTorch框架学习十八--Layer Normalization.Instance Normalization.Group Normalization 一.为什么要标准化? 二.BN.LN.IN. ...

  2. C1认证学习十八、十九(表单元素、转义字符)

    C1认证学习十八.十九(表单元素.语义化标签) 十八 任务背景 HTML的表单用于收集用户的输入,表单元素是指的不同类型的input元素,复选框,单选按钮,提交按钮等等. 任务目标 掌握表单标签以及其 ...

  3. 【itext学习之路】--1.创建一个简单的pdf文档

    来源:https://blog.csdn.net/tomatocc/article/details/80666011 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文 ...

  4. maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程

    前面maven 学习笔记(二)已经说过了怎样通过插件创建一个简单的工程,有了前面的基础,创建一个较复杂的工程就容易了很多.同样是通过已经有了插件,同样如果插件系统中并未存在,还是需要通过Add Arc ...

  5. ROS的学习(十九)用rosserial创建一个subscriber

    在前面的一篇博客中,我们已经使用arduino创建了一个publisher节点,接下来将会创建一个subscriber,打开arduino IDE: arduino 选择File->Exampl ...

  6. android学习十八(Service服务的基本用法)

    定义一个服务 在项目中定义一个服务,新建一个ServiceTest项目,然后在这个项目中新增一个名为MyService的类,并让它继承自Service,完成后的代码如下所示: package com. ...

  7. 我的Go语言学习之旅七:创建一个GUI窗体

    在上次中,刚刚学过了  弹窗效果,这里再接着学习一下如何创建一个窗体. 还是老路子,先上代码: package mainimport ( "github.com/lxn/go-winapi& ...

  8. Extjs6 --- 学习笔记(1)创建一个新项目

    原公司使用的前端框架是Extjs,于是系统学习了Extjs的4和6.旧东家的项目主要为后台管理系统,因此对前端界面UI的要求并不高,侧重于数据的展示与处理  ,刚开始使用的是Extjs4,后升级成6. ...

  9. 学习UE4动画蓝图:创建一个射击姿势并使用

    目标 本篇的目标是从一个包含射击的动画序列中创建一个射击姿势,并让角色可以随时切换成"射击姿势".我的工程上接<使用UE4动画混合空间实现侧向和后退移动>,不过理论上只 ...

最新文章

  1. 交互式python shell
  2. OpenCascade Primitives BRep-Cylinder
  3. 一篇网站架构的文章:一步步构建大型网站架构
  4. 【Python小游戏】扫雷游戏竟有世界排行榜,中国90后00后霸占半壁江山?
  5. 跨计算机建立视图_计算机二级office
  6. 介绍一个办法查TREX search的log
  7. zigbee的路由器能分配网络地址吗_真核细胞无丝分裂能将核DNA精准的平均分配到两个子细胞中吗?...
  8. shell执行oracle存储过程,获得存储过程返回值
  9. bpsk调制及解调实验_无线通信中的IQ调制,BPSK调制,QPSK调制,16QAM调制的理解...
  10. sdut 取数字问题(深搜,动态规划)
  11. UE3 使用光源函数
  12. 88mph将上线碎片化零息债券功能,目前正接受Peckshield的安全审计
  13. 算法之【大整数乘法】
  14. Julia: bug? = split ,isnumber
  15. broadcom linux网卡驱动下载,Broadcom Bcm57xx芯片网卡驱动Linux下安装方法
  16. easypr4android,车牌识别系统EasyPR的批量识别功能测试界面
  17. 400多个JavaScript特效大全
  18. Debian和Ubuntu版本比较
  19. Hyperledger Fabric教程--Peer命令
  20. uniapp开发关于视频播放器适配H5的全屏(横屏)操作

热门文章

  1. C:\WINDOWS\system32\drivers\etc\hosts
  2. 深入ASP.NET 2.0的提供者模型
  3. [转载] 用python 获取当前时间(年-月-日 时:分:秒),并且返回当前时间的下一秒
  4. [转载] Python 内置函数 lambda、filter、map、reduce
  5. [转载] Python学习之Numpy
  6. 解决移动端遮罩层无法覆盖全部页面问题
  7. 汇编语言学习之汇编语言源程序的输入
  8. 【转载】产品经理如何行之有效的提高执行力
  9. HTML5 Canvas学习---第一章 《Hello World及图片显示》
  10. IK Analyzer 中文分词器