ROS Learning-011 beginner_Tutorials (编程) 编写 ROS 话题版的 Hello World 程序(Python版)
ROS Indigo beginner_Tutorials-10 编写 ROS 话题版的 Hello World 程序(Python版)
我使用的虚拟机软件:VMware Workstation 11
使用的Ubuntu系统:Ubuntu 14.04.4 LTS
ROS 版本:ROS Indigo
1. 前言 :
Hello world 程序,在我们编程界,代表学习某种语言编写的第一个程序。对于 ROS 机器人操作系统来说,这个 Hello World 程序就是 : 写一个简单的消息发布器(发送) 和 订阅器(接收)。
2. 准备工作 :
C++ 的程序都会存放在每个程序包的 src
文件夹里。 Python 不同,Python 程序都存放在 scripts
文件夹中, 反正意思都是 源文件 包。
Step 1 . 所以,先在 beginner_tutorials
软件包中创建一个 scripts
文件夹:
$ roscd beginner_tutorials
$ mkdir scripts
$ cd scripts
3. 编写消息发布器节点程序:
如果你懒得去写的话,你可以使用 wget
命令, 在 github 上获取一个 talker.py
源代码。如何获取呢 ?
Step 2 . 开一个终端,输入下面的命令就可以获取 talker.py
:
$ wget https://raw.github.com/ros/ros_tutorials/indigo-devel/rospy_tutorials/001_talker_listener/talker.py
$ ls
talker.py
但是我建议你亲自动手,写一写:手动创建一个
talker.py
文件在/scripys
文件夹里:$ roscd beginner_tutorials/scripts
$ gedit talker.py将这上面链接里的代码手动输入到
talker.py
文件中。(我就不将代码贴上来了)
下面我来讲解一下代码:
Step 3 . 最后一步,给这个 talker.py
文件加上可执行权限:
$ chmod +x talker.py
这样,一个发布器就编写完了。我们不要急着去运行它,现在我们编写一个订阅器,来接收这个发布器发布的话题:
4. 编写消息订阅器节点程序:
Step 4 . 和发布器一样,我们使用wget
命令获取订阅器的源代码 listener.py
:
$ roscd beginner_tutorials/scripts/
$ wget https://raw.github.com/ros/ros_tutorials/indigo-devel/rospy_tutorials/001_talker_listener/listener.py
$ ls
listener.py talker.py
但是,我还是建议你自己动手写一下。
好吧,下面我们开始讲解 listener.py
里面的代码,这个listener.py
程序的代码简单:
Step 5 . 最后不要忘了给这个listener.py
加可执行权限:
$ chmod +x listener.py
5. 运行 :
对于python 来说,我们不需要使用 catkin_make
命令对 ~/catkin_ws
工作空间进行编译。因为python文件本身就是可执行文件(前提是我们给它添加可执行权限)。
OK,发布器 和 订阅器 都创建完了。下面我们运行它们,看看效果:
Step 6 . 新打开一个终端,先执行 roscore
命令:
$ roscore
Step 7 . 新打开一个终端,启动 发布器 :
$ rosrun beginner_tutorials talker.py
Step 8 . 新打开一个终端,启动 订阅器 :
$ rosrun beginner_tutorials listener.py
运行效果:
Step 9 . 我们来使用 rostopic list
,看看当前的话题有哪些:
$ rostopic list
/chatter
/rosout
/rosout_agg
其中 /chatter
就是我们在发布器里面发布的 ROS话题。
6. 扩展,编写一个启动脚本文件 :
还记得上一节,我们讲的ROS的启动脚本文件吧,下面我们来编写一个launch文件,来将 talker.py
和 listener.py
文件的启动工作交个这个launch文件来做:
Step 10 . 来到 beginner_tutorials
程序包的 /launch
路径下,新建一个 hello_world_topic.launch
文件:
$ roscd beginner_tutorials/launch
$ gedit hello_world_topic.launch #使用你自己喜欢的文本编辑器
Step 11 . 输入下面的代码:
<launch>
<node pkg="beginner_tutorials" name="talker" type="talker.py" />
<node pkg="beginner_tutorials" name="listener" type="listener.py" />
</launch>
Step 12 . 现在,将之前打开的终端都关闭,我们启动这个脚本: (开一个终端 : Ctrl+Alt+T
)
$ roslaunch beginner_tutorials hello_world_topic.launch
运行结果:
上面截图的输出显示: talker.py
和 listener.py
脚本运行成功。但是并没有出现刷屏的现象。这是为什么? 为了证明这个脚本程序真的成功的运行了,我们来试一试:
Step 13 . 重新开一个终端,输入下面的命令:
$ rosrun list
$ rostopic list
$ rostopic echo /chatter
Step 14 . 现在 Ctrl+C
结束监听 /chatter
话题。使用 rqt_graph
对当前启动的节点可视化:
$ rqt_graph
这些足以说明,hello_world_topic.launch
启动脚本文件,启动成功。
总结: 发布器 和 订阅器 是很简单的, 就是简单的发布一个 自定义的话题。
我之前使用说过:节点之间通讯的方式有两种 : 话题(rostopic
) 和 服务(rosservice
)
所以,接下来,我们会讲:使用ROS服务来完成ROS版 Hello World 程序的例子。但是在这之前,我们需要学一学:如何创建自定义的ROS消息和ROS服务,以便 ROS 服务版的 Hello World 程序的编写。
所以下一讲,我们来学习:如何创建自定义的ROS消息和ROS服务。
ROS Learning-011 beginner_Tutorials (编程) 编写 ROS 话题版的 Hello World 程序(Python版)的更多相关文章
- ROS Learning-015 learning_tf(编程) 编写一个监听器程序 (Python版)
ROS Indigo learning_tf-02 编写一个 监听器 程序 (Python版) 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 1 ...
- 【ROS系列】使用QT编写ROS订阅、发布程序
Linux下一直使用QT进行开发,支持cmake使得很容易导入其他工程.学习ROS过程中,很多函数名称难记,使用QT不仅可以提示补全,还为了以后开发GUI方便吧. 1.安装ros_qtc_plugin ...
- 编写优美代码的七条规范(Python版)
编程是一种与计算机系统通信的语言.交流就是与某人分享思想.二进制语言是计算机的最核心的语言.但是在前端,我们有很多种语言.这些语言使用解释器将前端代码转换为二进制代码.基本上,系统对一行代码执行大量内 ...
- ROS Learning-013 beginner_Tutorials (编程) 编写ROS服务版的Hello World程序(Python版)
ROS Indigo beginner_Tutorials-12 编写ROS服务版的Hello World程序(Python版) 我使用的虚拟机软件:VMware Workstation 11 使用的 ...
- ROS Learning-032 (提高篇-010 Launch)Launch 深入研究 --- (启动文件编程)ROS 的 XML语法简介
ROS 提高篇 之 Launch 深入研究 - 01 - 启动文件的编程 - ROS 的 XML语法简介 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubu ...
- ROS Learning-019 learning_tf-03(编程) 添加额外的坐标系 (Python版)
ROS Indigo learning_tf-03 添加额外的坐标系 (Python版) 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.0 ...
- SLAM+语音机器人DIY系列:(二)ROS入门——4.如何编写ROS的第一个程序hello_world
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- ROS学习手记 - 8 编写ROS的Publisher and Subscriber
上一节我们完成了 message & srv 文件的创建和加入编译,这次我们要玩简单的Publisher 和 Subscriber 要玩 Publisher 和 Subscriber, 需要具 ...
- ROS学习(十三)—— 编写简单的Service和Client (C++)
一.编写Service节点 1.节点功能: 我们将创建一个简单的service节点("add_two_ints_server"),该节点将接收到两个整形数字,并返回它们的和. 2. ...
随机推荐
- 寻找节点d=n的节点算法
这里的算法是毕设过程中,自己想到的,也不知道有不有人提出过.这里就记录下发现的过程的具体的算法,以后会用到 背景描述 毕设做的是「社交网络中病毒传播的预测」,前期过程主要是模拟几个网络的数据,然后从一 ...
- SQL-主键与外键
1.PRIMARY KEY 主键,唯一标识一行或多行,不允许重复值,也不允许未NULL. 语法:[CONSTRAINT <约束名>] PRIMARY KEY [(列名1,列名2...)] ...
- js 自定义方法 设置可选参数的方法
原链接 http://www.cnblogs.com/RightDear/p/3156652.html PHP有个很方便的用法是在定义函数时可以直接给参数设默认值,如: function simue ...
- unity 查看打包资源占用
想要压缩包大小,首先得知道打包出来的各个资源的大小,明确知道哪些资源占用大,可以通过如下操作打开Editor.log(可能需要先输出一遍安卓包) 1.在Unity Console界面右上角点开Open ...
- jsp有哪些动作?作用分别是什么?
jsp共有6种基本动作: 1.jsp:include,在页面被请求的时候引入一个文件 2.jsp:useBean,寻找或者实例化一个JavaBean 3.jsp:setProperty,设置JavaB ...
- Vue 将样式绑定到一个对象让模板更清晰
Vue 将样式绑定到一个对象让模板更清晰 <div id="app"> <div v-bind:style="styleObject"> ...
- Visualforce入门第三篇_2017.3.2
Visualforce实现显示Record List(列表) 详细见链接:https://trailhead.salesforce.com/modules/visualforce_fundamenta ...
- 异常:java.lang.IllegalStateException: No instances found of configserver(里面是一个微服务名)
今天本地测试代码时出现了个异常,该异常出现的原因是:微服务启动的顺序出现了问题: 应该先启动本地eureka,然后在启动本地配置中心,然后在启动具体的微服务.
- bae3.0第一步 添加框架支持
1.克隆bae上应用代码: 先在本地linux机器上创建文件夹bae并进入, 再执行git clone https://git.duapp.com/appidd01iud80bg 结果会在bae文件夹 ...
- laravel 判断上传文件的类型和后缀
学习源头: https://blog.csdn.net/ddjjll8877/article/details/52249965 class FileUpdateController extends B ...