【Nav2中文网】三、导航相关概念
- 本教程來自:Nav2中文網
- Nav2交流社區:https://fishros.org.cn/forum
- ROS2/Nav2千人交流群:(QQ)139707339
- 更多精彩教程請關注微信公眾號:魚香ROS
- 歡迎添加機器人小伊微信,解鎖機器人學習特殊服務
導航相關概念?
本節旨在幫助學習機器人的新手熟悉移動機器人導航的概念,尤其是了解和使用Nav2 項目所需的概念。 [haisenzeng@2]
ROS 2?
Nav2使用ROS2作為核心中間件。如果您對此不熟悉,請在繼續閱讀本文檔前訪問 ROS2文檔 ,對于國內用戶推薦看看小魚的 `動手學ROS2課程文
動作服務器(Action Server)?
動作服務器就像在ROS中一樣是控制導航等長時間運行任務的常見方式。Nav2軟件堆棧更廣泛地使用動作(通信機制),并且在某些情況下會缺乏簡單的話題接口。作為ROS 2的開發人員,了解動作服務器尤為重要。一些簡單的機器人命令(CLI)示例可以在 ROS 2 documementation 中找到。 [haisenzeng@6]
這個Action服務器類似于服務通信中的Service。客戶端會要求服務端完成一些任務,但此任務可能需要很長時間。比如說:移動推土機的鏟子或者讓機器人向右移動10米。 [小魚@7]
在這種情況下,動作服務器和客戶端允許我們在另一個進程或線程中調用長時間運行的任務,并為其結果返回一個future對象。此時允許阻塞線程直到動作完成,但是,用戶可能希望偶爾檢查動作是否完成并繼續在客戶端線程中處理工作。由于是長時間運行的,動作服務器也會向其客戶端提供反饋。該反饋可以是任何東西,并且在ROS中使用具有請求和結果類型的.action文件定義。在推土機示例中,請求可以是一個角度,反饋可以是要移動的剩余角度,而結果則是以結束角度表示的成功或失敗的布爾值。在導航示例中,請求可能是一個位姿,反饋可能是已導航的時間和到達目標位姿的距離,而結果則是以成功或失敗表示的布爾值。 [haisenzeng@8]
通過向Action客戶端注冊回調函數,可以同步的收到反饋和結果。它們也可以通過無意識地從shared future對象中的require信息來獲取。兩者都需要對客戶端節點進行spin來處理回調組。 [小魚@9]
在Nav2軟件堆棧中使用動作服務器通過 NavigateToPose 動作消息與最高級別的行為樹BT導航儀(Navigator)進行通信。它們還用于行為樹BT導航儀與后續較小的動作服務器通信,以計算路徑規劃、控制工作和恢復。每個動作服務器都有自己獨特的 nav2_msgs 格式的 .action 類型,用于與服務器進行交互。 [haisenzeng@10]
生命周期節點和綁定?
生命周期 (或被管理的,更正確的) 節點是ROS 2獨有的。更多信息可以是 在這里 。它們是包含狀態機轉換的用于加載和卸載ROS 2服務器的節點。這有助于確定ROS系統啟動和關閉的狀態是否正常。它還幫助用戶根據實際用途(商業或調試)以合理的方式構建他們的程序, [小魚@12]
當一個節點啟動時,它處于未配置狀態,只處理節點的構造函數,該構造函數不應包含任何 ROS 網絡設置或參數讀取。通過啟動系統或提供的生命周期管理器,需要通過配置將節點轉換為非活動狀態。之后,可以通過激活階段的轉換來激活節點。 [haisenzeng@13]
這種狀態將允許節點處理信息,并完全設置為運行狀態。在配置階段,觸發 on_configure() 方法,將設置所有參數、ROS網絡接口,以及安全系統,所有動態內存的分配。在激活階段、觸發 on_activate() 方法的將激活ROS網絡接口,并設置程序中的任何狀態以開始處理信息。 [小魚@14]
要關閉(該節點)即過渡到停用需要清理、關閉,并以最終狀態結束。網絡接口分別在這些階段被停用并停止處理、釋放內存、干凈地退出。 [haisenzeng@15]
生命周期節點框架在整個項目中被廣泛使用,所有服務器都使用它。如果可能的話,所有ROS系統最好使用生命周期節點。 [小魚@16]
在Nav2中,我們使用 nav2_util LifecycleNode 的包裝器。這種包裝包裝了典型應用的生命周期節點的許多復雜性。它還包括生命周期管理器的連接 bond ,以確保服務器轉換后,它也保持活動狀態。如果服務器崩潰,它會讓生命周期管理器知道并向下過渡系統,以防止嚴重故障。詳見 Eloquent到Foxy [小魚@729] 。 [haisenzeng@17]
行為樹?
行為樹 (BT) 在復雜的機器人任務中變得越來越普遍。它們是待完成任務的樹形結構。行為樹為定義多步或多狀態應用程序創建了一個更具可擴展性和人類可理解性的框架。這與有限狀態機 (FSM) 相反,后者可能有幾十個狀態和數百個狀態過渡。一個例子就是踢足球機器人。將足球比賽的邏輯嵌入FSM將具有挑戰性,且容易出錯因為有許多可能的狀態和規則。此外,像從左側、右側或中間射門這樣的建模選擇尤其不清楚。使用行為樹則可以為許多行為創建和重用基本原語,像 “kick” “walk” “go to ball” 。更多信息可以在 這本書 找到。強烈建議閱讀第1-3章,以更好地理解術語和工作流程。大約需要30分鐘。 [小魚@19]
Nav2項目使用 BehaviorTree CPP V3 作為行為樹庫。在 BT Navigator 中,創建了可以構建為行為樹的節點插件。將節點插件加載到BT中,并且在解析該行為樹的XML文件時,將關聯注冊的名稱。此時,我們可以通過該行為樹進行導航。 [haisenzeng@20]
使用此庫的一個原因是它能夠加載子樹。這意味著可以將Nav2行為樹加載到另一個更高級別的BT中,以將此項目用作節點插件。一個例子是在足球比賽中,使用Nav2行為樹作為 “go to ball” 節點,將足球檢測作為更大任務的一部分。此外,為BT提供了一個 NavigateToPoseAction 插件,因此可以從客戶端應用程序通過通常的動作接口調用Nav2軟件堆棧。 [haisenzeng@21]
導航服務器?
規劃器和控制器是導航任務的核心。恢復器用于使機器人擺脫不良狀態或嘗試處理各種形式的問題,以使系統具有容錯能力。在本節中,將分析有關它們的一般概念及其在Nav2項目中的用途。 [haisenzeng@23]
規劃器,控制器和恢復服務器 [haisenzeng@24]?
該項目中的三個動作服務器是規劃器、恢復器和控制器服務器。這些動作服務器用于托管一個地圖算法插件,以完成各種任務。它們還托管由該算法插件使用的環境表達,以計算其輸出。 [haisenzeng@25]
這個規劃器和控制器服務器將在運行時配置名稱 (別名) 和要使用的算法類型。這些類型是已注冊的插件庫名稱,這些名稱是任務的別名。一個例子是使用名稱為 FollowPath 的DWB控制器,因為它遵循參考路徑。在這種情況下,DWB的所有參數都將放置在該命名空間中,例如 FollowPath. 。 [haisenzeng@26]
然后,這兩個服務器會公開與其任務相對應的操作接口。當行為樹勾選相應的BT節點時,它將調用操作服務器來處理其任務。該服務器內部的動作服務器回調將通過映射到特定算法的名稱 (例如 FollowPath ) 來調用所選算法。這允許用戶將行為樹中使用的算法抽象為算法類。例如,你可以讓 N 插件控制器跟隨路徑,與充電器對接,避開動態障礙物,或與某個工具進行交互。在同一服務器中擁有所有這些插件允許用戶使用單個環境表達對象,因為該對象的復制成本很高。 [haisenzeng@27]
對于恢復服務器,每個恢復也包含自己的名稱,但是,每個插件也將公開其自己的特殊操作服務器。這樣做是因為可以創建的各種恢復動作無法共享單個簡單的接口。恢復器服務器還包含一個訂閱本地成本地圖的成本地圖訂閱者節點,該節點會從控制器服務器接收實時更新以計算其任務。這樣做是為了避免為本地成本地圖創建多個實例,因為復制本地成本地圖在計算上是昂貴的。 [haisenzeng@28]
或者,由于BT節點是調用操作的簡單插件,因此可以創建新的BT節點來調用具有其他操作類型的其他動作服務器。如果可能的話,建議始終使用提供的服務器。如果由于插件或動作接口的原因,需要一個新的服務器,則可以通過該框架來維持。類似于提供的服務器,新服務器應使用新類型和插件接口。需要創建一個新的BT節點插件來調用新的操作服務器 – 然而,通過廣泛使用服務器和插件,Nav2存儲庫本身不需要分叉或修改。 [haisenzeng@29]
如果您發現需要一個新的插件庫定義或動作類型接口,請提交工單,看看我們是否可以在相同的接口中糾正它。 [haisenzeng@30]
Planners?
規劃器的任務是計算完成一些目標函數的路徑。根據所選的命名法和算法,該路徑也可以稱為路線。兩個典型示例是計算一個到達目標位姿的規劃(例如從當前位置到達一個目標位姿)或者完全覆蓋(例如覆蓋所有空閑空間的規劃)。規劃器可以訪問全局環境表達和緩存在其中的傳感器數據。規劃器可以被編寫為具有以下功能的工具: [haisenzeng@32]
- 計算最短路徑
- 計算完整覆蓋路徑 [待校準@34]
- 沿稀疏或預定義路線計算路徑 [haisenzeng@35]
Nav2中規劃器的一般任務是計算從當前位置到達目標位姿的一個有效且可能是最佳的路徑。但是,有許多受支持的規劃類和路線類。 [haisenzeng@36]
Controllers?
控制器,在ROS 1中也被稱為局部規劃器,是我們跟隨全局計算路徑或完成局部任務的方法。控制器有權訪問局部環境表達,以嘗試計算要跟隨的基準路徑的可行控制工作。許多控制器會將機器人向前投射到空間中,并在每次更新迭代時計算局部可行路徑。控制器可以被編寫為具有以下功能的工具: [haisenzeng@38]
- 跟隨路徑 [haisenzeng@39]
- 使用里程作為與充電樁對接時的參考數據 [小魚@40]
- 登上電梯
- 與某個工具的接口 [haisenzeng@42]
在Nav2中,控制器的一般任務是計算一個有效的控制工作以跟隨全局規劃路徑。然而,有多個控制器類和局部規劃器類。Nav2項目的目標就是所有控制器算法都可以作為此服務器中的插件,以用于一般研究和產業任務中。 [haisenzeng@43]
恢復器 [haisenzeng@44]?
恢復器是容錯系統的支柱。恢復器的目標是處理系統的未知狀況或故障狀況并自主處理這些狀況。例子包括感知系統中會導致環境表達充滿假障礙物的故障。這樣就會觸發清除成本地圖恢復以允許機器人移動。 [haisenzeng@45]
另一個例子就是機器人由于動態障礙物或控制不佳而卡住。在允許的情況下,倒退或原地旋轉會允許機器人從卡住的位置移動到可以成功進行導航的自由空間中。 [haisenzeng@46]
最后,在完全故障的情況下,可以實施恢復以引起操作員的注意以尋求幫助。這可以通過電子郵件、短信、Slack、Matrix等來完成。 [小魚@47]
航點跟隨 [haisenzeng@48]?
航點跟隨是導航系統的基本功能之一。它會告知系統如何使用導航程序到達多個目的地。 [haisenzeng@49]
nav2_waypoint_follower 軟件包含一個航路點跟蹤程序,該程序具有特定任務執行程序的插件接口。如果需要讓機器人前往給定位姿并完成像拍照、撿起盒子或等待用戶輸入之類的特定任務,這會非常有用。這是一個用于展示如何在示例應用程序中使用Nav2的不錯的演示應用程序。 [haisenzeng@50]
但是,該軟件包不僅可以用于示例應用程序。關于機器人隊管理器/調度器有兩種思想流派:啞機器人+智能集中式調度器;智能機器人+啞集中式調度器。 [haisenzeng@51]
在第一種思想中, nav2_waypoint_follower 軟件包足以創造一個產品級的機器人解決方案。由于自主系統/調度器在分配任務時會考慮機器人的姿勢、電池電量、當前任務等因素,機器人上的應用程序只需要關心手頭的任務,而不用關心完成系統要求任務的其他復雜因素。在這種情況下,應該將發送至航點跟隨者的請求視為1個工作單元(例如,倉庫中的1次揀貨、1個安全巡邏循環、1個過道等)來執行任務,然后返回給調度器以進行下一個任務或者要求充電。在這種思想流派中,航點跟隨應用程序只是導航軟件堆棧之上和系統自主應用程序之下的一個步驟。 [haisenzeng@52]
在第二種思想中, nav2_waypoint_follower 軟件包是一個不錯的示例應用程序/概念證明,但確實需要機器人上的航點跟蹤/自主系統來承擔更多任務以制定健壯的解決方案。在這種情況下,應該使用 nav2_behavior_tree 軟件包創建自定義應用程序級別的行為樹,以使用導航來完成任務。這可以包含子樹,例如在任務中檢查充電狀態以返回停泊塢,或者在更復雜的任務中處理1個以上的工作單元。很快,將會有一個 nav2_bt_waypoint_follower (名稱有待調整),它將允許用戶更容易地創建此應用程序。在這個思想流派中,航點跟隨應用程序與自主系統的聯系更加緊密,或者在很多情況下,航點跟隨應用程序就是自主系統本身。 [haisenzeng@53]
這兩種思想流派并不能簡單地說誰比誰更好,誰更好很大程度上取決于機器人正在完成何種任務、處于何種類型的環境中以及有何種可用的云資源。通常,對于既定的業務案例,這種區別非常明顯。 [haisenzeng@54]
狀態估計?
根據ROS社區標準,在導航項目中,需要提供兩個主要的坐標轉換。 map 到 odom 的坐標變換由定位系統 (定位,建圖,SLAM)提供, odom 到 base_link 的坐標轉換由里程計系統提供。 [haisenzeng@56]
注解
無需在機器人上使用LIDAR即可使用導航系統。不需要使用基于激光雷達的防撞、定位或SLAM系統。但是,Nav2確實可以提供說明和支持使用激光雷達對這些系統進行嘗試和真實實現。使用基于視覺或深度傳感器的定位系統和使用其他傳感器來避免碰撞可以同樣成功。唯一的要求就是在選擇具體實現方式時遵循以下標準。 [haisenzeng@57]
Standards?
REP 105 定義了導航和更大的ROS生態系統所需的框架和約定。應始終遵循這些約定,以利用社區中豐富的定位、里程計和SLAM項目。 [haisenzeng@59]
簡而言之,REP-105至少必須為機器人建造一個包含map -> odom -> base_link -> [sensorframes] 的完整 的TF樹。TF2是 ROS 2中的時變坐標變換庫,Nav2使用TF2來表達和獲取時間同步的坐標變換。全球定位系統 (GPS、SLAM、動作捕捉Motion Capture) 的工作是至少要提供 map-> odom 的坐標轉換。然后,里程計系統的作用是提供 odom -> base_link 的坐標轉化。關于 base_link 的其余坐標轉換應該是靜態的,并應在 URDF 中定義。 [haisenzeng@60]
全局定位: 定位與SLAM [haisenzeng@61]?
全局定位系統 (GPS、SLAM、運動捕捉) 的工作是至少提供 map -> odom 的坐標轉換。Nav2項目提供的 amcl 是一種基于粒子過濾器的自適應蒙特卡羅定位技術,用于靜態地圖的定位。Nav2還提供用于定位和生成靜態映射的SLAM工具箱作為默認的SLAM算法。 [haisenzeng@62]
這些方法還可能產生其他輸出,包括位置話題、地圖或其他元數據,但它們必須提供該轉換才能有效。使用機器人定位可以將多種定位方法融合在一起,下面將詳細討論。 [小魚@63]
Odometry?
里程計系統的作用是提供 odom -> base_link 的坐標轉換。里程計可以來自許多數據源,包括激光雷達、車輪編碼器、VIO和IMUs。里程計的目標是提供基于機器人運動的平滑和連續的局部坐標系。全局定位系統會相對全局坐標的坐標變換進行更新,以解決里程計的漂移問題。 [haisenzeng@65]
這個 Robot Localization 通常用于這種融合。它將采用各種類型的 N 個傳感器,并為TF和話題提供連續平滑的里程計。一個典型的移動機器人裝置可能有來自車輪編碼器或IMUs的里程計以及融合在這個工作區內的視覺。 [haisenzeng@66]
這樣平滑輸出就可用于精確運動的航行位置推算和在全局位置更新之間準確地更新機器人的位置。 [haisenzeng@67]
環境表達 [haisenzeng@68]?
環境表征是機器人感知環境的方式。它還充當各種算法和數據源的中心定位工具,以將它們的信息組合到一個空間中。這樣,控制器、規劃器和恢復器就可以使用該空間來安全有效地計算它們的任務。 [haisenzeng@69]
成本地圖和圖層 [haisenzeng@70]?
當前的環境表達是一個成本地圖。成本地圖是包含來自未知、空閑、占用或膨脹成本的單元格的規則2D單元格網格。然后搜索該成本地圖以計算全局計劃或采樣以計算局部控制工作。 [haisenzeng@71]
各種成本地圖圖層被實現為pluginlib插件,以將信息緩沖到成本地圖中。這包括來自LIDAR、RADAR、聲納、深度傳感器、圖像傳感器等的信息。最好在傳感器數據輸入到層本地圖之前進行處理,但這取決于開發人員。 [haisenzeng@72]
可以使用相機或深度傳感器創建代價地圖層來檢測和跟蹤場景中的障礙物,以避免碰撞。此外,可以創建層來基于一些規則或啟發式算法來改變基礎成本圖。最后,它們可用于將實時數據緩沖到2D或3D世界中,以進行障礙物的二值化標記。 [haisenzeng@73]
成本地圖過濾器 [haisenzeng@74]?
想象一下,您正在注釋地圖文件 (或任何圖像文件),以便根據注釋地圖中的位置執行特定操作。記/注釋的示例可以是將某些區域排除在外以避免在這些區域內進行路徑規劃,或者讓某些像素屬于標記區域中的最大速度。這種帶注釋的地圖被稱為 “filter mask” 。就像覆蓋在某個表面上的掩碼一樣,過濾器掩碼的大小、位置和比例尺可以與主地圖相同,也可以不同。過濾器掩碼的主要目標是提供在地圖上進行標記的能力,以標記具有某些附加功能或行為變化的區域。 [haisenzeng@75]
成本地圖過濾器是基于成本地圖圖層的方法,可以將過濾器掩碼中注釋的空間相關行為變化應用到Nav2軟件堆棧中。成本地圖過濾器是作為成本地圖插件實現的。這些插件之所以被稱為 “filters” ,是因為它們會通過過濾器掩碼上標記的空間注釋對成本地圖進行過濾。為了制作過濾后的成本地圖并改變機器人在注釋區域的行為,過濾器插件會讀取來自過濾器掩碼的數據。該數據在過濾器空間中被線性變換為特征圖。有了這個變換后的特征圖以及地圖/成本地圖、任何傳感器數據和機器人當前坐標,過濾器就可以更新底層成本地圖,并根據機器人的位置改變機器人的行為。例如,通過使用成本地圖過濾器可以實現以下功能: [haisenzeng@76]
- 機器人永遠不會進入的禁區/安全區。 [haisenzeng@77]
- Speed restriction areas. Maximum speed of robots going inside those areas will be limited.
- 機器人在工業環境和倉庫中移動的首選通道。 [haisenzeng@79]
Other Forms?
存在各種其他形式的環境表征。包括: [haisenzeng@81]
- 梯度圖,類似于成本地圖,但梯度圖會表達表面梯度以檢查可穿越性 [haisenzeng@82]
- 3D成本圖,以3D形式表示空間,但這樣就也需要3D規劃和碰撞檢測 [haisenzeng@83]
- 網格圖,類似于梯度圖,但具有多個角度的表面網格 [haisenzeng@84]
- “Vector space” ,接收傳感器信息并使用機器學習算法來檢測要跟蹤的單個物品和位置,而不是對離散點進行緩沖區計算。。 [haisenzeng@85]
Nav2學術概述?
- 本文主要校準貢獻:haisenzeng
- 本文遵循知識共享協議,禁止未授權商用轉載
總結
以上是生活随笔為你收集整理的【Nav2中文网】三、导航相关概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小猫特别聪明的shoow
- 下一篇: 萤光云香港三区服务器测评