前言
隨著科技得越來越發達,人工智能,自動駕駛導航等字眼頻頻出現在我們得眼前。但是目前來說自動駕駛并沒有得到很全面得普及,還在進行不斷的開發和測試當中。從小就愛好車的我,對這項技術也很是感興趣。
偶然間在上網的時候買了一臺SLAM小車,能夠利用2D激光雷達進行建圖,自動導航,動態規避等功能。今天我將我在使用這臺SLAM小車進行動態避障功能的實現記錄下來。在進行動態避障用到的算法是DWA和TEB算法。
簡單介紹一下我用到的機器
myAGV SLAM小車
myAGV 是 Elephant Robotics 的一款自動導航智能車輛。 它采用了競賽級別的麥克納姆車輪和帶有金屬框架的全包裹設計。 內置了一些SLAM算法來滿足建圖和導航方向的學習。
myAGV是以樹莓派4B為微型控制板,以ubuntu為開發系統,這也是為什么選擇它的原因,樹莓派有世界上最大的活躍社區,擁有許多全世界各地的用戶案例提供借鑒。
建圖/Mapping
首先我得搭建一個場景,讓myAGV在我搭建的場景里進行建圖,自動導航,動態避障。
這是我簡易搭建的一個場景,一些障礙物以及一些遮擋的物品。
現在開始我的建圖。沒有地圖怎么進行導航呢,平時開車導航地圖都是已經存在的,所以我要給場景進行建圖,用到的gmapping算法。
Gmapping:
gmapping是一種用于在機器人上建立環境地圖的算法。它是一種基于激光雷達數據的SLAM(Simultaneous Localization and Mapping)算法,可以在機器人運動時實時地構建環境地圖,并同時確定機器人的位置。gmapping算法是ROS(Robot Operating System)機器人操作系統中的一個軟件包,可以通過ROS的命令行工具或者編程接口來調用和使用它。
這里跟隨Elephant Robotics 的Gitbook(有詳細的操作方式)來進行操作。
利用激光雷達等傳感器收集周圍環境信息,然后通過計算機算法將這些信息組合成一幅環境地圖。之后我就可以在這張地圖上進行導航和動態避障等功能了。
PS:gmapping完成之后記得保存建好的地圖。
我在這調用了myagv的一種控制方法,用鍵盤進行控制myAGV去執行建圖。
自動導航
AMCL 定位
這里要介紹一個算法ACML算法,AMCL算法是一種概率機器人定位算法,它基于蒙特卡羅方法(Monte Carlo Method)和貝葉斯濾波(Bayesian Filtering)理論,通過對機器人搭載的傳感器數據進行處理,實時估計機器人在環境中的位置,并不斷更新機器人位置的概率分布。
AMCL算法通過以下步驟實現機器人的自適應定位:
- 初始化粒子集合:首先,在機器人初始位置周圍生成一組粒子,代表機器人可能的位置。
- 運動模型更新:根據機器人的運動狀態和控制信息,更新粒子集合中每個粒子的位置和狀態信息。
- 測量模型更新:根據機器人搭載的傳感器數據,計算每個粒子的權重(即代表機器人在該粒子位置時傳感器數據與實際數據的匹配程度),并通過歸一化處理,將權重轉化為概率分布。
- 重采樣:根據粒子的權重,對粒子集合進行重采樣,從而提高定位精度并減少計算復雜度。
- 機器人定位:根據粒子集合的概率分布,確定機器人在環境中的位置,并更新機器人狀態估計信息。
通過以上步驟的循環迭代,AMCL算法可以實時地估計機器人在環境中的位置,并不斷更新機器人位置的概率分布。
navigation提供了一套框架,可以讓我們靈活的選擇global_planner、local_planner來提供路徑規劃功能,其中global_planner是全局規劃器,而local_planner是局部路徑規劃器,它們之間的有些消息,例如:全局規劃的軌跡,就是在框架內部傳遞,沒有topic可以跟蹤??偟恼f,ROS的導航模塊提供了一套機制,通過選擇不同的規劃器,可以實現機器人的自主導航。
可以看到除了規劃器,導航模塊還包括 cost_map ,也就是柵格地圖,并且也包括了靜態障礙物的信息,也就是說哪些區域可以通過哪些不可以通過。同時動態障礙物信息是通過sensor topics來發布,然后實時更新cost_map來實現動態避障。除了地圖,導航模塊還需要定位信息,是由amcl模塊來提供定位信息,如果想采用其它的定位模塊替代,只需要發布相同的topic即可。同時還要提供tf信息,也就是說不同傳感器之間的轉換關系,這在機器人中非常常見。機器人的位姿信息則由odometry來提供,包括機器人的速度、角度等,提供給局部規劃器來規劃路徑。
如果不太了解,這邊推薦去查閱ROS官方文檔。
我們來一起看看自動導航的效果如何
這是實現了靜態的避障,能夠簡單的實現。但是很多場景都有不確定的因素,比如說突然走出來一個人,這個時候站在面前,如果只依靠靜態避障的話,那么它就會直接撞上去,這個時候就需要用到另一種功能,動態避障。
動態避障是指機器人在移動過程中,根據環境變化實時調整路徑,避開障礙物的能力。與靜態環境下的避障不同,動態避障需要機器人能夠實時感知周圍環境的變化,并做出相應的調整,以保證機器人的安全移動,從而提高生產效率和安全性。動態避障我這邊主要用到的是DWA和TEB算法。
總結
動態避障的算法需要涉及的知識較多,本篇的文章就記錄到這里,后續我會將DWA和TEB算法寫在另一篇文章中,如果你覺得我寫的還不錯,或者有啥需要改進的地方請在下方留言。
這里在寫一下對myAGV的使用下來的感受,首先呢它的外觀是很好的,它能夠搭載機械臂作為一個復合機器人去實現很多任務。我買他的初衷主要是為了學習SLAM小車的一些知識,實現自主導航等依靠雷達的功能,它搭載這樹莓派4B全球最大的硬件開發社區,有很多的資源提供,這也是選擇它的理由。
除此之外,它也不是完美的,它的電池消耗的很快,最長待機時間是2小時,如果使用的頻率較高的話,一小時左右就快沒電了。這是使用下來我覺得需要提升的地方,后續也繼續更新使用myAGV的感受。
審核編輯:湯梓紅
-
機器人
+關注
關注
211文章
28501瀏覽量
207475 -
人工智能
+關注
關注
1792文章
47409瀏覽量
238924 -
SLAM
+關注
關注
23文章
425瀏覽量
31861 -
AGV
+關注
關注
27文章
1316瀏覽量
41142 -
自動導航
+關注
關注
0文章
7瀏覽量
1994
發布評論請先 登錄
相關推薦
評論