1.ROS啟動小烏龜
啟動turtlesim
在三個不同的終端中分別執行如下三個指令
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
查看軟件包列表和定位軟件包 package使用命令
rospack list
找到一個軟件包的目錄,使用rospack find命令
rospack find package-name
例如:rospack find turtle
查看軟件包
rosls package-name
例如:rosls turtlesim
訪問軟件包roscd package-name
例如:roscd turtlesim/images
節點管理器:ROS的一個基本目標是使機器人專家設計的很多稱為節點(node)的幾乎相對獨立的小程序能夠同時運行。為此,這些節點必須能夠彼此通信。ROS中實現通信的關鍵部分就是ROS節點管理器。
啟動節點管理器,使用如下命令
roscore
節點管理器應該在使用ROS的全部時間內持續運行(也就是說這個終端運行roscore之後就不要關閉!)。一個合理的工作流程是在一個終端啟動roscore,然後打開其他終端運行其他程序。除非你已經完成ROS的相關工作,否則一般沒有理由終止roscore命令。當結束時,可以通過在roscore終端鍵入Ctrl-C停止節點管理器。
節點Nodes:一旦啟動了roscore後,就可以運行ros程序了,ros運行程序的實例被稱為節點。節點的名字都是唯一的。比如在turtlesim的例子中,我們要啟動兩個節點,分別為模擬turtle的程序turtlesim以及控制其運動的程序turtle_teleop_key。節點turtle_teleop_key節點的作用是捕捉方向鍵被按下,然後將按鍵信息轉化為運動指令,然後將指令發送導turtlesim_node節點
啟動節點:
rosrun package-name executable-name
第一個參數是功能包的名字,第二個參數是該軟件功能包中可執行文件的名稱。比如我們要創建一個模擬turtle的節點,一個控制turtle移動的節點,則在兩個終端裏面分別輸入以下命令
終端1:
rosrun turtlesim turtlesim_node
終端2:
rosrun turtlesim turtle_teleop_key
查看節點列表命令:rosnode list
例如:我們在turtlesim的例子中,輸入rosnode list後,顯示如下結果
/ rosout
/ teleop_turtle
/ turtlesim
(比較rosnode list的輸出與rosrun命令中的可執行文件的名稱,你會發現二者並不一定相同)
事實上,可以使用rosrun命令顯式設置節點的名稱,語法如下:
rosrun package-name executable-name __name:=node-name
這種方法將使用node-name參數給出的名稱覆蓋節點的默認名
其中rosout是一個特殊的節點請註意,通過roscore自動啟動,
一般除了在終端使用 rosnode list命令查看當前的節點情況外,ROS還提供了一種更加直觀的方式來顯示ROS節點數,命令為:rqt_graph,然後顯示如下節點分布情況。(在默認情況下,rqt_graph隱藏了其認為只在調試過程中使用的節點。你可以通過取消"Hide debug"選項來禁止這個特性)
查看節點信息:rosnode info node-name
消息和消息類型
目前為止,我們已經了解了這些節點能相互傳遞消息,但這些消息裏到底包含了什麽信息,我們對此還是一無所知。下面,我們將深入探討話題和消息。
話題列表:
rostopic list
在終端中顯示結果為:
/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
其實細心的你可以從上面的rqt的圖中就可以看的出來,途中方框表示的是topic,剛好是5個,所以這裏的List顯示的topic 為5個也不足為奇了。
在上面啟動的兩個節點中,控制節點檢測鍵盤方向按鍵,然後在turtlesim中的烏龜就會移動,他們之間是以消息傳遞的,就是通過某個話題發布消息,我們現在打開另外一個終端,輸入命令
rostopic echo /turtle1/cmd_vel
看看具體傳遞的消息是啥?
繼續控制烏龜移動,可以發現在終端上的情況
可見消息內容為位移和角度情況。但是為什麽數據格式是0.0、2.0等等格式呢,那麽我們來具體看看話題的信息,
查看話題信息 rostopic info topic-name
輸入:rostopic info /turtle1/cmd_vel
其中指出了Type、Publishers、Subscribers,其中第一個type特別重要,因為它定義了該話題中的消息類型。因此在話題/turtle1/cmd_vel中傳送的消息類型為
geometry_msgs/Twist
理解消息的類型很重要,因為它決定了消息的內容。也就是說,一個話題的消息類型能告訴你該話題中每個消息攜帶了哪些信息,以及這些信息是如何組織的。接下來我們順藤瓜,去看看消息類型的具體內容——查看消息類型。
查看消息類型:命令為:
rosmsg show message-type-name
對上述的geometry_msgs/Twist嘗試如下命令
rosmsg show geometry_msgs/Twist
理解消息類型的命名:
和ROS裏其他的程序一樣,每條消息類型都屬於一個特定的包。消息類型名總會包含一個斜杠,斜杠前面的名字是包含它的包:
package-name/type-name
例如:geometry_msgs/Twist消息類型可以按照如下方法分解
geometry_msgs + Twist => geometry_msgs/Twist
1.ROS啟動小烏龜