一、准備工作
1、打開roscore
roscore
2、turtlesim
打開一個turtulesim節點
rosrun turtlesim turtlesim_node
3、turtle keyboard teleoperation
rosrun turtlesim turtle_teleop_key
現在你可以使用鍵盤上的方向鍵來控制turtle運動了。如果不能控制,請選中turtle_teleop_key所在的終端窗口以確保你的按鍵輸入能夠被捕獲。
二、ROS Topic
turtlesim_node節點和turtle_teleop_key節點之間是通過一個ROS話題來互相通信的。turtle_teleop_key在一個話題上發布按鍵輸入消息,而turtlesim則訂閱該話題以接收該消息。下面讓我們使用rqt_graph來顯示當前運行的節點和話題。
1、Using rqt_graph
rqt_graph能夠創建一個顯示當前系統運行情況的動態圖形
(1)安裝:
sudo apt-get install ros-kinetic-rqt
(2)使用:
rosrun rqt_graph rqt_graph
如果你將鼠標放在適當位置,相應的ROS節點(藍色和綠色)和話題(紅色)就會高亮顯示。正如你所看到的,turtlesim_node和turtle_teleop_key節點正通過一個名為 /turtle1/cmd_vel的話題來互相通信。
2、介紹rostopic
rostopic命令工具能讓你獲取有關ROS話題的信息。
rostopic bw display bandwidth used by topic
rostopic echo print messages to screen
rostopic hz display publishing rate of topic
rostopic list print information about active topics
rostopic pub publish data to topic
rostopic type print topic type
3、使用rostopic echo
(1)語法:
rostopic echo [topic]
(2)作用:
Rostopic echo可以顯示在某個話題上發布的數據。
(3)demo
rostopic echo /turtle1/cmd_vel
4、使用rostopic list
(1)作用:
Rostopic list能夠列出所有當前訂閱和發布的話題。
(2)語法:
Usage: rostopic list [/topic] Options: -h, --help show this help message and exit -b BAGFILE, --bag=BAGFILE list topics in .bag file -v, --verbose list full details about each topic -p list only publishers -s list only subscribers
(3)demo
rostopic list -v
三、ROS Messages
話題之間的通信是通過在節點之間發送ROS消息實現的。對於發布器(turtle_teleop_key)和訂閱器(turtulesim_node)之間的通信,發布器和訂閱器之間必須發送和接收相同類型的消息。這意味着話題的類型是由發布在它上面的消息類型決定的。使用rostopic type命令可以查看發布在某個話題上的消息類型。
1、使用rostopic type
(1)作用:
可以返回所發布話題的消息類型
(2)語法:
rostopic type [topic]
(3)demo
rostopic type /turtle1/cmd_vel
返回 geometry_msgs/Twist 我們可以看看這個消息類型的具體信息(使用rosmsg)
rosmsg show geometry_msgs/Twist
四、使用rostopic發送消息
1、rostopic pub
(1)語法:
rostopic pub [topic] [msg_type] [args]
(2)作用:
可以把數據發布到當前某個正在廣播的話題上。
(3)demo
命令成分 | 作用 |
rostopic pub | 發布消息到話題的指令 |
-1 | 只發送一次 |
-r | 表示重復發送命令 |
/turtle1/cmd_vel | 發送給哪個話題 |
geometry_msgs/Twist | 發送消息類型 |
-- | 表示后面出現的 ' - ' 不表示命令 |
'[2,0,0]' '[0,0,1.8]' | 發送消息內容,格式可以查詢http://wiki.ros.org/ROS/YAMLCommandLine |
發送一次命令:
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2,0,0]' '[0,0,1.8]'
重復發送命令
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
2、rostopic hz
(1)作用:
查詢消息發布的頻率
(2)語法:
rostopic hz [topic]
(3)demo:
rostopic hz /turtle1/pose
(4)我們也可以結合rostopic type和rosmsg show命令來獲取關於某個話題的更深層次的信息
rostopic type /turtle1/cmd_vel | rosmsg show
5、rqt_plot
(1)作用:
rqt_plot命令可以實時顯示一個發布到某個話題上的數據變化圖形
(2)用法:
rosrun rqt_plot rqt_plot
然后可以跳出的小程序中加入話題數據即可。