zoukankan      html  css  js  c++  java
  • ROS节点理解--5

    理解 ROS节点(原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/)

    Description: 本教程主要介绍 ROS 图(graph)概念 并讨论roscorerosnoderosrun 命令行工具的使用。

      1.先决条件

      在本教程中我们将使用到一个轻量级的模拟器,请使用以下命令来安装:

    root@zxwubuntu-Aspire-V3-572G:~#  sudo apt-get install ros-<distro>-ros-tutorials

      用你使用的ROS发行版本名称(例如electric、fuerte、groovy、hydro等)替换掉'<distro>'。

      2.图概念概述

    • Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。

    • Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。

    • Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。

    • Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。

    • rosout: ROS中相当于stdout/stderr。

    • roscore: 主机+ rosout + 参数服务器 (参数服务器会在后面介绍)。

      3.节点

      一个节点其实只不过是ROS程序包中的一个可执行文件。ROS节点可以使用ROS客户库与其他节点

      通信。节点可以发布或接收一个话题。节点也可以提供或使用某种服务。

      4.客户端库

      ROS客户端库允许使用不同编程语言编写的节点之间互相通信:

    • rospy = python 客户端库
    • roscpp = c++ 客户端库

      5.roscore

      roscore 是你在运行所有ROS程序前首先要运行的命令。

    root@zxwubuntu-Aspire-V3-572G:~# roscore

    然后你会看到类似下面的输出信息::

    ... logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch-
    
    machine_name-13039.log
    Checking log directory for disk usage. This may take awhile.
    Press Ctrl-C to interrupt
    Done checking log file disk usage. Usage is <1GB.
    
    started roslaunch server http://machine_name:33919/
    ros_comm version 1.4.7
    
    SUMMARY
    ========
    
    PARAMETERS
     * /rosversion
     * /rosdistro
    
    NODES
    
    auto-starting new master
    process[master]: started with pid [13054]
    ROS_MASTER_URI=http://machine_name:11311/
    
    setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf
    process[rosout-1]: started with pid [13067]
    started core service [/rosout]

    如果 roscore 运行后无法正常初始化,很有可能是存在网络配置问题。参见 :http://wiki.ros.org/ROS/NetworkSetup#Single_machine_configuration 

    如果 roscore 不能初始化并提示缺少权限,这可能是因为~/.ros文件夹

    归属于root用户(只有root用户才能访问),修改该文件夹的用户归属关系:

    root@zxwubuntu-Aspire-V3-572G:~# sudo chown -R <your_username> ~/.ros

      6.使用rosnode

      打开一个新的终端, 可以运行 rosnode list

    root@zxwubuntu-Aspire-V3-572G:~# sudo rosnode list

    这表示当前只有一个节点在运行: rosout。因为这个节点用于收集和记录节点调

    试输出信息,所以它总是在运行的。

    rosnode info 命令返回的是关于一个特定节点的信息。

    root@zxwubuntu-Aspire-V3-572G:~# rosnode info /rosout

    这给了我们更多的一些有关于rosout的信息, 例如,事实上由它发布/rosout_agg.

    现在,让我们看看更多的节点。为此,我们将使用rosrun 弹出另一个节点。

      7.使用 rosrun

    rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)。

    用法:

    $ rosrun [package_name] [node_name]

    现在我们可以运行turtlesim包中的 turtlesim_node。

    然后, 在一个 新的终端:

    root@zxwubuntu-Aspire-V3-572G:~# rosrun turtlesim turtlesim_node

    你会看到 turtlesim 窗口:  

     

    注意: 这里的 turtle 可能和你的 turtlesim 窗口不同。别担心,这里有许多版本的turtle ,而你的是一个惊喜!

    在一个 新的终端:

    root@zxwubuntu-Aspire-V3-572G:~# rosnode list

    你会看见类似于:

    ROS的一个强大特性就是你可以通过命令行重新配置名称。

    关闭 turtlesim 窗口停止运行节点 (或者回到rosrun turtlesim终端并使用`ctrl

    -C`)。现在让我们重新运行它,但是这一次使用Remapping Argument改变节点名称:

    root@zxwubuntu-Aspire-V3-572G:~# rosrun turtlesim turtlesim_node __name:=my_turtle

    现在,我们退回使用 rosnode list:

    root@zxwubuntu-Aspire-V3-572G:~# rosnode list

    注意: 如果你仍看到 /turtlesim在列表中,这可能意味着你在终端中使用ctrl-C止节点而不是关闭窗口,或者你没有$ROS_HOSTNAME环境变量,这在

    http://wiki.ros.org/ROS/NetworkSetup#Single_machine_configuration 中有定义。你可以尝试清除rosnode 列表,通过:

    root@zxwubuntu-Aspire-V3-572G:~# rosnode cleanup 

    我们可以看到新的/my_turtle 节点。使用另外一个 rosnode 指令, ping,:

    root@zxwubuntu-Aspire-V3-572G:~# rosnode ping my_turtle 

      8.回顾

    本节所涉及的内容:

    • roscore = ros+core : master (provides name service for ROS) + rosout (stdout/stderr) + parameter server (parameter server will be introduced later)
    • rosnode = ros+node : ROS tool to get information about a node.
    • rosrun = ros+run : runs a node from a given package.

    到这里,您已经了解了ROS节点是如何工作的。

  • 相关阅读:
    mysql联合索引命中条件
    Shiro知识初探(更新中)
    Java中使用MongoTemplate进行分批处理数据
    Java中String时间范围比较
    使用ReentrantLock
    使用Condition
    python的坑--你知道吗?
    python基础--函数全解析(1)
    CSS基本语法及页面引用
    HTML学习汇总
  • 原文地址:https://www.cnblogs.com/zxouxuewei/p/5097492.html
Copyright © 2011-2022 走看看