在這一節里面,我們將介紹ros圖的概念,並討論roscore
,rosnode
和rosrun
命令行工具的用法。
首先,我們需要安裝一個輕量級的仿真器,這里我們需要通過如下的命令來安裝:
sudo apt-get install ros-kinetic-ros-tutorials
接着,我們快速概覽一下圖相關的概念
節點(Nodes):節點是一個通過ROS與其他節點進行通信的可執行文件,就像windows下的.exe文件
消息(Messages):是ROS中通信數據的類型,當需要發布到話題或者從話題訂閱的時候,本質上是發布或者訂閱消息。
話題(Topics):節點可以發布消息到一個話題,當然了,節點也可以訂閱話題以便接收消息
節點管理器(Master):為ROS提供名稱服務,用於節點的名稱注冊和便於節點相互之間的查找
rosout:ROS中等價於stdout和stderr等標准的輸出
roscore:運行該命令等價於運行了節點管理器+rosout+參數服務器(參數服務器后面介紹)
節點(Nodes)
一個節點在ROS的功能包中其實就跟一個可執行文件差不多,ROS的節點通過ROS客戶端庫和別的節點進行通信,節點可以發布消息到話題或者從話題訂閱消息,當然了,節點也可以提供或者使用服務(不同於消息)。
客戶端庫
ROS的客戶端庫允許使用不同的編程語言編寫節點來進行節點之間的通信
- rospy = python client library
- roscpp = c++ client library
運行roscore
記住:當你使用ROS的時候,你要做的第一件事就是運行roscore
roscore
使用節點
打開一個新的終端,我們使用rosnode
來看當我們執行roscore
的時候有什么東西在運行,記住:不要關閉之前的終端
執行如下的命令,將輸出當前正在運行的節點:
rosnode list
輸出的結果為:
liuqiang@liuqiang-pc:~$ rosnode list
/rosout
/rosout是總是在運行中,因為它的作用就是搜集和記錄節點的調試信息
執行如下的命令,將輸出關於特定節點的信息
rosnode info /rosout
輸出的結果為:
liuqiang@liuqiang-pc:~$ 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://liuqiang-pc:44848/ ...
Pid: 27445
接着,讓我們看看更多的節點,為此,我們要啟動更多的節點。
使用 rosrun
rosrun
允許使用功能包的名稱直接運行功能包里面的節點(這個過程中,我們不需要提供功能包的路徑)
該命令的使用格式如下:
rosrun [package_name] [node_name]
例如,我們可以運行海龜這個節點:
rosrun turtlesim turtlesim_node
該命令執行完之后會顯示出一個帶有一只小海龜的矩形窗口,該窗口內部的矩形區域就是小海龜的世界。
這時,我們在一個新的窗口中運行:
rosnode list
輸出的結果為:
liuqiang@liuqiang-pc:~$ rosnode list
/rosout
/turtlesim
為節點重命名
ROS的一個強大的功能是用戶可以為節點重新命名(也叫作映射或者重定向)
首先,我們點擊鼠標,激活執行小海龜節點命令的窗口,按下ctrl + c快捷鍵關閉掉海龜節點,打開終端,執行如下的命令:
rosrun turtlesim turtlesim_node __name:=my_turtle
接着,我們重新運行如下的命令:
rosnode list
輸出的結果為:
liuqiang@liuqiang-pc:~$ rosnode list
/my_turtle
/rosout
接着,我們用ping
命令來測試一下:
rosnode ping my_turtle
輸出結果為:
liuqiang@liuqiang-pc:~$ rosnode ping my_turtle
rosnode: node is [/my_turtle]
pinging /my_turtle with a timeout of 3.0s
xmlrpc reply from http://liuqiang-pc:46098/ time=0.330925ms
xmlrpc reply from http://liuqiang-pc:46098/ time=0.380039ms
xmlrpc reply from http://liuqiang-pc:46098/ time=0.359058ms
xmlrpc reply from http://liuqiang-pc:46098/ time=0.756979ms
xmlrpc reply from http://liuqiang-pc:46098/ time=0.627995ms
^Cping average: 0.490999ms
rosnode的其他的命令:
Commands:
rosnode ping test connectivity to node(測試節點的連通性)
rosnode list list active nodes
rosnode info print information about node
rosnode machine list nodes running on a particular machine or list machines
rosnode kill kill a running node
rosnode cleanup purge registration information of unreachable nodes
總結
在這一節里面,我們使用如下的幾個命令:
roscore:節點管理器+rosout+參數服務器
rosnode: 獲取有關節點信息的ROS工具
rosrun: 從給定的功能包里面運行一個節點
下一節,我們將講解ROS中有關話題的內容,盡請期待!