ROS總結——ROS節點

理解ROS節點

本博客是對http://wiki.ros.org/上ROS教程的學習總結,歡迎大家交流學習。本節介紹 ROS 圖(graph)概念並介紹如何使用roscore、rosnode和 rosrun 命令行工具。
1.圖概念概述

  • Nodes:節點,一個節點即爲一個可執行文件,它可以通過ROS與其它節點進行通信。
  • Messages:消息,消息是一種ROS數據類型,用於訂閱或發佈到一個話題。
  • Topics:話題,節點可以發佈消息到話題,也可以訂閱話題以接收消息。
  • Master:節點管理器,ROS名稱服務 (比如幫助節點找到彼此)。
  • rosout: ROS中相當於stdout/stderr。

2.節點、客戶端
一個節點其實只不過是ROS程序包中的一個可執行文件。ROS節點可以使用ROS客戶庫與其他節點通信。節點可以發佈或接收一個話題。節點也可以提供或使用某種服務。
ROS客戶端庫允許使用不同編程語言編寫的節點之間互相通信:

  • rospy = python 客戶端庫
  • roscpp = c++ 客戶端庫

3.使用roscore
roscore 是運行所有ROS程序前首先要運行的命令,運行roscore:

$  roscore
... logging to /home/yongqiang/.ros/log/b976f590-0349-11e7-98a1-dc0ea16e8f33/roslaunch-ubuntu-10371.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://localhost:37071/
ros_comm version 1.11.20


SUMMARY
========

PARAMETERS
 * /rosdistro: indigo
 * /rosversion: 1.11.20

NODES

auto-starting new master
process[master]: started with pid [10383]
ROS_MASTER_URI=http://localhost:11311/

setting /run_id to b976f590-0349-11e7-98a1-dc0ea16e8f33
process[rosout-1]: started with pid [10396]
started core service [/rosout]

如果 roscore 運行後無法正常初始化,很有可能是存在網絡配置問題。參見http://wiki.ros.org/ROS/NetworkSetup#Single_machine_configuration

如果 roscore 不能初始化並提示缺少權限,這可能是因爲~/.ros文件夾歸屬於root用戶(只有root用戶才能訪問),修改該文件夾的用戶歸屬關係:

$  sudo chown -R <your_username> ~/.ros

4.使用rosnode
rosnode 顯示當前運行的ROS節點信息。rosnode list 指令列出活躍的節點:

$  rosnode list
/rosout

這表示當前只有一個節點在運行: rosout。因爲這個節點用於收集和記錄節點調試輸出信息,所以它總是在運行的。

rosnode info 命令返回的是關於一個特定節點的信息:

$  rosnode info /rosout
Node [/rosout]
Publications: 
 * /rosout_agg [rosgraph_msgs/Log]

Subscriptions: 
 * /rosout [unknown type]

Services: 
 * /rosout/set_logger_level
 * /rosout/get_loggers


contacting node http://localhost:52102/ ...
Pid: 10396

5.使用rosrun
rosrun 允許你使用包名直接運行一個包內的節點(而不需要知道這個包的路徑),基本用法:

$  rosrun [package_name] [node_name]

例如運行turtlesim包中的 turtlesim_node:

$  rosrun turtlesim turtlesim_node

這裏寫圖片描述
在一個新的終端:

$  rosnode list
/rosout
/turtlesim

ROS的一個強大特性就是你可以通過命令行重新配置名稱。關閉 turtlesim 窗口停止運行節點 (或者回到rosrun turtlesim終端並使用ctrl-C)。現在重新運行它,但是這一次使用Remapping Argument改變節點名稱:

$  rosrun turtlesim turtlesim_node __name:=my_turtle

在一個新的終端,結果與turtlesim_node相似:

$  rosnode list
/rosout
/turtlesim

使用另外一個 rosnode 指令ping來測試:

$  rosnode ping my_turtle
rosnode: node is [/my_turtle]
pinging /my_turtle with a timeout of 3.0s
xmlrpc reply from http://localhost:36220/   time=1.621008ms
xmlrpc reply from http://localhost:36220/   time=1.515865ms
xmlrpc reply from http://localhost:36220/   time=1.546144ms
xmlrpc reply from http://localhost:36220/   time=1.197100ms
xmlrpc reply from http://localhost:36220/   time=1.066208ms
xmlrpc reply from http://localhost:36220/   time=1.305103ms
xmlrpc reply from http://localhost:36220/   time=1.712799ms
xmlrpc reply from http://localhost:36220/   time=1.302958ms
xmlrpc reply from http://localhost:36220/   time=1.363993ms
...........................................................
...........................................................

本節到這裏,已經講解了ROS節點是如何工作的,下一步,將講解一下ROS話題。如果想關閉turtlesim_node,請按下“Ctrl-C”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章