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