ROS探索总结(十六)(十七)(十八)(十九)——HRMRP机器人的设计 构建完整的机器人应用系统 重读tf 如何配置机器人的导航功能
ROS探索總結(十六)——HRMRP機器人的設計
1. HRMRP簡介
? ? ? ? HRMRP(Hybrid Real-time Mobile Robot?Platform,混合實時移動機器人平臺)機器人是我在校期間和實驗室的其他小伙伴一起從零開始設計并開發的一款機器人平臺,其中大部分擴展電路、驅動和ROS相關的底層功能都是我們自己做的。該機器人平臺具有軟硬件可編程、靈活性強、模塊化、易擴展、實時性強等特點,機器人的整體結構如下圖所示。
? ? ? HRMRP具備豐富的傳感器和執行器,在該平臺的基礎上,我們設計并實現了機器人SLAM、自主導航、人臉識別、機械臂控制等功能。在設計開發完成之初,我們參加了2013年的OpenHW大賽,并且獲得了全國一等獎,此外還在中國智能機器人學術會議上發表學術論文一篇,獲得了會議的十佳論文獎。這個機器人陪伴我走過了研究生的三年時光,接下來的幾篇博客,我會詳細介紹HRMRP從設計到實現方面的很多細節。就機器人的性能來講,很多方面是超越已有同等級的很多機器人的,但是由于我們開發能力、時間的限制,并沒有在最終的應用中充分發揮他的潛力,這也給我留下了一些遺憾。 ? ? ? 廢話不多說,先讓大家對該機器人有一個整體的印象: ? ? ??演示視頻:OpenHW大賽機器人演示 ? ? ? 相關論文:《基于嵌入式系統的室內移動機器人定位與導航》?
2. HRMRP的總體架構
? ? ? ? 如下圖所示,我們根據層次化、模塊化的思想,設計的HRMRP的總體架構。
3. 硬件層
3.1 機械平臺?
? ? ? ?HRMRP 主體結構為鋁合金材質,尺寸為 316mm×313mm×342mm?(高×寬×長),裝配兩個驅動輪與一個萬向輪。驅動輪由兩個 30W 的直流電機帶動,轉速可達 83 轉/分鐘,機器人最快速度 1.5m/s。HRMRP 還裝有一個六自由度機械臂,?可以完成三維空間內的夾取操作。?3.2 控制平臺?
? ? ? ?嵌入式系統具備小型化、低功耗、低成本、高靈活性等顯著的特點, 電子技術的?發展,也促使可編程門陣列FPGA在嵌入式系統中?得到了越來越廣泛的應用,很大程度上改善了嵌入式系統硬件的靈活度與繁瑣計算的?實時化。 HRMRP的控制平臺即基于 Xilinx 最新一代集成 FPGA 與 ARM 的片上系統?(System-on-Chip,SoC)——Zynq。? ? ? ? ?Zynq 由處理系統(Processor System, PS)與可編程邏輯(Programmable Logic,?PL)兩部分組成。其中 PS 基于 ARM Cortex-A9 雙核處理器構建,包含常用的外設接口,例如網絡、 USB、內存控制器等。而 PL 由 Xilinx 的 7 系列 FPGA 構成,支持動?態重配置,可以使用 Verilog 語言編程使用。在HRMRP 中,PS通過操作系統控制所?有功能正常有序的實現,而 PL作為協處理器一方面可以對復雜的運算并行加速處理,?另一方面可以進行 I/O 接口擴展,為多傳感器和執行器設計統一的接口,提高系統硬?件配置的靈活性。3.3 傳感器系統?
? ? ? ?在機器人核心傳感器的選擇上, HRMRP使用了高性價比、高集成度的微軟 Kinect?傳感器。 除此還裝配有超聲波、加速度、里程計、陀螺儀等多種傳感器, 確保機器人?平臺可以采集到豐富的傳感信息。4. 驅動層
? ? ? ?驅動層的主要工作是采集或預處理硬件層的數據,下發操作系統層的指令,為底層硬件與上層功能模塊提供相應的數據傳輸通道。由于我們采用的“ARM+FPGA”異構控制平臺,為配合硬件層硬件功能,驅動層也分為兩部分,分別放置于硬件的PS端和PL端。 ? ? ? ?PS端主要驅動連接到ARM處理器的外設,例如通過PS中的OpenNI驅動 Kinect, 并且提供 PL 端到 PS 端的接口。而在PL端中,利用可編程硬件的靈活性和并行處理能力,來進行 I/O 擴展與算法的硬件加速,?如下圖所示。
? ? ? ?在I/O 擴展方面,在傳統的設計實現當中,由于種類繁多的傳感器、?執行器對接口的要求各不相同,會占用大量 I/O 資源,增加處理器的負擔。而在HRMRP的ARM+FPGA系統當中,通過定義一組標準的硬件接口, 連接傳感器和電機等外設,可使用編程邏輯取代繁雜的電路連接工作,滿足各種不同需求的硬件外設。 ? ? ? ?在硬件加速方面,一般來說PS端適合常用接口的驅動、網絡數據的處理等功能,而PL端適合于規律性的算法處理,在HRMRP中主要負責Kinect的數據預處理工作(這里我們將OpenNI中的部分代碼放入FPGA中進行加速)。PS與PL相互配合,提高了系統數據處理的實時性。
5. 操作系統層
? ? ? ? 操作系統層是機器人平臺的控制核心,集成了機器人的功能模塊,負責行為控制、?數據上傳、指令解析、人機交互等功能。為與 ROS 通訊接口保持一致,使用Ubuntu12.04作為操作系統,運行于Zynq的PS端ARM處理器之中。ROS為用戶的不同需求提供了大小和功能不同的多種安裝包,為了減少ARM端的執行壓力, HRMRP編譯移植了僅包括 ROS 基本通訊機制的核心庫。繼承了ROS的優勢,機器人平臺具備ROS通訊以及功能包運行的能力,與上層網絡指令無縫連接,結合開源軟件庫,極大的豐富了機器人的功能模塊與應用范圍。? ? ? ? ?HRMRP是一種較為典型的高性能、低成本機器人平臺。與現在研究和應用中使用較為廣泛的TurtleBot、 Pioneer等機器人相比,HRMRP具有相似的結構與尺寸,同樣可以完成多種多樣的機器人應用,但是在接口的可擴展性、傳感器的豐富度以及成本控制等方面,具備更好的綜合性能。 ? ? ? ?今天就針對HRMRP的設計寫到這里,下篇繼續針對細節實現進行分析。
----------------------------------------------------------------
? ? ? ?1. 系統架構
? ? ? ?ROS作為一個分布式框架,從微觀的角度講,分布式體現在節點的布局和配置上,而從宏觀的角度來講,這種分布式可以體現在多機器人、多主機集成的系統當中。ROS社區中針對多機器人系統并沒有很多的涉及,相關應用也比較少。在HRMRP機器人的基礎上,我們試圖去提出一種多機器人實現的框架,如下圖所示:? ? ? ?2. Server (服務器)
? ? ? ?由于機器人架構多種多樣,處理應用的能力也各不相同,在不同場合下的需求也有差異,我們設計了服務器層來提高機器人應用的計算能力,負責調度、分配多機器人應用中的任務,同時為用戶提供友好、易用的人機交互界面。 ? ? ? ?分布的機器人節點與服務器都采用ROS框架設計,使用無線網絡通訊,可以快速集成ROS社區中豐富的應用功能。在多機器人系統當中,通過機器人之間的信息共享和與任務協作,可以讓每個機器人在充分發揮自己的能力的同時,獲得更多額外的應用潛力。 ? ? ??? ? ? ? 3. Robot Node(機器人節點)
? ? ? ?機器人節點是應用的執行者與信息的采集者。在該系統中可以集成多種采用ROS框架的機器人,這里以我們設計的HRMRP機器人平臺為例,上一篇博客中已經進行了詳細的介紹。? ? ? ? 4. 機器人導航
? ? ? ? HRMRP機器人平臺采用嵌入式系統作為主控,對于機器人導航等復雜算法的處理能力有限,于是我們將應用的處理在服務器端實現,機器人將采集到的周圍環境信息和自身傳感器信息發布,由服務器訂閱消息并完成處理和顯示,再向下發布控制指令。 ? ? ? ? 數據的處理流程如下:? ? ? ? SLAM的效果如下:
? ? ? ? 導航效果如下:
? ? ?
? ? ? ?5. 多機器人實驗
? ? ? ?當然,該系統對多機器人的支持也是很好的,由于時間有限,我們只做了一個簡單的機器人跟隨實驗。該實驗使用了兩個機器人,除HRMRP機器人之外,還使用樹莓派制作了一個簡單的小型機器人。在實驗中,HRMRP機器人在地圖上自主導航前進,服務器負責應用的處理與顯示,同時將HRMRP的位置信息轉發給樹莓派機器人,樹莓派機器人收到信息后,緊跟HRMRP。 ? ? ? ?實驗效果如下:? ? ??
? ? ? 6.相關論文
《A New ROS-based Hybrid Architecture?for Heterogeneous Multi-Robot Systems》----------------------------------------------------------------
ROS探索總結(十八)——重讀tf
在之前的博客中,有講解tf的相關內容,本篇博客重新整理了tf的介紹和學習內容,對tf的認識會更加系統。
1 tf簡介
1.1 什么是tf
? ? ? ? tf是一個讓用戶隨時間跟蹤多個參考系的功能包,它使用一種樹型數據結構,根據時間緩沖并維護多個參考系之間的坐標變換關系,可以幫助用戶在任意時間,將點、向量等數據的坐標,在兩個參考系中完成坐標變換。
? ? ? ? tf的相關設計思想,可以參見:tf設計
1.2 tf可以做什么
? ? ? ? 一個機器人系統通常有很多三維的參考系,而且會隨著時間的推移發生變化,例如全局參考系(world frame),機器人中心參考系(base frame),機械夾參考系(gripper frame),機器人頭參考系(head frame)等等。tf可以以時間為軸,跟蹤這些參考系(默認是10秒之內的),并且允許用戶提出如下的申請:
- 五秒鐘之前,機器人頭參考系相對于全局參考系的關系是什么樣的?
- 機器人夾取的物體相對于機器人中心參考系的位置在哪里?
- 機器人中心參考系相對于全局參考系的位置在哪里?
? ? ? ? tf可以在分布式系統中進行操作,也就是說一個機器人系統中所有的參考系變換關系,對于所有節點組件,都是可用的,所有訂閱tf消息的節點都會緩沖一份所有參考系的變換關系數據,所以這種結構不需要中心服務器來存儲任何數據。
1.3 tf的使用流程
? ? ? ? 想要使用tf功能包,總體來講可以分為以下兩個步驟:
? ? ? (1)???監聽tf變換
? ? ? ? 接收并緩存系統中發布的所有參考系變換,并從中查詢所需要的參考系變換。
? ? ? (2)???廣播tf變換
? ? ? ? 向系統中廣播參考系之間的坐標變換關系。系統中更可能會存在多個不同部分的tf變換廣播,每個廣播都可以直接將參考系變換關系直接插入tf樹中,不需要再進行同步。2 tf實例理解
? ? ? ? 參見:ROS探索總結(十二)——坐標系統3?tf基礎教程
? ? ? ? 參見:ROS探索總結(十二)——坐標系統
4?tf功能包的API說明
- 數據類型
- 變換與參考系
- 發布tf變換廣播
- 接收并使用tf廣播
- 異常
5 命令行工具
? ? ? ? 雖然tf是ROS中的一個代碼鏈接庫,但是仍然提供了豐富的命令行工具來幫助用戶調試和創建tf變換。5.1 tf_monitor
? ? ? ? tf_monitor工具的功能是打印tf樹中的所有參考系信息,通過輸入參數來查看指定參考系之間的信息。
? ? ? ? 命令格式如下:
- tf_monitor
- tf_monitor?<source_frame>?<target_target>
? ? ? ? 示例結果如下圖所示:
5.2 tf_echo
? ? ? ? tf_echo工具的功能是查看指定參考系之間的變換關系。
? ? ? ? 命令的格式如下:
- tf_echo?<source_frame>?<target_frame>
? ? ? ? 示例效果如下圖所示:
5.3 static_transform_publisher
? ? ? ? static_transform_publisher工具的功能是發布兩個參考系之間的靜態坐標變換,兩個參考系一般不發生相對位置變化。
命令的格式如下:
- static_transform_publisher?x?y?z?yaw?pitch?roll?frame_id?child_frame_id?period_in_ms
- static_transform_publisher?x?y?z?qx?qy?qz?qw?frame_id?child_frame_id??period_in_ms
? ? ? ? ?以上兩種命令格式,需要設置坐標的偏移和旋轉參數,偏移參數都使用相對于xyz三軸的坐標位移,而旋轉參數第一種命令格式使用以弧度為單位的?yaw/pitch/roll三個角度(yaw是圍繞x軸旋轉的偏航角,pitch是圍繞y軸旋轉的俯仰角,roll是圍繞z軸旋轉的翻滾角),而第二種命令格式使用四元數表達旋轉角度。發布頻率以ms為單位,一般100ms比較合適。
? ? ? ? 該命令不僅可以在終端中使用,還可以在launch文件中使用,使用方式如下: [html]?view plaincopy5.4 view_frames
? ? ? ? view_frames?是可視化的調試工具,可以生成pdf文件,來顯示整棵tf樹的信息。
? ? ? ? 命令行的執行方式如下: [html]?view plaincopy5.5 roswtf plugin
? ? ? ? roswtf是ROS中自查的工具,也可以作為組件使用。針對tf,roswtf可以檢查tf的配置并發現常見問題。
? ? ? ?命令的使用方式如下:[html]?view plaincopy
6?如何調試tf
? ? ? ? 參見:調試tf問題參考鏈接
- tf :?http://wiki.ros.org/tf
- tf設計:http://wiki.ros.org/tf/Design
- tf教程:http://wiki.ros.org/tf/Tutorials
- tf: The transform library:http://wiki.ros.org/Papers/TePRA2013_Foote
----------------------------------------------------------------
ROS探索總結(十九)——如何配置機器人的導航功能
1、概述
? ? ? ? ROS的二維導航功能包,簡單來說,就是根據輸入的里程計等傳感器的信息流和機器人的全局位置,通過導航算法,計算得出安全可靠的機器人速度控制指令。但是,如何在特定的機器人上實現導航功能包的功能,卻是一件較為復雜的工程。作為導航功能包使用的必要先決條件,機器人必須運行ROS,發布tf變換樹,并發布使用ROS消息類型的傳感器數據。同時,為了讓機器人更好的完成導航任務,開發者還要根據機器人的外形尺寸和性能,配置導航功能包的一些參數。
?
2、硬件要求
? ? ? ??盡管導航功能包設計得盡可能通用,但是仍然對機器人的硬件有以下三個要求:
? ? ? ?(1)導航功能包僅對差分等輪式機器人有效,并且假設機器人可直接使用速度指令進行控制,速度指令的格式為:x方向速度、y方向速度、速度向量角度。
? ? ? ?(2)導航功能包要求機器人必須安裝有激光雷達等二維平面測距設備。
? ? ? ?(3)導航功能包以正方型的機器人為模型進行開發,所以對于正方形或者圓形外形的機器人支持度較好,而對于其他外形的機器人來講,雖然仍然可以正常使用,但是表現則很有可能不佳。
?
3、機器人配置
? ? ? ? 導航功能包的結構如上圖所示,在自己的機器人平臺上實現自主導航,簡單來說,就是按照上圖將需要的功能按照需求完成即可。其中白色的部分是ROS功能包已經完成的部分,不需要我們去實現,灰色的是可選的部分,也由ROS完成,在使用中根據需求使用,需要關注的重點部分是藍色部分,這些需要我們根據輸入輸出的要求完成相應的功能。
3.1、ROS
? ? ? ? 首先,請確保你的機器人安裝了ROS框架。
3.2、tf變換(sensortransforms)
? ? ? ? 導航功能包要求機器人以tf樹的形式發布各個相關參考系的變換關系。
3.3、傳感器信息(sensor sources)
? ? ? ? 導航功能包需要采集機器人的傳感器信息,以達到實時避障的效果。這些傳感器要求能夠通過ROS發布
sensor_msgs/LaserScan或者sensor_msgs/PointCloud?格式的消息,也就是二維雷達信息或者三維點云數據。ROS社區已經支持大部分激光雷達、Kinect等設備的驅動,可以直接使用社區提供的驅動功能包發布滿足要求的傳感器信息。如果你使用的傳感器沒有ROS支持,或者你想使用自己的驅動,也可以自己將傳感器信息封裝成要求的格式。
3.4、里程計信息(odometrysource)
? ? ??導航功能包要求機器人發布nav_msgs/Odometry格式的里程計信息,同時在也要發布相應的tf變換。
3.5、機器人控制器(base_controller)
? ? ??導航功能包最終的輸出是針對機器人geometry_msgs/Twist格式的控制指令,這就要求機器人控制節點具備解析控制指令中速度、角度的能力,并且最終通過這些指令控制機器人完成相應的運動目標。
3.6、地圖(map_server)
? ? ?? 地圖并不是導航功能所必需的。
?
4、導航功能包集的配置
? ? ? ? 在滿足以上條件的前提下,我們來針對導航功能進行一些配置。
4.1、創建一個功能包
? ? ? ?首先,我們需要創建一個功能包,用來存儲導航需要用到的所有的配置文件和launch啟動文件。在創建功能包的時候,我們需要添加相關的所有依賴,包括機器人配置中使用到的功能包,當然不要忘記了move_base功能包,因為該包有很多我們后面需要用到的接口。找到合適的位置,輸入以下命令來創建包:
[html]?view plaincopy
4.2、創建機器人啟動文件
? ? ? ? 現在,我們已經有了一個存儲各種文件的工作空間,下一步,我們來創建一個機器人啟動文件,用來啟動機器人配置中所提到的所有硬件,并發布相應的消息和變換關系。
? ? ? ? 打開編輯器,輸入以下格式的內容,并保存為my_robot_configuration.launch命名的文件:
[html]?view plaincopy
? ?讓我們來詳細的解讀以上內容的含義:
[html]?view plaincopy
? ? ??這部分代碼用來啟動機器人的傳感器,根據以上格式,修改你所使用到的傳感器驅動包名稱、類型、命名等信息,并且添加驅動包節點需要使用到的參數。當然,如果你需要使用多個傳感器,可以使用相同的方法,啟動多個傳感器的驅動節點。
[html]?view plaincopy
? ? ??這部分代碼用來啟動機器人上的里程計,根據需要修改功能包名、類型、節點名、參數。
[html]?view plaincopy
? ? ? 這部分代碼需要啟動機器人相關的坐標變換。
4.3、代價地圖的配置?(local_costmap)& (global_costmap)
? ? ?? 導航功能包使用兩種代價地圖存儲周圍環境中的障礙信息,一種用于全局路徑規劃,一種用于本地路徑規劃和實時避障。兩種代價地圖需要使用一些共同和獨立的配置文件:通用配置文件,全局規劃配置文件,本地規劃配置文件。以下將詳細講解這三種配置文件:
(1)通用配置文件(Common Configuration (local_costmap) &(global_costmap))
? ? ? 代價地圖用來存儲周圍環境的障礙信息,其中需要注明地圖關注的機器人傳感器消息,以便于地圖信息進行更行。針對兩種代價地圖通用的配置選項,創建名為costmap_common_params.yaml的配置文件:
[html]?view plaincopy
? ? ??詳細解析以上配置文件的內容:
[html]?view plaincopy
? ? ???這兩個參數用來設置代價地圖中障礙物的相關閾值。obstacle_range參數用來設置機器人檢測障礙物的最大范圍,設置為2.5意為在2.5米范圍內檢測到的障礙信息,才會在地圖中進行更新。raytrace_range參數用來設置機器人檢測自由空間的最大范圍,設置為3.0意為在3米范圍內,機器人將根據傳感器的信息,清除范圍內的自由空間。
[html]?view plaincopy
? ? ???這些參數用來設置機器人在二維地圖上的占用面積,如果機器人外形是圓形,則需要設置機器人的外形半徑。所有參數以機器人的中心作為坐標(0,0)點。inflation_radius參數是設置障礙物的膨脹參數,也就是機器人應該與障礙物保持的最小安全距離,這里設置為0.55意為為機器人規劃的路徑應該與機器人保持0.55米以上的安全距離。
[html]?view plaincopy
? ???observation_sources參數列出了代價地圖需要關注的所有傳感器信息,每一個傳感器信息都將在后邊列出詳細信息。
[html]?view plaincopy
? ? ???以激光雷達為例,sensor_frame標識傳感器的參考系名稱,data_type表示激光數據或者點云數據使用的消息類型,topic_name表示傳感器發布的話題名稱,而marking和clearing參數用來表示是否需要使用傳感器的實時信息來添加或清楚代價地圖中的障礙物信息。
(2)全局規劃配置文件(Global Configuration (global_costmap))
? ? ? ??全局規劃配置文件用來存儲用于全局代價地圖的配置參數,我們使用global_costmap_params.yaml來命名,內容如下:
[html]?view plaincopy
? ? ?global_frame參數用來表示全局代價地圖需要在那個參考系下運行,這里我們選擇了map這個參考系。robot_base_frame參數表示代價地圖可以參考的機器人本體的參考系。update_frequency參數絕地全局地圖信息更新的頻率,單位是Hz。static_map參數決定代價地圖是否需要根據map_server提供的地圖信息進行初始化,如果你不需要使用已有的地圖或者map_server,最好將該參數設置為false。
(3)本地規劃配置文件(Local Configuration (local_costmap))
? ? ???本地規劃配置文件用來存儲用于本地代價地圖的配置參數,命名為local_costmap_params.yaml,內容如下:
[html]?view plaincopy
? ????"global_frame", "robot_base_frame","update_frequency",?和?"static_map"參數的意義與全局規劃配置文件中的參數相同。publish_frequency設置代價地圖發布可視化信息的頻率,單位是Hz。rolling_window參數是用來設置在機器人移動過程中是否需要滾動窗口,以保持機器人處于中心位置。"width," "height,"?和"resolution"?設置設置代價地圖長(米)、高(米)和分辨率(米/格)。分辨率可以設置的與靜態地圖不同,但是一般情況下兩者是相同的。
4.4?本地規劃器配置
? ? ???本地規劃器base_local_planner的主要作用是根據規劃的全局路徑,計算發布給機器人的速度指令。該規劃器需要我們根據機器人的規格,配置一些相應的參數。我們創建名為base_local_planner_params.yaml的配置文件:
[html]?view plaincopy
? ? ? 該配置文件聲明了機器人的本地規劃采用Trajectory Rollout算法。第一段設置了機器人的速度閾值,第二段設置了機器人的加速度閾值。
4.5?為導航功能包創建一個啟動文件
? ? ??到此為止,我們已經創建完畢所有需要用到的配置文件,接下來我們需要創建一個啟動文件,來啟動所有需要的功能。創建move_base.launch的文件:
[html]?view plaincopy
? ? ??在該配置文件中,你需要修改的只有map-server輸入的地圖,以及如果使用差分驅動的機器人,需要修改"amcl_omni.launch"成"amcl_diff.launch"?。
4.6 AMCL功能包的設置
? ? ??AMCL有許多的參數設置,會影響機器人的定位效果,具體參考amcldocumentation。
5、運行導航功能包
? ? ? ?現在,我們已經完成了所有需要的工作,最后一步,運行啟動文件,開始導航之旅:
[html]?view plaincopy
? ? ? ??現在導航功能包應該已經可以順利運行了,但這絕對不是結束,因為你只能從終端里看到一端亂蹦的代碼,如何使用更友好的方式進行機器人導航呢?如果你想使用UI界面,請參考rviz and navigationtutorial,如果你想使用代碼,請參考Sending SimpleNavigation Goals?。
----------------------------------------------------------------
歡迎大家轉載我的文章。
轉載請注明:轉自古-月
http://blog.csdn.net/hcx25909
歡迎繼續關注我的博客
總結
以上是生活随笔為你收集整理的ROS探索总结(十六)(十七)(十八)(十九)——HRMRP机器人的设计 构建完整的机器人应用系统 重读tf 如何配置机器人的导航功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROS探索总结(十三)(十四)(十五)—
- 下一篇: java信息管理系统总结_java实现科