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