zoukankan      html  css  js  c++  java
  • 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.pylistener.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.pylistener.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服务来完成ROSHello World 程序的例子。但是在这之前,我们需要学一学:如何创建自定义的ROS消息和ROS服务,以便 ROS 服务版的 Hello World 程序的编写。
    所以下一讲,我们来学习:如何创建自定义的ROS消息和ROS服务。

  • 相关阅读:
    堆内存与栈内存
    struts2 ajax 实现方式
    Hibernate 配置派生属性
    高效 jquery 的奥秘
    对于Maven管理的项目制定虚拟目录
    ThreadLocal 笔记
    java Thread.join()
    vi 使用笔记
    浮动闭合方案:clearfix
    熬夜之弊及改善之法
  • 原文地址:https://www.cnblogs.com/aobosir/p/5928574.html
Copyright © 2011-2022 走看看