ROS中的關(guān)鍵組件

一、roslaunch

roslaunch是一個用于自動啟動一系列ROS節(jié)點的命令行工具,從表面上看該命令和rosrun相似。但是roslaunch操作launch文件而不是節(jié)點,launch文件是描述一組節(jié)點以及它們話題重映射和參數(shù)的XML文件。根據(jù)規(guī)范,這些文件具有.launch后綴。

每個<node>標(biāo)簽包括了聲明ROS圖中節(jié)點的名字屬性,該節(jié)點所在的包名,以及節(jié)點的類型,也就是可執(zhí)行程序的文件名。

除此之外,roslaunch還有許多特性,例如通過ssh啟動網(wǎng)絡(luò)中其他計算機(jī)上程序的能力,以及在節(jié)點崩潰后自動重啟節(jié)點的功能。roslaunch一個最重要的特性,是在終端中按下Ctrl+c快捷鍵,可以結(jié)束roslaunch之中所有的節(jié)點。Ctrl+c快捷鍵在UNIX系統(tǒng)中常用于強(qiáng)制結(jié)束程序,roslaunch也遵循這一規(guī)范,按下時,結(jié)束所有包含的節(jié)點,并且結(jié)束本身。

一個簡單的roslaunch文件如下所示:

<launch>

? ? <node name="demo" pkg="demo_package"

? ? ? ? ? type="demo_pub" output="screen"/>

? ? <node name="demo" pkg="demo_package"

? ? ? ? ? type="demo_sub" output="screen"/>

</launch>

1.roslaunch標(biāo)簽

launch標(biāo)簽就像一個大括號,規(guī)定了一片區(qū)域,所有的launch文件都由<launch>開頭,由</launch>結(jié)尾,所有的描述標(biāo)簽都要寫在<launch></launch>之間。

2.node標(biāo)簽

node標(biāo)簽是launch文件里最常見的標(biāo)簽,每個node標(biāo)簽里包括了ROS圖中節(jié)點的名稱屬性name、該節(jié)點所在的包名pkg以及節(jié)點的類型type(其實就是可執(zhí)行文件的名稱,如果是用Python編寫的就填寫xxx.py,如果是cpp就寫編譯生成的可執(zhí)行文件名),在上面的例子中還出現(xiàn)了output這個東西,這個屬性在調(diào)試階段很有用,output=“screen”表示了將終端輸出轉(zhuǎn)儲在當(dāng)前的控制臺上,而不是在日志文件中。

3.重映射

remap標(biāo)簽顧名思義重映射,ROS支持topic的重映射,remap標(biāo)簽里包含一個original-name和一個new-name,及原名稱和新名稱。

如果拿到一個節(jié)點,這個節(jié)點訂閱了"chatter"topic,然而你自己寫的節(jié)點只能發(fā)布到"demo/chatter"topic,由于這兩個topic的消息類型是一致的,你想讓這兩個節(jié)點進(jìn)行通訊,那么可以在launch文件中這樣寫:

<remap from="chatter" to="demo/chatter">

(其余部分待研究)

二、tf坐標(biāo)系

對于一個機(jī)器人,機(jī)器人系統(tǒng)通常具有許多隨時間變化的3D坐標(biāo)系,例如世界坐標(biāo)系(world frame),基準(zhǔn)坐標(biāo)系(base frame),夾具坐標(biāo)系(gripper frame),頭部坐標(biāo)系(head frame)等。tf包可以隨時記錄所有這些坐標(biāo)系,并可以解決如下問題:

5秒前,機(jī)器人頭部坐標(biāo)系相對于世界(全局)坐標(biāo)系的關(guān)系是什么樣的?

機(jī)器人夾取的物體相對于機(jī)器人的中心坐標(biāo)的位置是什么?

機(jī)器人中心坐標(biāo)系相對于全局坐標(biāo)系的位置在哪里?

(其余部分待研究)

三、rviz

RVIZ是一個強(qiáng)大的可視化工具,可以看到機(jī)器人的傳感器和內(nèi)部狀態(tài)。

操作步驟:

1.啟動ROS master,打開master服務(wù)器。

roscore??

2.配置ROS啟用重放數(shù)據(jù)中的時間而非本機(jī)時間,影響整個系統(tǒng)所有時間API的輸出結(jié)果。在默認(rèn)情況下,ROS使用ubuntu系統(tǒng)的時間,也就是墻上時鐘時間(wall clock)。但我們重播一個記錄歷史文件時,里面記錄的是歷史時間,所以我們需要告訴ROS從現(xiàn)在起開始啟用模擬時間。

rosparam?set?use_sim_time?true??

3.下載ROS提供的激光數(shù)據(jù)采集記錄文件

wget?http://pr.willowgarage.com/data/gmapping/basic_localization_stage.bag??

4.啟動gmapping, 并監(jiān)聽 scan_base topic發(fā)來的消息。該topic是由模擬器發(fā)布的。

rosrun?gmapping?slam_gmapping?scan:=base_scan??

5.啟動模擬器重放激光數(shù)據(jù)

6.啟動RViz,點擊 add 按鈕(左下方) ,在彈出的列表中選擇 map,點擊OK,這時開始展現(xiàn)一個空的地圖

rosbag?play?--clock?basic_localization_stage.bag??

7.最關(guān)鍵的一步,要告訴RViz? 生成map信息的topic是什么。我們前面講到過,gmapping輸出的topic是 map,如下圖配置,立即就可以看到地圖的動態(tài)建立了。

rosrun?rviz?rviz

8.隨著時間的推進(jìn),慢慢的整個地圖就顯示出來了

(調(diào)試未成功)

四、gazebo

而Gazebo則是三維平面的模擬器,可以自己在地圖上添加幾何體。?

1.先安裝turltebot,啟動Gazebo模擬器。

roslaunch turtlebot_gazebo turtlebot_world.launch

2.這樣就啟動成功了,第一次啟動可能要等個幾分鐘或十幾分鐘,因為要從網(wǎng)絡(luò)上獲取模型的更新,如果打開后發(fā)現(xiàn)窗口中什么都沒有,則看看終端有沒沒有說是在獲取更新之類的信息。

sudo apt-get install ros-indigo-turtlebot-apps ros-indigo-turtlebot-rviz-launchers

3.接下來控制模擬機(jī)器人移動,通過鍵盤控制

roslaunch turtlebot_teleop keyboard_teleop.launch-screen

4.接著在開一個rviz,Gazebo相當(dāng)于模擬現(xiàn)實世界,而RViz獲得對周圍的事物的傳感器信息。接下來創(chuàng)建地圖。

roslaunch turtlebot_gazebo gmapping_demo.launch

(調(diào)試未成功)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容