學習輕鬆應用 ROS 機器人作業系統 – Jetson Nano 與 光學雷達的操作應用

Jetson Nano Developer Kit(以下皆簡稱Jetson Nano ) 是 NVIDIA 於 2019 年4月,所推出的具有 GPU裝置的小型單板電腦。 NVIDIA 也開源了關於使用 Jetson Nano ,完成一個小型的智慧移動平台專案 Jetbot

不過在 Jetbot 專案上,ROS系統的操作並沒有關於 Lidar的使用方式。因此本篇文章將運用Jet-falcon 介紹如何在 Jetson Nano 上,使用 ROS系統與光學雷達(以下簡稱Lidar),來建立一個室內空間的地圖啦!

請記得自行在「~/.bashrc」檔案最下方中 , 新增指令載入3個與該專案相關的環境設定檔、變數

 圖0-1 : 在 ~/.bashrc 檔案中,新增指令
圖0-1 : 在 ~/.bashrc 檔案中,新增指令

也請記得執行「jetbot_ros_dependiences.sh」檔案,下載本專案所需要的依賴。由於 Jet-falcon除了 Lidar外,並無額外的感測器設備,因此我們也會使用 ROS的其中一個 Package 「rf2o_laser_odometry 」,來完成里程計的發布。這是由 github 上的使用者 tianb03所釋放的開源 Package。

一切準備就緒後,我們就來看該如何利用 Jetson Nano 與 Lidar ,完成室內地圖的建立吧!

本篇文章將分成兩大部分 :

1. 校正 Jet-falcon的移動路徑

2. 建立與儲存地圖

校正 Jet-falcon的移動路徑

每一台 Jet-falcon 在前進時,多少都會無法完整的前進出一條直線,這主要是因為每個 TT減速馬達帶動輪胎前進時,所受的阻力並不會完全相同

走不太直的Jetfalcon
走不太直的Jetfalcon

因此, Jet-falcon 移植了開源的專案 Duckietown 中的馬達校正方法,來協助校正 Jet-falcon 的移動路徑。校正的公式如下 :

校正公式-1
校正公式-1
校正公式-2
校正公式-2

根據上面的兩個公式,我們僅需要修改 𝞽 值 ,便可以調整 Jet-falcon 的左輪與右輪的速度,校正 Jet-falcon 的移動路徑。

調整 𝞽 值的步驟如下 :

指令 :  roscore

 圖1-2 : 在 Jet-falcon上開啟主節點
圖1-2 : 在 Jet-falcon上開啟主節點

指令 : roslaunch jetbot_ros keyboard_control.launch

 圖1-3 : 在 Jet-falcon上執行 keyboard_control.launch檔案
圖1-3 : 在 Jet-falcon上執行 keyboard_control.launch檔案

當終端機顯示出可按下相對應的按鈕「 W、A、S、D、X 」按鍵後,便可以開始移動 Jet-falcon了。

若是仍舊無法移動,主要原因為馬達轉速不夠快,需要加大 g 值 。g 值 加大的操作說明在接下來的步驟。

指令 : rosservice call /icshop/set_param_node/set_gain – value

 圖1-4 : 修改 Jet-falcon 的 gain 值
圖1-4 : 修改 Jet-falcon 的 gain 值

需要注意的地方有三個 :

a. 該 Service 最前面的「 icshop」這個名稱,是我們在最開始設定  ~/.bashrc 中,set_vehicle_name.sh  所使用到的變數名稱

b. 指令中的 「value」,是需要輸入的數值。數值範圍在 -10 ~ 10 之間。

c. 相關的設定值參數,皆存放在 ~/Jetson_nano/jetbot_ros/catkin_ws/src/jetbot_ros/param/icshop.yaml 檔案中

指令 : rosservice call /icshop/set_param_node/set_trim — value

 圖1-5 : 修改 Jet-falcon 的 trim 值
圖1-5 : 修改 Jet-falcon 的 trim 值

其中,需要注意的地方與第 1-3 步驟一樣。另外,若是 g 值越大,𝞽 值也會越大

當參數都調整完成後,請不要關閉任何終端機視窗,因尚未儲存任何參數至檔案中。

走直的Jetfalcon
走直的Jetfalcon

指令 : rosservice call /icshop/set_param_node/save_calibration

 圖1-7 : 儲存修改完畢的參數值
