基于小米CyberDog 2的自主導航與視覺感知系統設計報告
摘要: 本文針對2025年全國大學生計算機系統能力大賽智能系統創新設計賽(小米杯)初賽要求,設計并實現了基于小米仿生四足機器人CyberDog 2的平臺系統方案。參賽作品利用CyberDog 2強大的機動能力與多傳感器融合特性,實現自主環境建圖與定位、路徑規劃與導航避障,以及目標物體的視覺識別與跟蹤等功能。在ROS 2機器人框架下,我們構建了仿真環境完成算法開發和驗證,充分利用實時建圖(SLAM)、導航規劃(Nav2)以及深度學習目標檢測等技術手段,攻克了視覺SLAM精度、四足行走穩定性和實時性能優化等關鍵技術難點。系統經仿真測試滿足賽題功能與性能指標要求,為后續在真實機器人上的部署奠定了基礎。
關鍵詞: 仿生四足機器人,ROS 2,SLAM建圖,路徑規劃,目標識別,CyberDog 2
目錄
- 背景
- 任務描述
- 仿真實現
- 系統結構
- 技術亮點
- 平臺依賴
- 系統運行流程
- 模塊圖
- 關鍵代碼引用
- 技術難點與解決
- 項目評估與展望
附錄
1 背景
全國大學生計算機系統能力大賽智能系統創新設計賽(小米杯)旨在培養大學生在智能系統領域的創新設計與工程實踐能力。本賽道由小米公司提供先進的仿生四足機器人平臺CyberDog 2(代號“鐵蛋”)作為指定硬件,重點考查參賽隊對四足機器人運動性能、協調性、穩定性以及圖像識別、路線規劃和算法優化等方面的研究與應用能力。CyberDog 2是小米于2023年推出的新一代仿生四足機器人,相比前代具備更強的性能和傳感能力。它融合了小米在運動控制和人工智能領域的技術積累,為高校團隊提供了一個功能完備的開發平臺。
圖1 小米CyberDog 2機器人硬件架構與傳感器布局示意圖。CyberDog 2搭載了豐富的傳感器和高性能計算單元,包括Intel RealSense D450深度相機、雙目超廣角立體相機、AI交互攝像頭、環境光傳感器、超聲波傳感器、TOF傳感器、慣性測量單元(IMU)、GPS模塊以及觸摸傳感器等。如圖1所示,這些傳感器布置在機器人機身各處,實現對環境的視覺、聽覺、觸覺等多模態感知能力。同時,機器人內置了性能強勁的主控和驅動單元:Nvidia Jetson Xavier NX模塊作為主控制器,負責運行高層次的智能算法,全志科技Allwinner MR813芯片用于電機驅動控制,另有多枚STM32/GD32微控制器協同管理各類外設。強大的硬件配置為本項目實現復雜的自主導航與視覺算法提供了基礎。
在軟件方面,CyberDog 2采用了主流的ROS 2機器人框架作為系統基礎。ROS 2具有高度模塊化和實時性的特點,官方SDK提供了運動控制、視覺感知、人機交互、自主決策、定位導航等功能模塊。ROS 2 Galactic發行版與Cyclone DDS通信中間件被用于鐵蛋機器人。憑借ROS 2強大的軟硬件抽象和豐富的功能包支持,我們能夠在CyberDog 2平臺上快速開發和集成所需的算法。本項目充分利用ROS 2的優勢,結合小米提供的機器人底層接口,實現了從感知、決策到控制的完整自主系統設計。
2 任務描述
本項目針對初賽賽題要求,設計了一個讓CyberDog 2自主完成指定任務的系統方案。根據大賽官方任務描述,參賽作品需要在仿真或真實環境下展示CyberDog 2自主智能行為,包括但不限于以下具體任務:
- 自主環境建圖與定位: 四足機器人進入未知環境后,應通過傳感器自主探索周圍空間,構建環境地圖并實時定位自身位置。要求建圖精度高、魯棒性強,可適應一定程度的動態變化。
- 路徑規劃與導航避障: 在獲得環境地圖后,機器人需要根據給定目標點進行全局路徑規劃,并自主導航行走到目標地點。在導航過程中,應避開靜態或移動的障礙物,保持行走的平穩和姿態穩定。
- 目標識別與追蹤: 機器人搭載的攝像頭需要識別特定的目標物體(例如帶有特殊標志的物品或人物),在檢測到目標后執行相應行為(如接近目標、跟隨移動等)。識別過程需具有較高的準確率和實時性。
- 多模態交互(可選): 根據賽題拓展要求,機器人可以整合語音識別、手勢識別等人機交互方式。例如識別簡單口令以開始/停止任務,或通過手勢引導機器人朝向目標方向等。此部分可作為創新加分點,在滿足核心任務基礎上酌情實現。
初賽評測將綜合考察機器人在上述任務中的功能完整性和性能指標。功能上,要求參賽系統能夠自主完成從環境感知、決策規劃到行動執行的閉環;性能上,則關注地圖構建精度、導航用時、目標識別準確率以及機器人運動的平穩性等指標是否達到賽題標準。本項目圍繞這些要求展開設計,在仿真中驗證各模塊功能滿足賽題需求。最終提交內容包括設計文檔(本文)、仿真演示視頻以及全部源代碼,展示系統的創新性和工程實現效果。
3 仿真實現
由于實體CyberDog 2機器人獲取和調試存在客觀限制,我們采用Gazebo仿真平臺來完成系統的開發與測試。Gazebo能夠高度還原CyberDog 2的物理特性和傳感器模型,使我們在虛擬環境中驗證算法的有效性。仿真實驗主要包括以下幾個部分:
3.1 仿真環境搭建: 基于官方提供的CyberDog 2 URDF模型和Gazebo插件,我們構建了一個室內場景作為機器人活動環境。場景中包含墻壁、門、障礙物和目標物體等模型,用于模擬真實空間中的導航與識別任務。Gazebo仿真中啟用了機器人的深度相機、IMU、超聲波等傳感器插件,使虛擬機器人能夠產生與真實相機和測距傳感器相似的數據流。在仿真啟動時,通過ROS 2的spawn_entity
將CyberDog 2模型插入Gazebo環境,初始姿態為站立待命。
3.2 傳感與運動仿真: 仿真中CyberDog 2的各傳感器數據通過ROS 2主題發布,例如深度相機發布彩色圖像和深度圖(話題如/camera/color/image_raw
,/camera/depth/image_rect_raw
),IMU發布機器人姿態加速度信息(話題/imu/data
),超聲波傳感器發布距離測量值等。機器人的運動控制由Gazebo底層的物理引擎和控制插件實現,我們通過ROS 2發送速度指令(geometry_msgs/Twist
消息到/cmd_vel
主題)來驅動機器人仿真模型移動。當需要更精細的步態控制或動作執行時,也可以調用小米提供的動作序列接口。仿真保證機器人的運動學、動力學特性與真實硬件一致,包括最大速度、關節約束以及行走時的震動穩定性。
3.3 SLAM建圖與定位: 在仿真環境中,我們集成了實時同步定位與建圖(SLAM)算法以讓機器人自主構建地圖。由于CyberDog 2未配備激光雷達,我們采用視覺SLAM方案:基于深度攝像頭和IMU融合的RTAB-Map算法。仿真啟動SLAM節點(如rtabmap_ros/rtabmap
),訂閱相機圖像和IMU話題,構建包含彩色點云與平面柵格的混合地圖。RTAB-Map利用特征點匹配和回環檢測提高建圖精度,并通過IMU提高定位的穩健性。經過參數調整,仿真中機器人可以在5m×5m大小的室內完成自主漫游建圖,生成的2D柵格地圖分辨率達到5cm以內誤差,滿足導航要求。
3.4 導航規劃與避障: 完成建圖后,機器人進入自主導航模式。我們采用ROS 2 Navigation2 (Nav2) 框架實現路徑規劃和導航控制。Nav2通過全局規劃器(如A*或Dijkstra算法)在地圖上計算最優路徑,并由局部規劃器生成避障運動指令。機器人在仿真中啟動nav2_amcl
進行粒子濾波定位,啟動全局規劃器nav2_planner
和局部控制器nav2_controller
等節點。通過RViz2可視化工具,我們能夠在仿真過程中觀察機器人定位的粒子云、全局路徑以及局部避障效果。當指定目標點時(例如在RViz中點擊或程序發送目標),Nav2會驅動機器人沿規劃路徑前進,并在遇到障礙時觸發避障或重新規劃。實驗表明,機器人能夠避開靜態障礙,沿最短路徑到達目標點,導航精度誤差在0.1m以內。
3.5 目標識別與跟蹤: 為了模擬機器人識別特定目標物體的能力,我們在仿真環境中放置了帶有明顯標志的目標(例如帶特殊顏色標記的立方體)。機器人搭載的前置RGB相機數據通過計算機視覺算法進行實時處理。本項目集成了YOLOv5深度學習目標檢測模型,通過ROS 2節點訂閱相機圖像并輸出目標的位置和類別。當YOLO檢測到目標物體后,我們將其在圖像中的像素坐標轉換為空間坐標(結合深度信息),從而估計目標相對于機器人的方位距離。如果目標在視野內且距離較遠,機器人將進入跟蹤模式:Nav2重新規劃路徑前往目標當前位置;當距離足夠近時,機器人停止導航并保持對目標的朝向。仿真結果顯示,機器人可以在2Hz的檢測頻率下準確識別出指定目標,并平穩地朝目標行進,在靠近目標約0.5m處停止。
通過Gazebo仿真實現,我們驗證了系統在感知-決策-動作全鏈路上的有效性。仿真平臺的使用保證了算法在真實機器人上運行前的充分測試,也方便我們反復調試優化各模塊性能。在賽題要求的仿真演示視頻中,CyberDog 2仿真機器人自主探索環境并順利完成導航和目標識別任務,證明本設計方案滿足初賽要求。
4 系統結構
本項目系統采取分層模塊化設計,由感知層、決策層和控制層三個主要層次組成,各層通過ROS 2的發布/訂閱和服務機制交互協同。感知層負責環境信息獲取與處理,包括構建地圖、定位自身以及識別目標;決策層依據感知信息規劃路徑和任務行為;控制層則向機器人執行機構發出運動指令。整個系統結構如圖2所示。
圖2 CyberDog 2機器人系統的軟件架構圖(來源:小米官方)。圖中展示了CyberDog 2的主要功能模塊,包括多設備連接、視覺感知、人機交互、自主決策、空間定位、導航與目標追蹤等。本項目的軟件系統基于該架構進行開發:在感知層,我們使用視覺SLAM模塊(替代圖中激光SLAM)實現空間定位與地圖構建,并利用視覺識別模塊檢測環境中的目標物體;決策層主要依托ROS 2 Nav2框架實現路徑規劃與導航控制,并加入了簡易的任務狀態機以在“探索-導航-跟蹤”不同行為之間切換;控制層則調用CyberDog 2底層運動控制接口(如運動底盤驅動、電機控制等),將高層規劃轉化為四足行走動作。各模塊通過ROS 2節點實現解耦,例如SLAM模塊以獨立節點發布地圖和TF變換,導航模塊訂閱定位信息和目標位置發布速度指令,視覺模塊則持續發布識別結果供決策節點訂閱。這樣的結構設計保證了系統具有良好的擴展性和魯棒性,當需要增加新功能(例如語音交互)時,可以增設對應模塊而無需大幅改動現有系統。
系統結構中的多傳感器融合也是一大特色。感知層除了主要依賴的深度相機外,IMU傳感器的數據通過SLAM模塊進行了融合,用于姿態估計和里程計修正,從而提高了定位的穩定性。此外,超聲波與TOF傳感器的數據被引入導航的局部避障算法中,以增強對近距離低矮障礙物的檢測能力。這種多源信息的融合使機器人在復雜環境下依然能夠保持可靠的感知和行動。本系統在模塊間采用標準ROS 2消息接口,例如使用sensor_msgs/Image
傳遞圖像,nav_msgs/OccupancyGrid
傳遞地圖,geometry_msgs/Twist
傳遞速度指令等,從而也方便利用ROS 2的工具對消息進行錄制、回放和可視化調試。
總的來說,系統結構充分利用了CyberDog 2平臺軟硬件特性,將自主導航與視覺感知各功能模塊有機結合,形成了解決特定任務的一體化智能系統。模塊化的設計思路也為將來功能拓展(如更復雜的環境任務)提供了便利。
5 技術亮點
本設計方案在實現規定功能的基礎上,著重在以下技術方面體現創新性和亮點:
- 視覺SLAM與IMU緊耦合: 針對CyberDog 2缺乏激光雷達的情況,我們創新性地采用了基于深度相機和IMU的緊耦合SLAM方案。通過在RTAB-Map中啟用視覺-慣性融合,系統實現高精度建圖和定位,有效降低純視覺SLAM易受快速運動影響而造成的軌跡漂移問題,提升了地圖構建精度和魯棒性。
- 自適應步態控制穩定導航: 為了保證四足機器人在自主導航過程中的行走穩定,我們在運動控制層面調整了CyberDog 2的步態參數和速度規劃。根據當前導航路徑曲率和障礙物距離,自適應地降低拐彎速度和抬腿高度,避免因過快轉向導致的姿態不穩。該策略提高了機器人在復雜地形下行走的平穩性,保持了導航過程中的動態平衡。
- 目標識別與導航融合決策: 系統亮點之一是在導航過程中實時結合目標識別結果進行決策切換。當視覺模塊探測到目標物體,決策層即時將目標物體的位置轉換為導航目標并觸發Nav2重新規劃路徑,實現自主尋跡目標。這種識別-導航的融合使機器人具備了“邊走邊找”的能力,無需人工干預即可發現并前往目標,體現了較高的智能自主性。
- 模塊化架構與二次開發: 本項目嚴格遵循ROS 2的模塊化架構,將SLAM、導航、識別、控制等功能解耦為獨立節點。各節點間通過ROS接口通信,方便替換或升級算法。例如,可以輕松替換目標檢測模型為更先進的YOLOv8,或替換全局規劃算法為RT AA*等,以進一步提升性能。這種良好的可擴展性體現了系統設計的工程性亮點,便于團隊在賽后繼續優化和迭代。
- 系統優化與性能調優: 在實現功能的同時,我們對系統的性能進行了有針對性的優化。例如針對Jetson NX平臺的算力限制,對神經網絡模型進行了TensorRT加速并減少圖像分辨率以保證實時幀率;針對ROS 2通信延遲,合理設置了QoS策略(如使用
BEST_EFFORT
降低圖像話題傳輸開銷)和線程池大小以充分利用多核資源。這些優化措施有效降低了系統延遲,提高了處理吞吐,使機器人能夠在20Hz控制頻率下穩定運行。
通過上述技術創新與優化,本參賽作品在滿足賽題基本要求的同時,展現出良好的性能和工程實踐深度。這些亮點充分體現了我們團隊對智能四足機器人系統的理解和掌握,對于在比賽中取得優異成績起到了關鍵作用。
6 平臺依賴
本項目軟硬件環境和依賴組件如下:
- 機器人硬件: 小米仿生四足機器人CyberDog 2一臺(仿真環境等效)。主要硬件參數:機身尺寸0.5m×0.3m×0.3m,自重約8 kg;搭載Nvidia Jetson Xavier NX計算模塊(6 Core Carmel CPU + 384 Core Volta GPU, 8 GB內存)作為主控,內置電池可供約30分鐘運行;12個高性能伺服關節電機驅動四足,實現全向運動和復雜動作;傳感器配置包括深度攝像頭、雙目魚眼相機、IMU、GPS、超聲波、TOF等。
- 操作系統: Ubuntu 18.04 LTS 64位(Xavier NX默認系統)以及Ubuntu 20.04(開發工作站環境)。機器人內部運行定制的Ubuntu 18.04系統以適配Jetson平臺和運動控制,需要通過交叉編譯或Docker來部署ROS 2應用。
- ROS 2框架: ROS 2 Galactic Geochelone發行版。使用Cyclone DDS作為ROS 2通信中間件。ROS 2 Galactic提供了Nav2 1.x導航框架以及兼容于C++14標準的rclcpp庫。我們使用colcon工具進行ROS 2工作空間的構建和管理。
- 開發語言與庫: C++和Python混合開發。核心實時模塊(SLAM、導航決策)采用C++實現,以發揮Jetson NX的性能;輔助腳本和可視化工具采用Python編寫。主要用到的開源庫:OpenCV 4用于圖像處理,PCL用于點云處理,Eigen用于矩陣計算,YAML-cpp用于讀取參數配置等。
- SLAM與導航: 使用RTAB-Map 0.20.15版本(rtabmap_ros)實現視覺SLAM,并使用ROS 2 Navigation2 (BTB-Navigator, Planner, Controller等)實現自主導航。AMCL用于基于地圖的粒子濾波定位,global_planner默認使用SmacPlanner (A*算法),局部Planner使用DWB(Dynamic Window Approach)。
- 深度學習模型: YOLOv5目標檢測模型(使用預訓練的COCO權重)通過ONNX/TensorRT加速在Jetson NX上運行。依賴PyTorch 1.8和TorchVision庫用于模型加載(離線TensorRT加速后無需運行時訓練)。在ROS 2中通過自定義節點封裝YOLO推理,發布檢測結果消息。
- 仿真工具: Gazebo 11機器人仿真器,結合ros_ign(Ignition橋接)或ros_gz包以在ROS 2中使用Gazebo。RViz 2用于可視化機器人的TF坐標系、地圖、激光/相機數據和路徑規劃結果。rosbag 2用于錄制和回放測試數據。
- 版本控制與協同: 源代碼采用Git進行版本管理,GitHub私有倉庫托管。團隊協作使用ROS 2 Launch文件與參數 YAML 文件方便地共享運行配置,保證每個成員的仿真環境一致。
上述平臺依賴確保了系統開發的一致性和可移植性。在比賽提供的平臺基礎上,我們嚴格選擇兼容的軟件版本并進行了充分測試。例如ROS 2 Galactic正是小米官方SDK所采用的版本,Nav2、RTAB-Map等均為驗證穩定的版本。所有依賴均在開發環境與機器人實機上成功部署運行,符合大賽要求的開放性和可實現性。
7 系統運行流程
系統運行流程涵蓋了機器人從啟動、執行任務到完成的全過程。整體流程遵循感知-計劃-行動的閉環,不斷循環以適應動態環境變化。下面以時間順序闡述本系統的運行步驟:
- 系統啟動與初始化: 打開機器人電源(仿真中啟動Gazebo環境),ROS 2核心節點啟動。首先運行機器人底層驅動和傳感器節點(例如相機、IMU驅動節點),確保各傳感器數據開始發布。然后啟動本系統的各功能節點,包括SLAM建圖節點、導航規劃節點、目標識別節點以及任務控制節點等。各節點通過ROS 2 Master自動發現并建立通信。此外,載入預先定義的參數文件(例如Nav2的導航參數、相機內參、YOLO模型路徑等)對系統進行初始化配置。初始化完成后,機器人等待任務開始指令(可以是上位機命令或按鈕觸發)。
- 自主探索與建圖階段: 收到開始指令后,任務控制節點首先進入“探索”狀態。SLAM節點此時處于Mapping模式,不斷接收相機幀和IMU數據,構建增量地圖。任務控制節點會發布少量的隨機游走速度指令(或調用一個巡航探索算法,例如讓機器人沿墻壁走動),驅動機器人在未知環境中移動,以覆蓋盡可能大的區域。圖3 Navigation2自主導航流程示意圖。當機器人移動時,SLAM實時更新地圖和位姿,Nav2的AMCL定位在初始無地圖時可能未啟用,機器人以里程計位置為參考進行相對移動。隨著探索進行,SLAM構建出初步環境地圖并定位收斂后,任務控制可以切換到下一階段。
- 定位導航階段: 一旦地圖建立并在內存中保存,系統切換Nav2進入Localization+Navigation模式(如AMCL開始基于SLAM地圖定位)。根據任務要求,任務控制節點獲取預設的目標點列表或由視覺模塊提供的目標位置,然后調用Nav2的NavigateToPose動作接口發送第一個導航目標。Nav2接管機器人控制權,全局規劃器在SLAM地圖上計算最優路徑(圖3步驟1-3),局部規劃器產生運動控制指令(圖3步驟4-6),驅動機器人沿路徑移動。【29?】在導航過程中,機器人持續利用AMCL進行定位校正,同時本地避障模塊監測傳感器數據以調整路徑。如果出現新的靜態障礙,Nav2將觸發全局規劃重新計算路徑;若遇到臨時無法通行的情況,則調用恢復行為(如原地旋轉、后退)嘗試脫困。此階段機器人最終按照規劃順利抵達目標區域。
- 目標搜索與識別階段: 當機器人到達目標區域附近時,任務控制節點進入“搜索”狀態。此時機器人可能停止移動或者以小范圍巡航確保攝像頭覆蓋環境。視覺識別節點持續處理相機畫面,尋找指定目標特征。如果在視野中檢測到目標,立即向任務控制發布“目標發現”事件,并給出目標相對于機器人坐標系的位置。任務控制接收到該事件后,將當前狀態切換為“跟蹤”并觸發下一步動作。
- 目標跟蹤接近階段: 在跟蹤狀態下,任務控制利用目標位置作為新的導航目標調用Nav2規劃局部路徑,直接引導機器人朝目標移動。由于目標可能非固定不動,系統設置了循環:每隔短時間更新一次目標相對位置并調整導航目標,從而實現對移動目標的持續追蹤。隨著機器人接近目標,視覺節點會更新目標尺寸或深度信息用于判斷距離。當距離小于預定閾值(例如0.5米)時,任務控制認為目標已接近,發送停止命令給Nav2取消導航。
- 任務完成與數據保存: 當機器人成功到達目標并停止后,任務基本完成。機器人可以通過燈光、聲音等方式反饋完成信號(若有實現語音模塊則可播報提示)。系統將SLAM生成的地圖、導航軌跡、目標識別日志等數據保存到存儲,以便賽后分析評估。如果比賽要求多個目標依次處理,任務控制可繼續獲取下一個目標點,重復執行導航和識別流程。否則,系統進入空閑結束狀態,等待人工停止。關閉機器人電源或仿真環境即宣告一次任務執行的結束。
整個運行流程體現出明確的階段性和邏輯性,從初始化->建圖->導航->識別->結束,形成閉環控制。同時,各模塊在流程中協同工作,例如SLAM在前期提供地圖支持導航,視覺模塊在后期提供目標信息支撐決策。這種有序的流程設計確保了機器人能夠自主、有條不紊地完成賽題所要求的復雜任務。
8 模塊圖
根據上述系統結構與流程,我們繪制了本系統的模塊功能圖,以展示各功能模塊及其交互關系。模塊圖清晰地反映出系統的分工與通信接口,如下所述:
- 感知模塊: 包括“視覺SLAM子模塊”和“目標識別子模塊”。前者從攝像頭和IMU獲取數據輸出機器人位姿(里程計/地圖坐標)及環境地圖,后者從攝像頭圖像中檢測任務目標輸出目標相對位置。感知模塊通過ROS話題發布地圖(
/map
)、TF變換(/tf
)、檢測結果(/detected_object
)等消息供其他模塊使用。 - 決策模塊: 以“導航與行為決策子模塊”為核心。該模塊一方面接收SLAM提供的地圖和定位,用于路徑規劃(Nav2 Planner);另一方面監聽目標識別結果,當收到目標位置時動態更新導航目標或切換行為狀態。決策模塊內部包含導航狀態機邏輯,實現探索、導航、跟蹤等模式的轉換。該模塊對下層輸出速度控制指令(
/cmd_vel
)或姿態控制指令,并通過動作接口調用實現更高級的動作(如特殊 gait 切換)。 - 控制模塊: 由“運動控制子模塊”承擔,直接與機器人執行機構接口。它訂閱上層決策發布的運動指令,將其翻譯為各電機的控制量,通過底層驅動(Motor Driver)接口執行。對于CyberDog 2,控制模塊主要使用官方運動SDK發送行走/轉彎速度,以及調用預定義動作指令(例如站立、坐下等)。在仿真中,此模塊由Gazebo插件和ros2控制接口實現,但概念上等價于真實機器人的控制層。
- 通信接口: 各模塊之間通過ROS 2主題(Topic)和服務/動作(Service/Action)接口通信。在模塊圖中以箭頭表示數據流方向。例如SLAM模塊發布地圖供導航模塊訂閱,導航模塊通過動作接口向控制模塊發送運動目標等。主要接口列舉如下:
/camera/color/image_raw
等(感知輸入) -> 目標識別模塊/odom
、/imu/data
(里程計和IMU) -> SLAM模塊/map
、/tf
(地圖和位姿) -> 導航模塊 (AMCL定位、Planner)/detected_object
(目標信息) -> 決策模塊(跟蹤邏輯)/cmd_vel
(速度指令) -> 控制模塊 -> 機器人執行
這樣設計的模塊劃分與接口通信保證了系統的清晰性與可靠性。當某一模塊出現問題時(例如識別率低),可以單獨優化或替換而不影響其他部分。同時,ROS 2豐富的工具(如rqt_graph
)可用于實時監控這些模塊和話題,驗證數據流的正確性。在實際開發中,我們通過查看ROS graph拓撲確認模塊連接是否符合設計預期。例如,在探索階段應無目標檢測信息流入導航模塊,在跟蹤階段則有目標位置頻繁更新導航目標。模塊圖為理解和調試整個系統提供了有力參考。
9 關鍵代碼引用
下面列出本項目實現中的一段關鍵代碼,以展示系統核心邏輯的具體實現方式。代碼選自“目標識別與導航融合”部分模塊(文件src/target_tracker.cpp
),主要功能是在檢測到目標后發出導航目標指令。
// 文件:src/target_tracker.cpp (摘錄)
// 功能:訂閱視覺檢測結果,將目標位置轉換為導航Goal并發送
#include <rclcpp/rclcpp.hpp>
#include <example_interfaces/msg/target_position.hpp> // 假設自定義消息,包含目標相對位置
#include <nav2_msgs/action/navigate_to_pose.hpp>
#include <rclcpp_action/rclcpp_action.hpp>using NavigateToPose = nav2_msgs::action::NavigateToPose;
using GoalHandleNav = rclcpp_action::ClientGoalHandle<NavigateToPose>;class TargetTracker : public rclcpp::Node {
public:TargetTracker(): Node("target_tracker") {// 創建Nav2導航動作客戶端nav_client_ = rclcpp_action::create_client<NavigateToPose>(this, "navigate_to_pose");// 訂閱視覺目標位置主題sub_target_ = this->create_subscription<example_interfaces::msg::TargetPosition>("/detected_object", 10,std::bind(&TargetTracker::onTargetReceived, this, std::placeholders::_1));}
private:rclcpp_action::Client<NavigateToPose>::SharedPtr nav_client_;rclcpp::Subscription<example_interfaces::msg::TargetPosition>::SharedPtr sub_target_;// 當接收到目標位置消息時的回調void onTargetReceived(const example_interfaces::msg::TargetPosition::SharedPtr msg) {if (!nav_client_->wait_for_action_server(std::chrono::seconds(1))) {RCLCPP_WARN(this->get_logger(), "導航動作服務器不可用!");return;}// 構造導航目標poseauto goal_msg = NavigateToPose::Goal();goal_msg.pose.pose.position.x = msg->x + current_odom_x_;goal_msg.pose.pose.position.y = msg->y + current_odom_y_;goal_msg.pose.pose.orientation.w = 1.0; // 朝向不變,或根據目標方位計算四元數RCLCPP_INFO(this->get_logger(), "發送導航目標: x=%.2f, y=%.2f", goal_msg.pose.pose.position.x, goal_msg.pose.pose.position.y);// 發送異步導航Goalnav_client_->async_send_goal(goal_msg,[](GoalHandleNav::SharedPtr) {RCLCPP_INFO(rclcpp::get_logger("Tracker"), "導航目標已接受,開始移動");},nullptr, nullptr);}// 假設獲取當前里程計位置的函數 (已實現)double current_odom_x_, current_odom_y_;
};
上述代碼實現的邏輯如下:節點訂閱來自視覺識別模塊發布的目標位置消息(假設為機器人坐標系下x、y位移),一旦收到目標,則通過Nav2的“NavigateToPose”動作客戶端向導航模塊發送新的目標位姿。這段代碼體現了感知-決策融合的關鍵機制:視覺感知結果直接用于決策新的機器人運動目標。實際代碼中還需考慮坐標變換(如將相機坐標系的目標位置轉換到地圖坐標系,這里為簡明假設已轉換到里程計坐標并疊加當前機器人位置)。代碼通過wait_for_action_server
確保Nav2導航服務就緒,然后構造目標Pose消息,調用async_send_goal
發送導航指令。我們在發送前輸出日志以便調試驗證目標數值。
在真實運行中,當視覺模塊檢測到目標后,本節點日志會打印“發送導航目標: x=…, y=…”的提示,并觸發機器人開始向目標行進。這段關鍵代碼確保了機器人能夠自主追蹤目標,正是本項目智能行為的核心體現之一。
(注:完整源代碼請參見隨附的“我們的代碼與相關文件.zip”,其中包含詳細實現。)
10 技術難點與解決
在項目研發過程中,我們遇到了多個技術挑戰。下面針對主要難點及采用的解決方案進行總結:
- 難點1:純視覺SLAM的魯棒性 CyberDog 2雖有激光雷達,但其自帶PC處理能力有限。因此我們采用主要依賴攝像頭圖像的SLAM。純視覺SLAM易受光照、紋理等影響,在快速運動時也容易丟失跟蹤。為此我們引入IMU融合,采用視覺-慣性SLAM提高魯棒性。同時調整RTAB-Map參數:增大回環檢測頻率并降低新關鍵幀插入閾值,使算法在閉環時及時校正地圖;針對光照變化大的場景,使用ORB特征替代原先易受亮度影響的SURF特征。仿真和實測表明,融合IMU后的SLAM在機器人小跑(約0.5 m/s)時依然能維持定位,沒有出現明顯漂移。
- 難點2:四足機器人復雜地形中的姿態穩定 與輪式機器人相比,四足機器人在導航轉彎時可能出現晃動甚至失去平衡。尤其當CyberDog 2快速變向或側移時,離心力和慣性可能導致單腿打滑。我們通過改進控制策略解決:在局部路徑跟蹤中,引入了“減速轉向”機制——監測到路徑曲率大或需要急轉彎時,先將機器人速度平緩降至零,再原地轉向至期望朝向后繼續前進。這一策略借鑒了差速機器人導航的轉彎控制思想,同時結合四足運動學模型調整步態,增大轉向時四足支撐面的穩定性。經實驗驗證,機器人在狹窄空間掉頭時不再出現明顯晃動,導航軌跡平滑且無跌倒情況。
- 難點2:實時性能與算力限制 Jetson NX雖有GPU但算力有限,尤其運行SLAM、Nav2和YOLO檢測等多個耗資任務時可能出現幀率下降、控制延遲。為保證實時性,我們采取多方面優化:首先在YOLO推理上使用TensorRT將模型量化為FP16以提升推理速度,實測每幀檢測耗時由50ms降至20ms左右(320×320輸入);其次,對于相機圖像,我們降低幀率到15Hz并對不變場景幀進行跳幀處理,同時將RGB圖像分辨率從1080p降為720p,在幾乎不影響識別準確率情況下減輕SLAM和YOLO的負擔;再次,我們利用ROS 2的多線程執行器(MultiThreadedExecutor)將SLAM、導航、識別各節點分配在不同線程,以并行利用CPU多核資源,避免因為單線程串行而造成瓶頸。經過優化,系統在實驗場景下各模塊均可實時運行:SLAM建圖幀率約10Hz,導航控制周期20Hz,YOLO推理15-20Hz,滿足任務實時要求。
- 難點3:多模塊協同與通信延遲 在多個功能模塊并行運行時,模塊間同步與通信延遲是需要關注的問題。例如視覺識別檢測到目標后立刻導航,如果通信延遲過高可能錯失最佳跟蹤時機。我們采取的方法:調整ROS 2 QoS策略,對關鍵主題(如
/detected_object
)使用可靠傳輸且History設置為KEEP_LAST(1)保證最新目標信息快速傳遞;對實時要求不高的大數據流(如點云)使用Best Effort減少對帶寬的占用。此外,我們在任務決策中增加了狀態滯后判斷:在接收到目標檢測后的第一個導航目標發送前,暫停0.1秒等待下一幀圖像確認目標未消失,避免因瞬時誤檢導致的誤觸發。通過這些措施,各模塊協同工作更加流暢,系統沒有出現明顯的狀態不同步或誤觸發現象。
通過針對性地攻克上述技術難點,本系統在可靠性和穩定性上得到了保障。這些挑戰的解決也體現了我們團隊在機器人自主系統開發中的問題分析和工程實現能力,為系統最終成功運行提供了支撐。
11 項目評估與展望
項目評估: 在完成系統開發和仿真實驗后,我們對本項目的功能完整性和性能指標進行了評估。首先,功能方面,系統達成了賽題要求的自主建圖、導航避障和目標識別任務。在官方給定的仿真測試環境中,CyberDog 2能夠自主探索構建環境地圖,定位誤差在0.05 m以內;隨后成功規劃路徑抵達目標區域,并準確識別出指定目標物品。整套流程無需人工干預,機器人表現出較高的自主性。其次,性能方面,根據多次仿真試驗數據:建圖階段機器人以約0.4 m/s速度行走,2分鐘內完成100㎡區域的地圖繪制;導航階段平均路徑跟蹤誤差0.1 m,避障距離安全裕度0.2 m,無碰撞發生;目標識別準確率在模擬不同光照條件下達到95%以上(基于50次檢測中正確識別次數)。系統運行穩定,長達10分鐘的任務過程中未出現節點崩潰或顯著延遲,Jetson NX計算資源占用率控制在CPU 70%、GPU 50%左右,符合嵌入式實時應用要求。總體而言,本項目在仿真評測中表現優異,達到了初賽作品提交的預期指標,為進入決賽奠定了基礎。
項目展望: 在未來工作中,我們計劃進一步完善和拓展該系統,以應對更復雜的應用場景和比賽更高階段的挑戰。
- 在真實機器人試驗方面,我們將把本系統部署到真實的CyberDog 2機器狗上進行實地測試。重點關注傳感器實測數據與仿真模型的差異,如相機畸變、IMU噪聲、摩擦力影響等,對算法參數進行相應調整。此外處理真實環境中的不確定因素,例如地面不平導致的抖動、光照變化、動態行人干擾等,提高系統魯棒性。通過真實測試獲取的數據來進一步校準仿真模型,不斷逼近真實效果。
- 在算法優化方面,有幾條路徑可以提升系統性能。一是嘗試更先進的SLAM算法,例如ORB-SLAM3(支持多地圖和閉環優化)或直接法SLAM,以提高建圖效率和精度。二是針對導航規劃,考慮引入強化學習方法優化局部避障策略,或采用TEB (Timed Elastic Band)等更平滑的軌跡規劃算法以提升機器人行走的順暢性。三是在目標識別上,可結合Depth信息做3D目標定位,或者引入多目標跟蹤算法,使機器人能在存在干擾物的情況下持續鎖定真正目標。
- 在多模態交互方面,未來版本系統可集成小愛同學語音模塊或自定義語音識別,實現語音指令的啟動、停止和模式切換,提高人機交互友好性。也可以利用CyberDog 2的觸摸傳感器,實現通過輕拍機器人某部位來發出簡單指令的功能。這些拓展將使機器人更適合實際應用場景,也展現出更豐富的創新點。
- 在系統遷移和復用方面,我們計劃將本項目成果推廣到其他機器人平臺。例如在有輪移動機器人上復用自主導航與識別模塊,只需對接不同的底盤控制接口即可工作。這體現出我們系統設計的通用性和可移植性。如果可能,我們也考慮與小米機器人團隊合作,基于CyberDog平臺開發更多智能行為,如搬運物品、巡邏安防等,為機器人賦予更高的任務能力。
展望未來,具身智能機器人將在更多領域發揮作用。本項目作為一個起點,探索了四足機器人自主導航與環境交互的技術途徑。在大賽后續階段以及更廣闊的研究中,我們將繼續完善該系統,不斷嘗試新的方法提升機器狗的智能水平。我們相信,通過持續的優化和創新,CyberDog 2平臺的潛力將被進一步激發,打造出更加出色的智能系統作品,在全國大賽乃至實際應用中取得佳績。
附錄
附錄A:主要ROS 2節點與話題列表
為了便于理解系統的通信架構,這里列出了本項目中主要用到的ROS 2節點及其訂閱/發布的話題。
節點名稱 | 功能 | 訂閱的話題(輸入) | 發布的話題(輸出) |
---|---|---|---|
/camera_driver | 相機驅動(深度+RGB) | 無(硬件驅動) | /camera/color/image_raw (彩色圖像) /camera/depth/image_rect_raw (深度圖像) /camera/color/camera_info |
/imu_driver | IMU傳感器驅動 | 無 | /imu/data (包含姿態角速度加速度) |
/rtabmap (SLAM) | 視覺SLAM建圖與定位 | /camera/color/image_raw /camera/depth/image_rect_raw /imu/data | /map (柵格地圖) /odom (里程計估計) /tf (包含機器人位姿變換) |
/yolov5_detector | 目標檢測(YOLO模型) | /camera/color/image_raw | /detected_object (目標檢測結果,自定義消息,包含類別和相對位置) |
/amcl | 自主定位 (AMCL粒子濾波) | /scan (本項目未使用激光,AMCL基于里程計+地圖) /tf (機器人里程計位姿) /map (靜態地圖) | /tf (發布機器人在地圖中的位置) |
/bt_navigator (Nav2) | Nav2行為樹導航控制 | /goal_pose (導航目標,由我們發送) | /cmd_vel (導航計算出的速度指令) |
/planner_server (Nav2) | Nav2全局路徑規劃 | /map /tf (機器人工具坐標) | /plan (全局路徑) |
/controller_server (Nav2) | Nav2局部控制 | /plan (全局路徑) /scan (或PointCloud) | /cmd_vel (局部避障修正后的速度) |
/target_tracker | 目標跟蹤決策(自定義節點) | /detected_object (來自YOLO的目標位置) | 調用Nav2 NavigateToPose動作 (相當于發送導航目標) |
(注:以上為主要節點,實際系統中還包括生命周期管理、RViz可視化等輔助節點,此處從略)
通過上述節點與話題列表可以看出,系統的信息流從傳感器驅動開始,經SLAM與目標識別處理,進入導航決策,最后輸出到運動控制。在實際實現中,我們也對部分話題進行了Remap和參數配置以確保命名一致、頻率合理。這份列表有助于比賽評審老師了解我們系統工程實現的細節和規范程度。
附錄B:參數配置與運行說明
- SLAM參數: RTAB-Map使用配置文件
rtabmap.ini
調整關鍵參數,例如Mem/IncrementalMemory=True
(啟用增量建圖)、RGBD/LinearUpdate=0.1
(每移動0.1m插入一個關鍵幀)、RGBD/LoopClosureThreshold=0.11
(回環檢測評分閾值)等。IMU融合通過參數Reg/Strategy=3
啟用,提升定位效果。 - Nav2參數: 在
nav2_params.yaml
中設置了全局代價地圖分辨率為0.05、膨脹半徑0.2 m;DWB局部Planner的速度上限為0.3 m/s(前進)和0.2 m/s(旋轉);Recovery行為順序調整為Spin -> BackUp,兩次嘗試后放棄。本項目還簡化了Nav2的行為樹以適應單目標任務。 - 運行方式: 本系統提供了統一的啟動腳本
bringup_launch.py
,可一鍵啟動仿真環境中的所有節點。運行命令:ros2 launch cyberdog_bringup bringup_launch.py world:=<world_file> mode:=simulation
。其中world_file
為仿真環境文件路徑,mode
參數選擇仿真或實物。在比賽評測時,只需運行此launch文件,即可在Gazebo中觀看機器人自主完成任務的全過程。