上一篇用個簡短的程式來說明 ROS 節點的樣貌,不過只輸出文字距離開發一個機器人軟體還太遙遠了。因此這篇想用 TurtleSim 來進一步介紹節點怎麼控制機器人,模擬機器人軟體在 ROS 系統運作的感覺。
TurtleSim 是 ROS 官方提供的一個簡易機器人模擬器套件,它提供一個 2D 環境以及一個可供使用者控制的小型機器人(通常呈現為一個小烏龜的圖像),讓初學者練習基本的 ROS 指令和熟悉 ROS 概念。
TurtleSim 的套件 turtlesim
一般並不會包含在 ROS 標準安裝流程中,因此需要先安裝:
輸入指令安裝:
根據自己的版本輸入以下指令安裝 TurtleSim。
$ sudo apt-get install ros-noetic-turtlesim
啟動 ROS 核心服務:
$ roscore
啟動 TurtleSim 的主要節點 turtlesim_node
:
在啟動主節點之後,另外新開一個終端機視窗,執行啟動 TurtleSim 的指令。
$ rosrun turtlesim turtlesim_node
成功啟動 turtlesim_node
之後就會開啟烏龜模擬器視窗。
turtle_teleop_key
鍵盤控制烏龜移動在 turtlesim 套件中還提供另一個節點 turtle_teleop_key
,它會監聽鍵盤的方向鍵輸入,並且根據按鍵來控制視窗中的烏龜移動。我們在另一個終端機輸入以下指令,就可以假裝烏龜是遙控車來操控它了。
$ rosrun turtlesim turtle_teleop_key
不過缺點就是這個節點一次只接收一個按鍵輸入,並且會被下一個按鍵輸入覆蓋掉,我自己覺得操作起來的手感滿詭異的,和操控遙控車也是相差甚遠。
ROS 的命令列工具(ROS command line tools,也就是 ros
開頭的指令系列)中, rosnode
提供許多當前活躍節點的可用指令。
rosnode list
列出當前活躍 Node這個指令會列出當前 ROS 系統中所有運作中的節點名稱。
例如現在可以得到兩個節點 /rosout
和 /turtlesim
:
$ rosnode list
/rosout
/turtlesim
/rosout
(日誌節點):
/rosout
是一個特殊的節點,使用啟動指令 roscore
時會一起被建立點,它用於收集和記錄 ROS 系統中其他節點的日誌資訊。
/turtlesim
:
這是 TurtleSim 應用程序的主要節點,負責定義和呈現烏龜機器人的行為和狀態。
rosnode info
提供特定節點的詳細訊息這個指令會列出特定節點的現有的訊息(Message)類型,包含話題(Topics)、服務(Services)和一些程序間溝通的資訊。
格式:
rosnode info <node-name>
例如查看 /turtlesim
的資訊,應該會得到與它關聯的話題有 /turtle1/color_sensor
、/turtle1/pose
、/turtle1/cmd_vel
,服務則有 /clear
、/kill
等。
$ rosnode info /turtlesim
/turtle1/color_sensor
/turtle1/pose
/turtle1/cmd_vel
/clear
/kill
rosnode kill
終止節點這個指令會列出當前 ROS 系統中所有活躍節點的名稱,並且詢問要終止哪一個節點。
$ rosnode kill
1. /rosout
2. /turtlesim
Please enter the number of the node you wish to kill.
> 2
killing /turtlesim
killed
到目前為止,雖然不太多,但多少有一點點操控機器人的感覺了吧。
下一篇會繼續利用 TurtleSim 介紹關於節點之間傳遞的訊息,還有話題與服務之間的差異,接著就能嘗試讓這些節點之間通訊溝通,做到更多事情了。