1. 程式人生 > >1.ROS啟動小烏龜

1.ROS啟動小烏龜

mil 節點數 ber 移動 name 了解 geometry margin color

啟動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啟動小烏龜