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