引言
大家好,最近新入手了一臺myAGV JN這是elephant robotics在myAGV升級后的版本。最近有對SLAM相關知識感興趣,想深入了解一些關于ROS中SLAM的一些算法和規劃,跟據官方提供的gitbook,主要使用到了gmapping算法來建圖導航實現功能的。
本篇得到文章主要探討如何通過調整gmapping算法和其他軟件層面的優化來提升myagv的精度,在不依靠硬件的條件情況下。
產品介紹
myAGV-Jetson Nano
這是第二代的myAGV,第一代的只有raspberry Pi 4B版本,算力方面有所欠缺,在二代的時候推出了一Jetson Nano為主控的版本,能夠滿足ROS 大部分的需求,Jetson Nano 能夠滿足大部分的嵌入式機器人的算力需求。
對比之前還多了很多的配件,可以搭載3D攝像頭做一些視覺的建圖,一塊顯示屏安裝在車身上比較方便操作,還有額外的增加了一塊儲能電池,比之前更耐用了(之前的1h差不多就趴窩了),因為都是看過raspberry 第一版的測評和使用情況,對這個升級版本還是很大的期待的。
搭配了一個雷達,高性能的行星直流無刷電機,保留了競賽級別的萬向輪,在原有的基礎上開放了python 的控制接口,適配了圖形化編程等軟件。最讓我心動的是,主控板為此提供了強大的圖形處理能力,并且還支持3D建圖和導航。
Jetson Nano B01
NVIDIA Jetson Nano B01是一款小型但強大的嵌入式計算開發板,專為人工智能(AI)和機器學習(ML)應用設計。
主要性能:
NVIDIA Maxwell架構的GPU,包含128個CUDA核心。
四核ARM Cortex-A57 CPU,主頻為1.43 GHz。
4GB LPDDR4內存,位寬為64位,頻率為1600MHz。
基于這些性能Jetson Nano BO1 適用于各種AI和嵌入式應用場景,尤其是機器人方面的自動導航,運動控制,路徑規劃等等。
gmapping
gmapping是一種SLAM(Simultaneous Localization and Mapping)常用的算法,他使用粒子波率方法在機器人移動的過程中同事構建環境地圖并且估計機器人的位置和姿態。
過程
使用的過程
進入的界面是Ubuntu系統,方便了使用ROS進行操作,具我所了解,主機里原本就已經配置好了一些相關的基礎建圖信息。
對于初次使用類似這種機器人來說非常的友好,提供了一個UI界面哪里不會點哪里。
一頓鼠標點下來,不用幾分鐘,就可以打開雷達運行gmapping來進行環境建圖了。
這個UI界面非常友好,功能相對來說還是比較完善的,但是只基于最基礎的建圖和導航功能,如果說是要做其他的一些項目開發,就沒有太大的用處了,只適用于初學者,想要快速上手。
之后就開始可以建圖了。用VNC進行遠程鏈接,通過鍵盤控制myAGV在所要導航的環境中進行建圖。
目前為止,所有的環節都是順利的,如果不想用UI也可以 自行輸入命令行來執行環境建圖的功能,以下內容都是大象機器人封裝好的功能,以下命令都要在命令行當中運行。
# 啟動雷達 roslaunch myagv_odometry myagv_active.launch #運行gmapping建圖文件 roslaunch myagv_navigation myagv_slam_laser.launch # 開啟鍵盤控制 roslaunch myagv_teleop myagv_teleop.launch #完成建圖步驟之后需要進行保存map rosrun map_server map_saver
在導航的功能包中,更改剛建圖的路徑。
關閉建圖的終端,運行導航的命令。
roslaunch myagv_navigation navigation_active.launch
這個時候,關鍵點來了,最好吧myagv放置在建圖時候小車出發的為止,或者在RViz當中進行更改,確保Myagv在地圖中的位置和實際環境中的位置相同才能夠保證導航的時候能夠正確的前往目的地。
點擊頂部工具欄的“2D Pose Estimate” 進行調整,使得Rviz界面的小車和實現的小車可對應上,此時終端會返回小車相對于地圖的坐標和航向角。
甚至還可以進行分布導航,記錄下要前往的導航點的參數,xy坐標與航向角yaw,但是在導航的過程中發現了一些問題,很關鍵原因就是他不是特別的精準,導航10次,10次都會根據原來的路徑有一定的偏差。
提出的問題并解決
為什么會出現偏差的問題?是什么原因導致出現偏差?
主要有兩方面的原因,1是硬件方面傳感器的誤差,2是軟件方面算法的局限性。
以下是我解決的方法,都是根據ROS官方給出的參數進行調整。
gmapping - ROS Wiki
通過修改雷達的參數,主要有一下幾個參數
maxRange和maxUrange
maxRange:設置激光雷達的最大探測距離。確保此值與激光雷達的實際測量范圍相匹配。
maxUrange:用于構建地圖的最大有效距離。一般比maxRange稍小,設置成實際測量距離的一個合理值。
sigma
表示激光雷達測量的標準差。數值越小,表示測量越精確。
根據激光雷達的實際性能調整該值,以減少測量噪聲的影響。
kernelSize
表示掃描匹配的窗口大小。較大的值可以增加匹配的魯棒性,但也會增加計算量。
調整該參數以平衡計算時間和匹配精度。
lstep和astep
lstep:線性步長,表示在掃描匹配過程中,平移步長的大小。
astep:角度步長,表示在掃描匹配過程中,旋轉步長的大小。
減小這些步長可以提高掃描匹配的精度,但也會增加計算負擔。
particles
粒子的數量。更多的粒子可以提高定位的準確性和穩定性,但也會增加計算開銷。
在計算資源允許的情況下,適當增加粒子數量。
xmin、ymin、xmax、ymax
設置地圖的邊界,確保這些值能夠涵蓋機器人運行的整個區域。
適當調整地圖邊界,可以減少無效區域的計算,提高整體效率。
!--param name="odom_frame" value="odom_combined"/--?> !-- Set maxUrange < actual maximum range of the Laser --?> /node?> /launch?>
調整里程計的參數
里成計模型:
校準里程計模型參數,確保其準確反映機器人的運動特性。
檢查并調整輪子的半徑、軸距等參數,減少模型誤差。
傳感器結合:
結合IMU數據,通過擴展卡爾曼濾波器(EKF)等方法進行傳感器數據融合,提高定位精度。
確保里程計和IMU數據的時間同步,減少時序誤差。
3gmapping算法調整:
粒子濾波誤差:Gmapping使用粒子濾波算法,粒子的數目和分布會影響精度。如果粒子數量不足或分布不合理,可能導致誤差。
Gmapping算法中的參數(如粒子數、步長、噪聲模型等)設置不當,會影響定位和建圖的精度。
調節這些參數來提高SLAM算法的精度,在實踐當中就可以確保myAGV運行的時候誤差不會太大。
需要根據周圍的環境,進行大量的調節參數,然后進行測試,才能夠確保建圖的精準只有在建圖精準了,導航也才能夠保證精準。
總結
總的來說,我覺得myAGV表現還是挺不錯的,無論是性能、使用體驗,還是配套資料,都讓人覺得友好,對初學者來說很容易上手。目前,我還在不斷地使用和熟悉這個產品,之后打算做一些有趣的項目,希望能充分利用Jetson Nano BO1的潛力,把AI和大模型結合起來。如果你有任何好的建議,隨時分享!
審核編輯 黃宇
-
機器人
+關注
關注
213文章
29446瀏覽量
211400 -
算法
+關注
關注
23文章
4696瀏覽量
94658 -
SLA
+關注
關注
1文章
54瀏覽量
18463 -
人工智能
+關注
關注
1804文章
48645瀏覽量
246122 -
大象機器人
+關注
關注
0文章
85瀏覽量
67
發布評論請先 登錄
【「# ROS 2智能機器人開發實踐」閱讀體驗】視覺實現的基礎算法的應用
【「# ROS 2智能機器人開發實踐」閱讀體驗】+ROS2應用案例
【「# ROS 2智能機器人開發實踐」閱讀體驗】+內容初識
大象機器人攜手進迭時空推出 RISC-V 全棧開源六軸機械臂產品
大象機器人推出myCobot 280 RDK X5,攜手地瓜機器人共建智能教育機

大象機器人推出myAGV復合機器人智慧物流套裝
大象機器人以科技治愈人心
使用 Thonny 對 XRP 機器人進行編程

《具身智能機器人系統》第10-13章閱讀心得之具身智能機器人計算挑戰
大象機器人11月大事件回顧
使用NVIDIA Jetson打造機器人導盲犬
使用機器學習和NVIDIA Jetson邊緣AI和機器人平臺打造機器人導盲犬
大象機器人10月大事件回顧
使用myAGV、Jetson Nano主板和3D攝像頭,實現了RTAB-Map的三維建圖功能!

評論