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服务。
- tensorflow的OS X构建机器学习环境
- Python_正则表达式
- Python3 Post登录并且保存cookie登录其他页面
- Python os模块实例之遍历目录及子目录指定扩展名的文件
- python通过__slots__限制类实例动态的增加属性、方法
- python小菜的学习之路之python初识
- python发送邮件小结
- Python每天一题 0001
- Python学习笔记6-字典Dict
- Python字符串操作
- python3和Python2的区别(被坑太久了)
- Python 多态与动态绑定
- Python每天一题 0000
- 如何拿到半数面试公司Offer——我的Python求职之路(转)
- 微信公众平台SDK Python
- python入门(一)_前言
- 关于Python的基础
- Python多进程库multiprocessing中进程池Pool类的使用
- python基础教程笔记—即时标记(详解)
- Python初学者(五)