圖1-7 : 儲存修改完畢的參數值

這個步驟是最重要的步驟。輸入完指令後,便會將修改過後的參數值,存放至第1-3步驟中c 點注意事項。另外,本步驟的注意事項也與第1-3步驟相同。

建立與儲存地圖

本專案將使用 gmapping 方法建立地圖。在進行建立地圖前,請先確保下面三個步驟已經完成 :

a. Lidar 的 Data port 與 Jetson-falcon 的 USB接口,已經使用 MicroUSB傳輸線連結。需要注意的是,Jet-falcon 所使用的 Lidar,有些一接上傳輸線並供電後,便會開始自行旋轉,有些則不會。這是屬於正常現象,主要取決於製造商在生產時所設定的參數選項。

b. 已完成 Jet-falcon 的移動路徑校正 ,並且 Jet-falcon移動速度較為緩慢( gain 值約在 0.5 ~ 1.5之間 )

c. 將 Jet-falcon放置周遭有明顯障礙物之地面上,以便在地圖上找到初始位置, 並在 Jet-falcon上開啟主節點( Master node )

詳細操作過程可參考 「校正 Jet-falcon的移動路徑」中的第1-2步驟方法。

指令 : roslaunch slam_navigation jetfalcon_gmapping.launch

 圖 2-1 : 在 Jet-falcon 上 執行 jetfalcon_gmapping.launch
圖 2-1 : 在 Jet-falcon 上 執行jetfalcon_gmapping.launch

指令 : rviz

 圖 2-2 : 在主控電腦上,執行 rviz
圖 2-2 : 在主控電腦上,執行 rviz

當 rviz 的視窗跳出後,便可以開始選擇想要視覺化處理的資料。在 gmapping中,我們想要視覺化的是「Map」與 「TF」,請依照下面的圖 2-3 與 圖2-4 ,分別選取想要視覺化的資料。

圖 2-3 選取讀取特定 topic的 Map
圖 2-3 選取讀取特定 topic的 Map
圖2-4_rviz選取TF
圖2-4_rviz選取TF

依照上述兩個選項都點選完畢後,便可以在 rviz 上,看見Lidar 所掃描的地圖,以及 Jet-falcon 相對於掃描地圖上的座標位置。

接下來,我們便可以開始遙控 Jet-falcon ,來完成地圖的建立啦!在建立地圖的過程中,需要特別注意的是,「原地旋轉的速度不要太快」。

這是因為 Jet-falcon上的 Lidar也是不停地在旋轉,若是連Jet-falcon本身也一起在旋轉的話,將會導致 Lidar 接受到不同位置所反射回來的紅外光。若是持續累積誤差的話,便會讓在地圖上的 TF位置座標,與實際上 Jet-falcon的位置所在越離越遠。

因此,若是每次 TF 的座標位置皆與實際上的位置誤差過大時,便需要重新校正 Jet-falcon的移動路徑,讓 Jet-falcon 走得更直、旋轉速度更慢才可以喔!

 圖 2-5 : Jet-falcon 建立好的地圖
圖 2-5 : Jet-falcon 建立好的地圖

指令 : rosrun map_server map_saver -f directory/map_name

  圖 2-6 : 在 Jet-falcon上執行指令,儲存建立好的地圖
圖 2-6 : 在 Jet-falcon上執行指令,儲存建立好的地圖

需要注意的是,directory 指的是想要存放的資料夾,因此需要打出完整的資料夾路徑才行,如圖 2-6 所示。而 map_name指的是想要儲存的地圖檔案名稱,如與圖 2-6所示。

儲存好地圖後,便可以放心的將開啟 ROS 系統的所有終端機都按下 ctrl + c 按鍵,將 ROS 系統停止運作囉!想要查看儲存好的地圖,便可以到剛剛所輸入的資料夾路徑,找尋地圖檔案。總共會有兩個檔案,分別是 .pgm 的圖檔,以及 .yaml 的資料檔案。

圖 2-7 : 儲存好的地圖檔案
圖 2-7 : 儲存好的地圖檔案

建立好的地圖該如何使用呢?就請大家期待下一篇的導航教學囉!!

若是等不及的話,也可以多關注我們的課程展覽活動,皆會有不定期的相關課程資訊發布喔!