在Jetson Orin Nano上使用實(shí)時VSLAM的自主無人機(jī),通過視覺慣性傳感和機(jī)載地圖導(dǎo)航GPS拒絕區(qū)域
無GPS環(huán)境下的自主導(dǎo)航是當(dāng)今無人駕駛飛行器(UAV)系統(tǒng)面臨的最關(guān)鍵挑戰(zhàn)之一。從城市峽谷到地下隧道和茂密的森林,許多現(xiàn)實(shí)世界的環(huán)境使GPS不可靠或完全不可用。為了讓無人機(jī)在這些條件下安全有效地運(yùn)行,無論是執(zhí)行搜救任務(wù)、軍事偵察還是工業(yè)檢查,它們都必須依靠機(jī)載感知和測繪能力。
該項目提出了一種無人機(jī)平臺,使用Isaac ROS VSLAM,集成MAVROS和PX4飛行堆棧,由視覺同步定位和測繪(VSLAM)提供動力。通過融合視覺慣性數(shù)據(jù)和利用Jetson Orin Nano的邊緣計算能力,該系統(tǒng)可以實(shí)現(xiàn)實(shí)時定位和地圖構(gòu)建,使無人機(jī)無需GPS即可自主導(dǎo)航。
通過這種實(shí)現(xiàn),無人機(jī)能夠保持態(tài)勢感知,動態(tài)映射未知環(huán)境,實(shí)現(xiàn)高精度自主飛行。這項工作不僅證明了在資源受限的平臺上部署實(shí)時VSLAM的可行性,而且還強(qiáng)調(diào)了其在擴(kuò)大關(guān)鍵的gps拒絕場景中自主系統(tǒng)的覆蓋范圍和可靠性方面的更廣泛影響。
VSLAM無人機(jī)在PX4 (v1.15.4)飛行控制器、英特爾D435i相機(jī)和Jetson Orin Nano (JetPack 6.2)配套計算機(jī)上得到支持。
如果您還沒有這樣做,請使用入門指南為Jetson Orin Nano安裝JetPack 6.2。
杰森·奧林納米裝置
布線
本教程使用飛行控制器的TELEM2端口與同伴計算機(jī)通信。
理論上,Jetson Orin Nano應(yīng)該能夠通過GPIO引腳與飛行控制器通信。然而,在測試中,Jetson Orin Nano由于可能存在噪聲數(shù)據(jù)鏈路而難以與飛行控制器進(jìn)行通信。我建議使用USB轉(zhuǎn)UART適配器與飛行控制器通信。
將飛行控制器的TELEM2TX/RX引腳連接到USB轉(zhuǎn)UART適配器上的互補(bǔ)RXD/TXD引腳。
確保D435i相機(jī)通過USB連接到Jetson Orin Nano。
Jetson Orin Nano還需要一個獨(dú)立的7-20V電源,最大功耗為36W。電源應(yīng)連接到Jetson Orin Nano的桶孔或USB-C端口,如下所示:
軟件設(shè)置
執(zhí)行以下命令確認(rèn)已安裝正確的Jetpack版本:
確認(rèn)輸出中包含R36 (release), REVISION: 4.3,這表明您正在運(yùn)行Jetpack 6.2。
接下來,將GPU和CPU時鐘設(shè)置為max:
然后,執(zhí)行如下命令將上電模式設(shè)置為MAXN SUPER模式。
JetPack預(yù)裝了Docker。但是,您需要將您的用戶添加到docker組中,以便在沒有sudo的情況下運(yùn)行docker命令。執(zhí)行如下命令:
SSD的設(shè)置
Jetson Orin Nano需要一個SSD來存儲容器映像和rosbag文件。
按照以下步驟在Jetson Orin Nano上安裝SSD:
?關(guān)閉Jetson:從Jetson開發(fā)工具包中拔下電源和任何外圍設(shè)備。
?安裝SSD:將NVMe SSD卡物理安裝到Jetson開發(fā)工具包的載體板上。確保連接器安裝到位,并擰緊螺釘。
?重新連接外設(shè):重新連接之前未插入的外設(shè)。
?啟動Jetson:重新連接電源以打開Jetson開發(fā)工具包。
一旦系統(tǒng)啟動,通過運(yùn)行以下命令驗(yàn)證您的Jetson在PCI總線上識別了一個新的內(nèi)存控制器:
你應(yīng)該看到類似下面的一行:
要格式化SSD設(shè)備,首先要查看SSD設(shè)備名稱。執(zhí)行如下命令:
識別與您的SSD對應(yīng)的新設(shè)備,通常為nvme0n1。
接下來,用ext4文件系統(tǒng)格式化SSD。將nvme0n1替換為SSD的實(shí)際設(shè)備名稱:
掛載到目錄/ SSD下:
為了確保SSD在引導(dǎo)時自動掛載,需要在/etc/fstab文件中增加一條記錄。
首先,獲取SSD的UUID:
找到與您的SSD對應(yīng)的行,并記錄UUID。
接下來,將SSD添加到/etc/fstab文件中,替換為SSD的實(shí)際UUID:
最后,修改/ssd目錄的歸屬。
掛載完成后,將Docker數(shù)據(jù)目錄遷移到該SSD上。
首先停止Docker服務(wù):
接下來,將Docker data目錄移動到SSD上:
修改Docker服務(wù)配置,使其指向Docker數(shù)據(jù)目錄的新位置:
重命名舊的Docker數(shù)據(jù)目錄:
最后,重啟Docker服務(wù):
Isaac ROS設(shè)置
VSLAM無人機(jī)采用Isaac ROS框架進(jìn)行VSLAM。該框架構(gòu)建在ROS2之上,并提供了一組用于構(gòu)建機(jī)器人應(yīng)用程序的工具和庫。
首先安裝Git-LFS和其他依賴項:
然后,為Isaac ROS創(chuàng)建一個工作空間:
接下來,克隆Isaac ROS存儲庫:
為RealSense攝像頭配置Isaac ROS Docker鏡像:
生成CDI規(guī)格的GPU:
克隆VSLAM-UAV存儲庫并下載所需的資產(chǎn):
確保您的RealSense相機(jī)連接到Jetson Orin,并運(yùn)行以下命令來構(gòu)建Isaac ROS docker映像:
需要使用RealSense固件版本5.13.0.50。任何其他版本可能無法與Isaac ROS Docker映像一起工作。
一旦映像構(gòu)建并運(yùn)行,您可以通過運(yùn)行以下命令來測試RealSense相機(jī):
這將打開RealSense查看器并顯示攝像機(jī)饋送。
如果你的RealSense攝像頭沒有被檢測到,你可能需要在一個單獨(dú)的終端上運(yùn)行以下命令來更新udev規(guī)則:
攝像頭IMU設(shè)置
IMU校準(zhǔn)(可選)
為了最好地利用VSLAM,必須將IMU數(shù)據(jù)合并到VSLAM管道中。您可以使用英特爾D435i相機(jī)的內(nèi)置IMU。IMU從工廠預(yù)校準(zhǔn),但建議校準(zhǔn)IMU,以確保準(zhǔn)確的測量。
要校準(zhǔn)IMU,您可以使用隨Librealsense附帶的IMU校準(zhǔn)工具。首先,你需要構(gòu)建一個真正意義上的docker鏡像:
注意:安裝librealesnes git到工作空間
這將構(gòu)建映像并在容器中運(yùn)行它。容器運(yùn)行后,您可以運(yùn)行IMU校準(zhǔn)工具:
只需按照命令行說明校準(zhǔn)IMU。以下是校準(zhǔn)過程的圖像,以幫助指導(dǎo)您完成該過程。
位置1:直立朝外
位置2:USB線朝上朝外
位置3:面朝外倒立
位置4:USB線朝下
位置5:觀看方向朝下
位置6:觀看方向朝上
確保將校準(zhǔn)結(jié)果寫入相機(jī)的eeprom。
IMU參數(shù)估計
校準(zhǔn)內(nèi)部IMU后,您需要估計IMU的參數(shù)。IMU的參數(shù)是加速度計和陀螺儀的噪聲和偏置不穩(wěn)定性。您可以通過從IMU收集數(shù)據(jù)并使用Allan Variance來估計這些參數(shù)。
首先,您需要從IMU記錄一段較長時間(至少3小時)的靜態(tài)數(shù)據(jù)。打開Isaac ROS Realsense Docker容器,運(yùn)行Realsense節(jié)點(diǎn),從攝像頭開始流式傳輸數(shù)據(jù):
這將打開真正意義上的ros節(jié)點(diǎn)。接下來,打開一個新的終端并連接到集裝箱上:
在附帶的容器中,執(zhí)行如下命令記錄IMU數(shù)據(jù):
至少3小時后,用CTRL+C停止錄制。
進(jìn)入運(yùn)行realsense-node.sh腳本的終端,使用“CTRL+C”停止realsense ros節(jié)點(diǎn)。
有了我們的IMU數(shù)據(jù),您現(xiàn)在可以繼續(xù)估計IMU參數(shù)。這可以在ROS2框架中通過allan_ros2輕松完成。
首先,您需要在桌面計算機(jī)上克隆VSLAM-UAV存儲庫:
接下來,需要將IMU數(shù)據(jù)復(fù)制到桌面計算機(jī)。
首先將IMU rosbag文件從docker容器復(fù)制到Jetson Orin Nano的主目錄。在Jetson Orin Nano的新終端中,運(yùn)行以下命令:
在桌面計算機(jī)上打開一個新的終端,并運(yùn)行以下命令:
您在jetson上的用戶名和IP地址在哪里。
接下來,您需要在桌面計算機(jī)上構(gòu)建分析docker映像:
這將構(gòu)建映像并在容器中運(yùn)行它。容器運(yùn)行之后,必須修改配置以指向IMU rosbag文件。執(zhí)行如下命令:
接下來,運(yùn)行allan_node計算原始偏差值:
在得到DONE消息后,通過CTRL+C退出并運(yùn)行analysis.py腳本來計算IMU參數(shù):
這將輸出IMU參數(shù)并將其保存到IMU中。yaml文件。
現(xiàn)在,我們可以在VSLAM管道中使用這些參數(shù)。在Jetson Orin Nano上的新終端中,修改isaac_ros_vslam_realsense.py腳本以包含IMU參數(shù)。在文本編輯器中打開腳本:
使用imu中的值更新gyro_noise_density、gyro_random_walk、accel_noise_density和accel_random_walk參數(shù)。您之前生成的Yaml文件。
飛行控制器設(shè)置
PX4參數(shù)
假設(shè)您已經(jīng)安裝了最新的PX4固件(v1.15.4),在QGroundControl中更改以下參數(shù),使同伴計算機(jī)能夠通過TELEM2端口與飛行控制器通信:
此外,為了在沒有GPS的情況下使用視覺姿態(tài)估計,您必須設(shè)置以下PX4參數(shù):
測試連接
MAVLink是用于PX4的默認(rèn)且穩(wěn)定的通信接口。
你可以測試Jetson Orin Nano和飛行控制器通過MAVLink GCS (MAVProxy)相互通信。
在Jetson Orin Nano上運(yùn)行以下命令,將用戶添加到dialout組:
然后,重新啟動Jetson Orin Nano以應(yīng)用更改。
您可以通過發(fā)出以下命令來檢查串口是否可用:
該命令的結(jié)果應(yīng)該包括RX/TX連接/dev/ ttyusb0
接下來,安裝MAVProxy:
運(yùn)行MAVProxy,設(shè)置端口連接/dev/ttyUSB0,波特率匹配飛行控制器(921600):
Jetson Orin Nano上的MAVProxy現(xiàn)在應(yīng)該通過其RX/TX引腳連接到PX4飛行控制器。CTRL+C退出。
飛行演示
這個演示展示了Isaac ROS VSLAM節(jié)點(diǎn)的作用,允許四軸飛行器使用視覺SLAM進(jìn)行姿態(tài)估計,自主飛行指定模式。四軸飛行器將利用MAVROSPY節(jié)點(diǎn)來接收姿態(tài)估計和控制飛行模式。
要運(yùn)行飛行演示,首先啟動Isaac ROS docker容器:
在容器內(nèi)部,導(dǎo)航到vslam目錄:
接下來,啟動Issac ROS VSLAM節(jié)點(diǎn):
在一個新的終端中,啟動mavrospy docker容器:
在mavrospy容器中,啟動mavrospy節(jié)點(diǎn):
如果您希望確保正確發(fā)布VSLAM姿態(tài)估計,您可以在新終端中運(yùn)行以下命令:
您還可以檢查飛行控制器是正確地解釋姿態(tài)估計通過測試飛行的位置飛行模式。
最后,將四軸飛行器切換到OFFBOARD模式并觀看它飛行!
您可以通過pattern參數(shù)指定飛行模式。如果未指定,則默認(rèn)為正方形。
可用的模式:square、square_head、circle、circle_head、figure8、figure8_head、spiral和spiral_head。其中_head將指定在運(yùn)動方向上要面對的無人機(jī)。
可視化
如果你想在RViz中可視化VSLAM輸出,你可以在一個新的終端中運(yùn)行以下命令:
由于性能問題,通常不建議在遠(yuǎn)程桌面上運(yùn)行RViz。即使使用X11轉(zhuǎn)發(fā)也可能很慢,這取決于您的網(wǎng)絡(luò)連接。
相反,可以考慮使用ros2 bag record -a命令記錄演示,然后可視化記錄的數(shù)據(jù)。
本文編譯自hackster.io