一摧扇、roslaunch
roslaunch是一個用于自動啟動一系列ROS節(jié)點的命令行工具振亮,從表面上看該命令和rosrun相似凤类。但是roslaunch操作launch文件而不是節(jié)點映挂,launch文件是描述一組節(jié)點以及它們話題重映射和參數(shù)的XML文件泽篮。根據(jù)規(guī)范,這些文件具有.launch后綴柑船。
每個<node>標簽包括了聲明ROS圖中節(jié)點的名字屬性帽撑,該節(jié)點所在的包名,以及節(jié)點的類型鞍时,也就是可執(zhí)行程序的文件名亏拉。
除此之外,roslaunch還有許多特性逆巍,例如通過ssh啟動網(wǎng)絡中其他計算機上程序的能力及塘,以及在節(jié)點崩潰后自動重啟節(jié)點的功能。roslaunch一個最重要的特性锐极,是在終端中按下Ctrl+c快捷鍵笙僚,可以結(jié)束roslaunch之中所有的節(jié)點。Ctrl+c快捷鍵在UNIX系統(tǒ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標簽
launch標簽就像一個大括號,規(guī)定了一片區(qū)域鸳兽,所有的launch文件都由<launch>開頭掂铐,由</launch>結(jié)尾,所有的描述標簽都要寫在<launch></launch>之間揍异。
2.node標簽
node標簽是launch文件里最常見的標簽全陨,每個node標簽里包括了ROS圖中節(jié)點的名稱屬性name、該節(jié)點所在的包名pkg以及節(jié)點的類型type(其實就是可執(zhí)行文件的名稱衷掷,如果是用Python編寫的就填寫xxx.py辱姨,如果是cpp就寫編譯生成的可執(zhí)行文件名),在上面的例子中還出現(xiàn)了output這個東西戚嗅,這個屬性在調(diào)試階段很有用雨涛,output=“screen”表示了將終端輸出轉(zhuǎn)儲在當前的控制臺上枢舶,而不是在日志文件中。
3.重映射
remap標簽顧名思義重映射替久,ROS支持topic的重映射凉泄,remap標簽里包含一個original-name和一個new-name,及原名稱和新名稱蚯根。
如果拿到一個節(jié)點后众,這個節(jié)點訂閱了"chatter"topic,然而你自己寫的節(jié)點只能發(fā)布到"demo/chatter"topic颅拦,由于這兩個topic的消息類型是一致的蒂誉,你想讓這兩個節(jié)點進行通訊,那么可以在launch文件中這樣寫:
<remap from="chatter" to="demo/chatter">
(其余部分待研究)
二矩距、tf坐標系
對于一個機器人拗盒,機器人系統(tǒng)通常具有許多隨時間變化的3D坐標系怖竭,例如世界坐標系(world frame)锥债,基準坐標系(base frame),夾具坐標系(gripper frame)痊臭,頭部坐標系(head frame)等哮肚。tf包可以隨時記錄所有這些坐標系,并可以解決如下問題:
5秒前广匙,機器人頭部坐標系相對于世界(全局)坐標系的關(guān)系是什么樣的允趟?
機器人夾取的物體相對于機器人的中心坐標的位置是什么?
機器人中心坐標系相對于全局坐標系的位置在哪里鸦致?
(其余部分待研究)
三潮剪、rviz
RVIZ是一個強大的可視化工具,可以看到機器人的傳感器和內(nèi)部狀態(tài)分唾。
操作步驟:
1.啟動ROS master抗碰,打開master服務器。
roscore??
2.配置ROS啟用重放數(shù)據(jù)中的時間而非本機時間绽乔,影響整個系統(tǒng)所有時間API的輸出結(jié)果弧蝇。在默認情況下,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.隨著時間的推進斑鼻,慢慢的整個地圖就顯示出來了
(調(diào)試未成功)
四蒋纬、gazebo
而Gazebo則是三維平面的模擬器,可以自己在地圖上添加幾何體坚弱。?
1.先安裝turltebot蜀备,啟動Gazebo模擬器。
roslaunch turtlebot_gazebo turtlebot_world.launch
2.這樣就啟動成功了荒叶,第一次啟動可能要等個幾分鐘或十幾分鐘碾阁,因為要從網(wǎng)絡上獲取模型的更新,如果打開后發(fā)現(xiàn)窗口中什么都沒有些楣,則看看終端有沒沒有說是在獲取更新之類的信息脂凶。
sudo apt-get install ros-indigo-turtlebot-apps ros-indigo-turtlebot-rviz-launchers
3.接下來控制模擬機器人移動,通過鍵盤控制
roslaunch turtlebot_teleop keyboard_teleop.launch-screen
4.接著在開一個rviz愁茁,Gazebo相當于模擬現(xiàn)實世界蚕钦,而RViz獲得對周圍的事物的傳感器信息。接下來創(chuàng)建地圖鹅很。
roslaunch turtlebot_gazebo gmapping_demo.launch
(調(diào)試未成功)