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