5.1 Setting
將4中的所有視窗以ctrl+c退出
重新執行以下:
roscore # terminal A
rosrun turtlesim turtlesim_node # terminal B, will see a simulator
rosrun turtlesim turtle_teleop_key # terminal C, using arror keys to move the turtle
如果執行roscore遇到
roscore cannot run as another roscore/master is already running.
Please kill other roscore/master processes before relaunching
那代表roscore並沒有被正常關閉, 不過沒差 只要有roscore在運行就好
5.2 一些命令
- rostopic: 可獲取關於topic的訊息
- rqt_graph: 可獲得subscriber, publisher, topic間的關係圖
- rosmsg: 可獲取關於message的相關訊息
- rqtplot: 可以看到發到特定topic當中的message當中的數據變化
5.3 ROS Topics
在上面, turtlesim_node和turtle_teleop_key這兩個node是透過一個topic來互相溝通的
turtle_toleop_key在這個topic上publish messages, 而turtlesim subscribe這個topic已接收此messages, 我們可以透過rqt_graph來顯示這其中的關係
# 如果沒安裝
sudo apt-get install ros-indigo-rqt
sudo apt-get install ros-indigo-rqt-common-plugins
rqt_graph # terminal D
you will see node /teleop_turtle send message to node /turtlesim through topic /turtle1/cmd_vel
現在來看一下在topic上所publish的數據
rostopic list # 找要看的topic的名稱, 即/turtle1/cmd_vel
rostopic echo /turtle1/cmd_vel # terminal E
此時terminal就會開始監聽這個topic, 因為我們現在沒有任何數據在上面發布, 因此不會看到任何訊息
接下來回到鍵盤操控的terminal(e.g. C)並隨便移動一下, 你應該可以在terminal E當中看到訊息的顯示
接下來我們重新整理一下ROS graph, 我們可以看到現在多了一個node訂閱了trutle1/cmd_vel這個topic, 這個node即為我們剛才的rostopic echo
如果我們想要看詳細的publish/subscribe和topic間的資訊, 可以利用以下命令達成
rostopic list -v # -v: verbose
5.4 ROS Messages
現在我們有publisher(turtle_teleop_key)和subscriber(turtlesim), 在這兩者之間必須要send/receive相同type的message, 我們利用以下命令可以看到在某個topic上的message是屬於什麼type
# rostopic type [topic]
rostopic type /turtle1/cmd_vel # output:geometry_msgs/Twist
知道message type之後, 我們可以透過rosmsg來獲取更近一步的訊息
rosmsg show geometry_msgs/Twist
如此可看到六個變數, 分別代表位置和角度
我們也可以簡單地用pipe以一行命令來達成這件事情
rostopic type /turtle1/cmd_vel | rosmsg show
現在我們可以試著手動的去發送命令給turtle
# rostopic pub [topic] [msg_type] [args]
rostopic pub -l /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2, 0, 0]' '[0, 0, 1.8]'
我們現在可以看到烏龜以2的linear vel和1.8的angular vel移動
以上命令解釋如下
rostopic pub: 發送message給指定的topic -l: rostopic pub將會在發送一條message後退出(實際上去掉這個flag後測試並沒有退出, 不清楚原因) -r 1:表示以1hz的頻率發送這段命令, 如果去除你會看到烏龜跑一下就會停止 --: 表示接下來的參數不是命令選項, 如果你在輸入的數據當中有負號, 那麼這個flag是必要的, 不過基本上都推薦在命令選項結束後都該用此flag來分隔
現在我們重新整理後再看一下ROS Graph, 可以看到現在又多一個node負責publish, 此即為我們上面的rostopic pub
5.5 rqt_plot
輸入
rqt_plot
可以看到目前message當中的數值隨著時間變化, 可自行加入如/turtle1/pose/y之類的來觀察