<source : greatway9999>

一、前言

接觸ROS後,你是否聽過 gmaping、localization、 SLAM、 costmaps 和 paths 呢?這些名詞都和自走機器人有關,接下來將以 Clearpath 的 Jackal 模擬進行實作。 


二、實作步驟

步驟1.安裝Jackal模擬的相關套件

sudo apt-get install ros-kinetic-jackal-simulator ros-kinetic-jackal-desktop



接下來需要 Jackal 導航套件。先創建一個 "sourced workspace",讓我們可以在一些檔案上進行改變,並觀察它如何影響我們的模擬。指令如下 :

cd ~
mkdir -p jackal_navigation/src
cd jackal_navigation/src && catkin_init_workspace
git clone https://github.com/jackal/jackal.git
git clone https://github.com/jackal/jackal_simulator.git
git clone https://github.com/clearpathrobotics/LMS1xx.git
git clone https://github.com/ros-drivers/pointgrey_camera_driver.git
cd ..
catkin_make



" Jackal_navigation "套件只包含在參數路徑上的設定檔,接著啟動 Launch 檔去讀取參數和啟動導航所需的套件。用模擬的雷射來進行,指令如下 :
source ~/jackal_navigation/devel/setup.bash
roslaunch jackal_gazebo jackal_world.launch config:=front_laser
---
[bug] : 如果出現如下圖的GazeboRosControlPlugin missing的錯誤,解決方式請見本篇文章
---

如果無法在真實世界使用 Jackal,使用 Gazebo 進行模擬會是很好的選擇。模擬提供里程計和掃描的資料,讓Jackal能自主移動。打開新的 terminal ,輸入更新環境變數的指令並啟動 "odom_navigation_demo"的launch檔。
source ~/jackal_navigation/devel/setup.bash
roslaunch jackal_navigation odom_navigation_demo.launch
---
[bug] : 如果出現如下圖的cannot launch node of type [move_base/move_base]: move_base的錯誤,解決方式請見本篇文章
---

這個launch檔會啟動 "move_base" 的套件,"move_base" 讓 Jackal只需透過雷射和里程計資料,就能到達目地點。

在進行導航開始前,我們要先開一個新的terminal,更新環境變數,再透過 "gmapping" launch檔在Gazebo環境中建地圖。指令如下 :
source ~/jackal_navigation/devel/setup.bash
roslaunch jackal_navigation gmapping.launch


接著打開一個新的terminal,用Jackal的 gmaping 設定檔啟動Rviz。
source ~/jackal_navigation/devel/setup.bash
roslaunch jackal_viz view_robot.launch config:=gmapping

gmapping

試著調整畫面左邊的參數,看看不同的顯示狀態。留意到有兩個地圖。一個是可視化gmapping所建的 /map 的話題。若點擊其他地圖,可以看到來自/move_base/global_costmap/costmap的 costmap。Costmap顯示了障礙物的膨脹去解釋機器人的足跡。膨脹的半徑愈大,機器人離障礙物的距離越遠。

在我們開始建圖前,可以在Rviz可視化中新增其他觀點。點擊左下角 "add",尋找 " /move_base/NavfnROS/plan ",並點擊 "Path"。這可以幫助我們看到 Jackal在想什麼,能顯示Jackal規劃到達目標的路徑,並且我們能看到即時的變化。



步驟2.Mapping(建圖)

使用Rviz視窗中頂部的工具列,發出 "2D Nav Goal" 給 Jackal。當它移動時,更多的地圖會被發現。可以留意一下當Jackal發現障礙物時,路徑如何變化。

以下4張圖為示意 :





步驟3.LOCALIZATION(定位)

一旦你滿意 Jackal 所建的地圖,可使用以下指令存圖 :
rosrun map_server map_saver -f jackal_world
---
備註: 若map_server未裝,則輸入 "sudo apt-get install ros-kinetic-map-server"進行安裝。
---

儲存後的圖可作為後續 AMCL 所用。接著利用指令 "Ctrl + c",關閉所有 ROS terminal。然後在不同的Terminal中啟動模擬器,啟動內含先前所建地圖的AMCL launch檔和有先前設定檔在內的 Rviz launch檔。若 Terminal 已關閉,必須要再次更新環境變量。

開啟 AMCL 展示的 Launch檔,指令參考如下,記得要確認將 "jackal_world.yaml"的絕對路徑載入。
roslaunch jackal_gazebo jackal_world.launch config:=front_laser

roslaunch jackal_navigation amcl_demo.launch map_file:=<ABSOLUTE_PATH>/jackal_world.yaml
ex.roslaunch jackal_navigation amcl_demo.launch map_file:=/home/great/jackal_world.yaml
roslaunch jackal_viz view_robot.launch config:=localization
---
[bug] : 如果出現如下圖的ERROR: cannot launch node of type [amcl/amcl]: amcl 的錯誤,請輸入安裝navigation指令進行安裝,再更新環境變量。


$ sudo-apt-get install ros-kinetic-navigation
$ source ~/[工作空間]/devel/setup.bash
---

為了展示的目的,最好將機器人的模型與軸隱藏,且勾選左次 PoseArray(姿態陣列)的選取方塊。在 Jackal 附近的紅色箭頭,是基於Monte Carlo localization (蒙地卡羅定位) 所估算的Jackal的可能姿態。這需要掃描資料和座標轉換,且估算我們先前錄製的資料,來決定在Jackal世界Jackal中的位置。

amcl

若你給 Jackal 一個 2D nav目標,你可以看到姿態陣列如何變的更精準,當系統在它移動時而獲得更多資訊,並排除可能姿態


另一個重要的工具是 2D 姿態估計。你可以在定位上透過給予Jackal在地圖中的位置來協助 Jackal 。你將注意到姿態陣列將會位於2D姿態估計的一般區域,且透過消除姿態來讓資訊越來越準確。

步驟4.CUSTOMIZATION (定制化)

在 urdf 的資料夾中有一個 " custom_example.urdf "檔案,可試著確認一下檔案,檢視有哪些感測器,並且裝在jackal的哪個部位。

一旦準備好啟動停頓的 Jackal ,設定 " JACKAL_URDF_EXTRAS " 的參數到 "custome_example.urdf"檔案中的路徑。
export JACKAL_URDF_EXTRAS=~/jackal_navigation/src/jackal/jackal_description/urdf/custom_example.urdf


更新環境變數並啟動 jackal模擬的launch檔。
source ~/jackal_navigation/devel/setup.bash
roslaunch jackal_gazebo jackal_world.launch

現在應該可以看到完整的 Jackal。有2個角度朝下的 bumblebee 相機,2個Lidar(光達)掃描前方和後方,有1個在Jackal前方的灰點相機直接傳送影像給我們。

啟動Launch檔到Rviz中可視化我們的新感測器。
roslaunch jackal_viz view_robot.launch

可以將這些新感測器加入Rviz中,因此你可以從不同相機看到不一樣的影像。

如果想要有更多挑戰,試著在"jackal_navigation"檔中改變導航參數。也可試著在不同的gazebo世界中建圖。


---
參考資料 :

#自主移動 #navigation #jackal #move_base #AMCL #gmapping #map

0 留言