ROS5—理解ROS節點
這篇教程會介紹ROS圖概念和並討論roscore、rosnode和rosrun命令的使用。
1.預備條件
這裡會使用輕量級的模擬器,先安裝
$ sudo apt-get install ros--ros-tutorials
1
將替換成你的ROS版本名稱。
2.圖概念的快速概覽
節點(nodes):節點是一個利用ROS來與其他節點通訊的可執行檔案。
訊息(messages):在頂閱或推送一個主題(topic)時使用的ROS資料型別。
主題(topics):節點可以向主題公佈(publish)訊息或向主題訂閱(subscribe)來接受其訊息。
主控(master):ROS的名稱服務。
rosout:stdout/stderr的ROS等價物。
roscore:master+rosout+引數(parameter)伺服器。
3.節點
節點僅是ROS包中的一個可執行檔案。ROS節點利用一個ROS客戶端庫(client library)來與其他節點通訊。節點可以向一個主題(Topic)公佈或訂閱訊息;也能利用或提供一個服務(Service)。
4.客戶端庫
ROS客戶端庫允許節點被寫入不同的程式語言來通訊:
- rospy = python client library
- roscpp = c++ client library
5.roscore
在使用ROS時首先執行roscore。
roscore
1
你會看到類似這樣的訊息:
… 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]
123456789101112131415161718192021222324
若roscore未初始化,則需進行網路配置。
若roscore沒有初始化併發送了缺少許可權的訊息,則~/.ros資料夾被root所有,遞迴地改變那個資料夾的所屬:
$ sudo chown -R <your_username> ~/.ros
1
6.使用rosnode
新開啟一個終端,使用rosnode來看執行的roscore做的。。。
rosnode顯示關於現在執行的ROS節點的資訊。rosnode list命令累出這些活動的節點。
$ rosnode list
1
你會看到
/rosout
1
rosnode info命令返回一個特定的節點的資訊。
$ rosnode info /rosout
1
這會給我們更多關於rosout的資訊:
Node [/rosout]
Publications:
- /rosout_agg [rosgraph_msgs/Log]
Subscriptions:
- /rosout [unknown type]
Services:
- /rosout/set_logger_level
- /rosout/get_loggers
contacting node http://machine_name:54614/ …
Pid: 5092
1234567891011121314
接下來用rosrun來建立另一個節點。
7使用rosrun
rosrun使用包的名稱來直接在一個包內執行一個節點(而不必知道包的路徑)。
$ rosrun [package_name] [node_name]
1
現在執行turtlesim包中的turtlesim_node。開啟一個新的終端,並執行:
$ rosrun turtlesim turtlesim_node
1
就可以看到一下視窗:
你看到的turtlesim可能會不同。
在新終端中輸入rosnode list就會看到多了turtlesim節點。
可以在命令列給節點重新命名。關閉turtlesim視窗一結束該節點並使用一個重對映引數重新執行此命令來改變節點的名稱:
$ rosrun turtlesim turtlesim_node --name:=my_turtle
1
也可以使用新的rosnode命令,ping,來檢測節點是否線上:
$ rosnode ping my_turtle
1
這會看到:
rosnode: node is [/my_turtle]
pinging /my_turtle with a timeout of 3.0s
xmlrpc reply from http://aqy:42235/ time=1.152992ms
xmlrpc reply from http://aqy:42235/ time=1.120090ms
xmlrpc reply from http://aqy:42235/ time=1.700878ms
xmlrpc reply from http://aqy:42235/ time=1.127958ms
123456
8.回顧
這篇教程包含了:
- roscore = ros + core::master(提供ROS的名稱服務) + rosout(stdout/stderr) + 引數服務(後面介紹)
- rosnode = ros + node: 獲得節點訊息的ROS工具。
- rosrun = ros + run: 從給定的包中執行節點。
本文來自 InfinityForever 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/InfinityForever/article/details/50492473?utm_source=copy