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節點是如何工作的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM