器人“小橙”技術(shù)拆解:輪腿融合與運(yùn)動(dòng)控制)
各位開(kāi)發(fā)者和機(jī)器人愛(ài)好者大家好。最近航天領(lǐng)域公開(kāi)的“半人馬機(jī)器人‘小橙’”成了一個(gè)熱門(mén)話(huà)題。很多人第一眼看到它會(huì)覺(jué)得外觀(guān)很科幻四條腿加上輪子既能像足式機(jī)器人一樣跨越障礙又能像輪式平臺(tái)一樣高速移動(dòng)。這讓我想起在 ROS 機(jī)器人開(kāi)發(fā)社區(qū)里很多團(tuán)隊(duì)一直在嘗試“足式 輪式”混合底盤(pán)但真正面向星球探測(cè)、極端復(fù)雜地形做工程化落地的并不多見(jiàn)。本文不討論具體任務(wù)背景而是從技術(shù)視角拆解這類(lèi)機(jī)器人的整體設(shè)計(jì)思路。內(nèi)容會(huì)覆蓋本體構(gòu)型、感知傳感、運(yùn)動(dòng)控制算法、仿真開(kāi)發(fā)環(huán)境、空間作業(yè)適應(yīng)性等方向。對(duì)于做機(jī)器人控制、SLAM、嵌入式、遙操作或者人工智能方向的開(kāi)發(fā)者這是一個(gè)很好的綜合案例。讀完你會(huì)理解“半人馬構(gòu)型”到底解決了什么問(wèn)題機(jī)器人如何在腿、輪之間做運(yùn)動(dòng)模式切換一套典型的自主行走系統(tǒng)由哪些模塊組成用 ROS/Gazebo 做仿真驗(yàn)證時(shí)軟件架構(gòu)如何設(shè)計(jì)面向月球、火星這類(lèi)低重力、大溫差環(huán)境機(jī)器人要應(yīng)對(duì)哪些工程挑戰(zhàn)。我們盡量保持客觀(guān)公開(kāi)資料明確的部分會(huì)展開(kāi)講未完全披露的細(xì)節(jié)則結(jié)合行業(yè)通用技術(shù)框架進(jìn)行分析。畢竟航天級(jí)機(jī)器人的很多參數(shù)屬于內(nèi)部研發(fā)信息我們更看重它的技術(shù)思路對(duì)地面機(jī)器人開(kāi)發(fā)的借鑒意義。1. 半人馬機(jī)器人是什么“半人馬”這個(gè)名字來(lái)源于機(jī)器人整體構(gòu)型。它通常指同時(shí)具備“多足結(jié)構(gòu)”和“輪式結(jié)構(gòu)”的機(jī)器人四足居多也有六足或加裝機(jī)械臂的變體。這類(lèi)機(jī)器人可以同時(shí)獲得兩種移動(dòng)方式的優(yōu)勢(shì)輪子負(fù)責(zé)平坦地面的高效運(yùn)動(dòng)腿部負(fù)責(zé)復(fù)雜地形中的越障和穩(wěn)定支撐。“小橙”作為一款自研半人馬機(jī)器人最直觀(guān)的特點(diǎn)體現(xiàn)在幾個(gè)方面四足支撐結(jié)構(gòu)每條腿通常包含髖關(guān)節(jié)、膝關(guān)節(jié)、踝關(guān)節(jié)等多個(gè)自由度可以主動(dòng)調(diào)整姿態(tài)遇到臺(tái)階、斜坡、碎石時(shí)動(dòng)態(tài)適應(yīng)。輪式驅(qū)動(dòng)單元輪子安裝在腿的末端或特定位置在平坦區(qū)域直接驅(qū)動(dòng)前進(jìn)不需要像純足式機(jī)器人那樣做復(fù)雜的步態(tài)規(guī)劃。主動(dòng)姿態(tài)控制通過(guò)關(guān)節(jié)力矩控制和機(jī)身 IMU 反饋即使只有部分輪子著地也能保持平臺(tái)平衡。雙臂或載荷接口預(yù)留很多半人馬機(jī)器人在機(jī)身上預(yù)留了機(jī)械臂安裝位置未來(lái)可擴(kuò)展為“移動(dòng) 操作”一體化平臺(tái)。從技術(shù)發(fā)展脈絡(luò)來(lái)看半人馬機(jī)器人并不是“腿 輪”的簡(jiǎn)單拼湊。真正的難點(diǎn)在于兩種運(yùn)動(dòng)模式如何平滑切換輪式運(yùn)動(dòng)時(shí)腿部關(guān)節(jié)是否參與減振足式運(yùn)動(dòng)時(shí)輪子會(huì)不會(huì)成為干涉點(diǎn)系統(tǒng)出現(xiàn)單腿故障時(shí)剩余部分如何重新規(guī)劃運(yùn)動(dòng)。這些工程細(xì)節(jié)決定了機(jī)器人是從“演示樣機(jī)”走向“任務(wù)裝備”的關(guān)鍵。1.1 為什么航天場(chǎng)景需要半人馬構(gòu)型月球表面覆蓋著月壤、碎石、撞擊坑邊緣火星表面則有大量巖石、沙丘、斜坡。傳統(tǒng)火星車(chē)采用的搖臂懸架輪式結(jié)構(gòu)在幾個(gè)火星任務(wù)中被證明非??煽康耐ㄟ^(guò)性有限。遇到陡坡或大塊巖石時(shí)輪式底盤(pán)很容易出現(xiàn)打滑、卡死甚至托底。純足式機(jī)器人比如波士頓動(dòng)力的 Spot在復(fù)雜地形上的表現(xiàn)很優(yōu)秀但它的能效比較低。太空機(jī)器人依賴(lài)太陽(yáng)能或核電池功耗預(yù)算非常緊張如果大部分能量都消耗在“抬腿走路”上科學(xué)載荷能分到的電能就會(huì)嚴(yán)重不足?!鞍肴笋R構(gòu)型”恰好站在兩者之間平坦區(qū)域收起腿部部分自由度靠輪子快速行進(jìn)崎嶇區(qū)域切換為足式步態(tài)逐腿跨越障礙低重力環(huán)境腿部支撐力需求降低但慣性控制難度增加適合用主動(dòng)力控來(lái)補(bǔ)償。這可以理解為一種“多模態(tài)移動(dòng)策略”。對(duì)航天探測(cè)任務(wù)來(lái)說(shuō)不是要選擇一個(gè)“萬(wàn)能”的底盤(pán)而是要選擇一個(gè)“能覆蓋最多地形、同時(shí)能耗可控”的底盤(pán)。半人馬機(jī)器人正是圍繞這個(gè)目標(biāo)設(shè)計(jì)出來(lái)的。1.2 公開(kāi)亮相背后的技術(shù)看點(diǎn)從公開(kāi)演示來(lái)看這類(lèi)機(jī)器人的看點(diǎn)不僅在外觀(guān)更在它的行為表現(xiàn)。如果觀(guān)察幾次典型演示你會(huì)發(fā)現(xiàn)幾個(gè)值得關(guān)注的技術(shù)細(xì)節(jié)輪腿切換是否流暢從輪式高速前行切換到足式爬坡如果中間有停頓或姿態(tài)突變說(shuō)明運(yùn)動(dòng)規(guī)劃層還是基于模式枚舉如果非常平滑說(shuō)明底層用了統(tǒng)一 MPC模型預(yù)測(cè)控制或強(qiáng)化學(xué)習(xí)策略。抵抗外部沖擊的能力被人推一下或者碰一下后機(jī)器人能否快速恢復(fù)平衡這取決于關(guān)節(jié)力矩控制和機(jī)身狀態(tài)估計(jì)算法的魯棒性。地面自適應(yīng)程度在凹凸不平的地面上腿部關(guān)節(jié)是否根據(jù)地形主動(dòng)調(diào)整高度還是按照固定高度卡點(diǎn)落地。自主性水平現(xiàn)場(chǎng)演示是人工遙控還是有自主避障這直接反映感知和決策系統(tǒng)的成熟度。這些點(diǎn)在后續(xù)章節(jié)我們會(huì)逐一展開(kāi)。2. 半人馬機(jī)器人的系統(tǒng)架構(gòu)拆解從技術(shù)棧的角度看一臺(tái)完整的半人馬機(jī)器人通常由以下幾個(gè)子系統(tǒng)組成子系統(tǒng)主要職責(zé)常見(jiàn)硬件/軟件方案移動(dòng)平臺(tái)腿、輪、關(guān)節(jié)驅(qū)動(dòng)無(wú)框力矩電機(jī)、諧波減速器、伺服驅(qū)動(dòng)器感知系統(tǒng)環(huán)境建圖、障礙檢測(cè)、狀態(tài)估計(jì)激光雷達(dá)、雙目相機(jī)、IMU、GPS/RTK地面場(chǎng)景計(jì)算單元運(yùn)行算法、任務(wù)調(diào)度X86/ARM 工控機(jī)、GPU 模塊、實(shí)時(shí)內(nèi)核運(yùn)動(dòng)控制系統(tǒng)關(guān)節(jié)控制、步態(tài)生成、姿態(tài)平衡EtheCAT 總線(xiàn)、MCU、實(shí)時(shí)控制程序決策規(guī)劃系統(tǒng)路徑規(guī)劃、行為決策、任務(wù)編排ROS、C/Python 算法模塊通信系統(tǒng)遙控、數(shù)據(jù)傳輸Wi-Fi、電臺(tái)、5G/專(zhuān)網(wǎng)地面、深空測(cè)控航天能源系統(tǒng)供電、續(xù)航、熱管理鋰電池、太陽(yáng)能、同位素電源航天場(chǎng)景人機(jī)交互任務(wù)下發(fā)、狀態(tài)監(jiān)控遙控手柄、上位機(jī)、Web/桌面端在軟件層面典型的架構(gòu)可以分成三層決策層任務(wù)規(guī)劃、路徑規(guī)劃、行為樹(shù)、狀態(tài)機(jī) 執(zhí)行層步態(tài)生成器、運(yùn)動(dòng)學(xué)逆解、力分配、狀態(tài)估計(jì) 驅(qū)動(dòng)層關(guān)節(jié) PID/前饋控制、總線(xiàn)通信、傳感器采集這種分層結(jié)構(gòu)的優(yōu)勢(shì)在于每一層都可以獨(dú)立測(cè)試。比如我們可以在仿真環(huán)境里只測(cè)試決策層的避障邏輯不涉及真實(shí)關(guān)節(jié)電機(jī)也可以在硬件平臺(tái)上單獨(dú)調(diào)試單腿的關(guān)節(jié)力矩追蹤效果不跑完整的自主導(dǎo)航。2.1 從控制角度看腿和輪半人馬機(jī)器人最核心的切換在于“輪式驅(qū)動(dòng)”和“足式步態(tài)”的融合。這兩者底層差別很大輪式運(yùn)動(dòng)輪子持續(xù)旋轉(zhuǎn)車(chē)輛重心基本保持恒定高度控制目標(biāo)是速度和轉(zhuǎn)向角。經(jīng)典控制方法是兩輪差速或阿克曼轉(zhuǎn)向。足式運(yùn)動(dòng)腿部周期性擺動(dòng)重心高度動(dòng)態(tài)變化需要不斷處理落腳點(diǎn)位置和軀干姿態(tài)??刂颇繕?biāo)從“速度”擴(kuò)展為“軀干位姿”和“接觸力”。有些團(tuán)隊(duì)會(huì)把兩種模式統(tǒng)一到“虛擬模型控制”或“MPC WBC”框架里。此時(shí)輪子被建模為“連續(xù)旋轉(zhuǎn)的驅(qū)動(dòng)端”腿被建模為“離散落腳的支撐端”。切換不再是一個(gè)手工觸發(fā)的條件判斷而是一個(gè)優(yōu)化問(wèn)題里不同權(quán)重動(dòng)態(tài)調(diào)整的結(jié)果。這是目前學(xué)術(shù)界和工業(yè)界做得比較前沿的方向也讓輪腿機(jī)器人真正具有了“自適應(yīng)形態(tài)”的能力。2.2 為什么控制頻率這么重要四足機(jī)器人常用的控制頻率是 500Hz 到 1kHz。也就是說(shuō)每 1 到 2 毫秒控制器就要完成一次狀態(tài)讀取、運(yùn)動(dòng)學(xué)和動(dòng)力學(xué)計(jì)算、力矩輸出。輪腿機(jī)器人因?yàn)槎嗔艘唤M輪式驅(qū)動(dòng)控制頻率的要求可能會(huì)更高。原因很簡(jiǎn)單輪子轉(zhuǎn)速快同樣的延遲會(huì)導(dǎo)致更大的跟蹤誤差腿部落地瞬間的沖擊力也需要高帶寬的力控制來(lái)吸收。如果控制頻率不足會(huì)出現(xiàn)以下現(xiàn)象機(jī)器人走幾步之后姿態(tài)逐漸傾斜輪腿切換瞬間出現(xiàn)明顯點(diǎn)頭或抬頭單腿受到外力時(shí)軀干恢復(fù)緩慢電機(jī)發(fā)出明顯的電流噪聲甚至觸發(fā)過(guò)流保護(hù)。這就解釋了為什么這類(lèi)機(jī)器人的主控系統(tǒng)普遍采用“實(shí)時(shí)操作系統(tǒng) 獨(dú)立 MCU 驅(qū)動(dòng)的分布式架構(gòu)”。上層 Linux 系統(tǒng)跑感知和規(guī)劃底層 RTOS 跑關(guān)節(jié)控制兩者之間通過(guò)共享內(nèi)存或 EtherCAT 等高速總線(xiàn)通信避免非實(shí)時(shí)任務(wù)干擾關(guān)節(jié)控制。2.3 “小橙”這類(lèi)機(jī)器人是輪腿機(jī)器人嗎輪腿機(jī)器人在廣義上可以指所有“帶輪子的足式機(jī)器人”。但細(xì)分下來(lái)有幾種不同的形態(tài)輪式倒立擺形態(tài)輪子位于重心下方通過(guò)動(dòng)態(tài)平衡保持直立比如九號(hào)機(jī)器人的很多產(chǎn)品線(xiàn)足端裝輪形態(tài)輪子安裝在每條腿末端腿部主要負(fù)責(zé)姿態(tài)調(diào)節(jié)輪子負(fù)責(zé)驅(qū)動(dòng)這是典型的 wheel-legged robot關(guān)節(jié)式輪足形態(tài)輪子安裝在腿的下半段側(cè)面腿部可以做大幅度變位必要時(shí)抬起輪子切換為純足式。從公開(kāi)演示中看“小橙”更接近“足端裝輪 可抬腿越障”的方案。這種設(shè)計(jì)的優(yōu)點(diǎn)在于結(jié)構(gòu)上把輪子和腿整合在一個(gè)運(yùn)動(dòng)鏈里整車(chē)只有一套驅(qū)動(dòng)系統(tǒng)重量更輕機(jī)械結(jié)構(gòu)更緊湊。缺點(diǎn)是每條腿末端的輪子會(huì)增加腿部慣量對(duì)關(guān)節(jié)電機(jī)力矩提出更高要求。另外還有一個(gè)容易被忽略的設(shè)計(jì)點(diǎn)輪子轉(zhuǎn)向方式。有些機(jī)器人每條腿的輪子都是固定朝前的轉(zhuǎn)向靠左右輪差速有些則在腿上增加了一個(gè)額外的橫擺關(guān)節(jié)讓輪子可以主動(dòng)轉(zhuǎn)向。前者結(jié)構(gòu)簡(jiǎn)單后者在狹窄場(chǎng)景下更靈活。具體哪種更適合太空?qǐng)鼍靶枰紤]轉(zhuǎn)向機(jī)構(gòu)在真空、低溫環(huán)境下的可靠性。3. 感知系統(tǒng)和自主決策機(jī)器人要完成“從 A 點(diǎn)到 B 點(diǎn)途中避開(kāi)隨機(jī)障礙”的任務(wù)感知系統(tǒng)是基礎(chǔ)。對(duì)于半人馬機(jī)器人感知不僅是“看見(jiàn)障礙”還要回答幾個(gè)關(guān)鍵問(wèn)題當(dāng)前地形是否適合足式通過(guò)輪式行駛時(shí)前方障礙高度是否低于底盤(pán)離地間隙足式越障時(shí)落腳點(diǎn)附近是否有不穩(wěn)定石塊或松軟土壤自身在斜坡上的位姿是否超出穩(wěn)定邊界這些問(wèn)題的處理流程可以用一條簡(jiǎn)化鏈路表示傳感器采集 - 數(shù)據(jù)預(yù)處理 - 地形建圖 - 代價(jià)地圖生成 - 路徑規(guī)劃 - 運(yùn)動(dòng)控制執(zhí)行3.1 多傳感器融合航天機(jī)器人受限于重量和功耗傳感器配置通常不像地面無(wú)人車(chē)那樣“堆料”。典型組合可能是立體雙目相機(jī)提供彩色圖像和深度信息用于識(shí)別巖石、隕石坑邊緣等特征激光雷達(dá)或激光測(cè)距儀提供精確的距離信息在暗光環(huán)境下仍然有效慣性測(cè)量單元 IMU提供加速度和角速度用于姿態(tài)估計(jì)和運(yùn)動(dòng)補(bǔ)償關(guān)節(jié)編碼器提供每個(gè)關(guān)節(jié)的角度和角速度用于運(yùn)動(dòng)學(xué)計(jì)算輪速編碼器提供輪子轉(zhuǎn)速用于輪式里程計(jì)。多傳感器融合要做的最重要一件事就是估算機(jī)器人的“狀態(tài)”也就是三維位置、速度和姿態(tài)。經(jīng)典方案是擴(kuò)展卡爾曼濾波EKF或因子圖優(yōu)化。在 ROS 生態(tài)里robot_localization包是非常常用的 EKF 實(shí)現(xiàn)它可以把里程計(jì)、IMU、視覺(jué)信息融合成一個(gè)平滑的狀態(tài)估計(jì)。3.2 地形感知與代價(jià)地圖在地面機(jī)器人應(yīng)用中我們可以直接用 2D 激光雷達(dá)生成柵格地圖然后規(guī)劃路徑。但半人馬機(jī)器人需要面對(duì)更復(fù)雜的三維地形所以通常要構(gòu)建 2.5D 或 3D 代價(jià)地圖。一個(gè)典型的做法是使用深度相機(jī)或激光雷達(dá)生成三維點(diǎn)云把點(diǎn)云投影到網(wǎng)格地圖計(jì)算每個(gè)格子的高度差和坡度基于高度差、坡度、粗糙度生成“可通行性代價(jià)”結(jié)合機(jī)器人自身的越障能力最大臺(tái)階高度、最大坡度、輪徑把不可通行區(qū)域標(biāo)記為障礙物在代價(jià)地圖上運(yùn)行 A* / DWA / TEB 等路徑規(guī)劃算法。這里需要強(qiáng)調(diào)地形代價(jià)地圖和機(jī)器人運(yùn)動(dòng)模式必須聯(lián)動(dòng)。同一塊區(qū)域?qū)Α拜喪侥J健笨赡苁遣豢赏ㄐ械亩钙碌珜?duì)“足式模式”可能是完全可通行的臺(tái)階。因此感知規(guī)劃系統(tǒng)不能只輸出一條路徑還要輸出路徑上每個(gè)路段適合使用的運(yùn)動(dòng)模式。3.3 自主還是遙操作“未來(lái)有望奔赴太空作業(yè)”這句話(huà)決定了機(jī)器人的操作模式大概率不是“完全自主”也不是“純粹人工遙控”而是“監(jiān)督式自主 遙操作干預(yù)”。原因在于深空通信延遲大月地通信延遲約 1.3 秒火星最近也有 4 分鐘左右實(shí)時(shí)操縱不現(xiàn)實(shí)環(huán)境模型不完整機(jī)器人到達(dá)一個(gè)新區(qū)域后周?chē)匦巍⒐庹?、土壤特性都有不確定性任務(wù)容錯(cuò)要求高如果機(jī)器人陷入松軟土壤地面人員需要介入決策但介入過(guò)程不能依賴(lài)實(shí)時(shí)視頻流。因此航天半人馬機(jī)器人的自主能力會(huì)體現(xiàn)在這幾層局部自主前方 10 米內(nèi)的障礙規(guī)避、姿態(tài)糾偏行為自主切換輪式/足式模式選擇跨越路徑任務(wù)節(jié)拍自主按照預(yù)設(shè)任務(wù)序列執(zhí)行拍照、采樣、行駛等動(dòng)作安全自主出現(xiàn)異常時(shí)主動(dòng)停車(chē)、進(jìn)入安全模式、等待地面指令。這套設(shè)計(jì)思路和地面無(wú)人駕駛的“功能安全”分層有相似之處。開(kāi)發(fā)者可以參考自動(dòng)駕駛領(lǐng)域的“感知-決策-執(zhí)行”三層架構(gòu)再加入航天任務(wù)的遙控約束形成“傳控分離”的軟件架構(gòu)機(jī)器人本地實(shí)時(shí)閉環(huán)天上或地面的操作員只下發(fā)宏觀(guān)指令不參與關(guān)節(jié)級(jí)控制。4. 運(yùn)動(dòng)控制與算法原理解析運(yùn)動(dòng)控制是這類(lèi)機(jī)器人的靈魂。很多朋友問(wèn)半人馬機(jī)器人走起來(lái)像輪足式機(jī)器人控制代碼應(yīng)該從哪里入手這里我們把最核心的算法路徑拆開(kāi)講。4.1 運(yùn)動(dòng)學(xué)建模首先每條腿可以簡(jiǎn)化成一個(gè)多連桿結(jié)構(gòu)。以常見(jiàn)的腿部構(gòu)型為例假設(shè)每條腿有 3 個(gè)旋轉(zhuǎn)關(guān)節(jié)髖偏擺、髖俯仰、膝俯仰我們需要解決兩個(gè)問(wèn)題正運(yùn)動(dòng)學(xué)已知關(guān)節(jié)角度求足端在機(jī)器人坐標(biāo)系下的位置逆運(yùn)動(dòng)學(xué)已知目標(biāo)足端位置求關(guān)節(jié)角度。逆運(yùn)動(dòng)學(xué)是步態(tài)規(guī)劃的基礎(chǔ)。當(dāng)我們希望足端從一個(gè)落腳點(diǎn)移動(dòng)到另一個(gè)落腳點(diǎn)時(shí)需要快速求出各個(gè)關(guān)節(jié)的目標(biāo)角度。雖然四足機(jī)器人腿部結(jié)構(gòu)不像機(jī)械臂那樣復(fù)雜但推導(dǎo)過(guò)程仍然需要耐心。一個(gè)簡(jiǎn)化示例用 Python 描述某條腿的幾何關(guān)系和逆解思路import numpy as np class LegIK: def __init__(self, hip_offset0.08, thigh_length0.25, shank_length0.25): # 髖關(guān)節(jié)橫向偏置距離、大腿長(zhǎng)度、小腿長(zhǎng)度 self.hip_offset hip_offset self.thigh_length thigh_length self.shank_length shank_length def solve(self, x, y, z): 給定足端在腿坐標(biāo)系中的目標(biāo)位置(x, y, z)返回三個(gè)關(guān)節(jié)角。 坐標(biāo)約定x為前進(jìn)方向y為橫向z為豎直向上。 # 1. 根據(jù)橫向距離解算髖偏擺角 hip_yaw np.arctan2(y, x) # 2. 將目標(biāo)點(diǎn)轉(zhuǎn)換到腿平面坐標(biāo)系 d np.sqrt(x**2 y**2) - self.hip_offset if d 0: raise ValueError(目標(biāo)點(diǎn)在髖關(guān)節(jié)之后無(wú)法到達(dá)) z abs(z) # 3. 平面幾何求解大腿、小腿夾角 L np.sqrt(d**2 z**2) if L (self.thigh_length self.shank_length): raise ValueError(目標(biāo)點(diǎn)超出腿部工作空間) alpha np.arctan2(z, d) beta np.arccos( (self.thigh_length**2 L**2 - self.shank_length**2) / (2 * self.thigh_length * L) ) gamma np.arccos( (self.thigh_length**2 self.shank_length**2 - L**2) / (2 * self.thigh_length * self.shank_length) ) hip_pitch beta alpha - np.pi / 2 knee_pitch np.pi - gamma return hip_yaw, hip_pitch, knee_pitch # 示例嘗試求解足端在(0.3, 0.0, -0.45)處關(guān)節(jié)角 leg LegIK() try: angles leg.solve(0.30, 0.0, -0.45) print(hip_yaw%.3f rad, hip_pitch%.3f rad, knee_pitch%.3f rad % angles) except ValueError as e: print(IK error:, e)這段代碼只是教學(xué)用途真實(shí)機(jī)器人還要考慮關(guān)節(jié)限位、奇異點(diǎn)、腿部碰撞等約束。但在最初驗(yàn)證算法時(shí)這種簡(jiǎn)化模型已經(jīng)能幫我們快速理解腿部運(yùn)動(dòng)空間。4.2 步態(tài)規(guī)劃從擺線(xiàn)到 CPC有了逆運(yùn)動(dòng)學(xué)接下來(lái)的問(wèn)題是足端應(yīng)該沿著什么樣的軌跡移動(dòng)最簡(jiǎn)單的步態(tài)是“擺線(xiàn)步態(tài)”。足端在擺動(dòng)相從當(dāng)前落腳點(diǎn)抬起沿著一條平滑曲線(xiàn)落到下一個(gè)目標(biāo)點(diǎn)在支撐相保持不動(dòng)或者相對(duì)地面后移。擺線(xiàn)軌跡有一個(gè)好處足端在抬腿和落地的瞬間速度為零沖擊小適合低速行走。落足點(diǎn)選擇則需要考慮軀干穩(wěn)定性。常見(jiàn)策略是“以軀干中心投影為基準(zhǔn)把落足點(diǎn)限制在穩(wěn)定多邊形內(nèi)”同時(shí)根據(jù)軀干速度和姿態(tài)提前偏移落足點(diǎn)。具體公式在不同論文里略有差異但思路是一致的讓落足點(diǎn)與軀干運(yùn)動(dòng)速度、加速度保持某種預(yù)測(cè)關(guān)系保證機(jī)器人不會(huì)“跟不上腳”。步態(tài)切換方面如果直接在“行走”和“奔跑”等步態(tài)之間跳變關(guān)節(jié)力矩會(huì)出現(xiàn)突變。因此現(xiàn)代機(jī)器人普遍使用“混合步態(tài)參數(shù)”或“CPG中樞模式發(fā)生器網(wǎng)絡(luò)”通過(guò)參數(shù)連續(xù)調(diào)節(jié)實(shí)現(xiàn)步態(tài)過(guò)渡而不是硬切換。4.3 力控制與姿態(tài)平衡如果只是在關(guān)節(jié)角度層面做位置控制機(jī)器人無(wú)法應(yīng)對(duì)外部沖擊和地形起伏。真實(shí)機(jī)器人需要“柔順控制”腿碰到障礙時(shí)不是硬碰硬而是通過(guò)力矩控制吸收沖擊。一種常用的方案是“虛擬模型控制”。想象機(jī)器人和地面之間存在若干虛擬彈簧阻尼器控制器根據(jù)軀干偏離目標(biāo)位姿的程度計(jì)算需要的虛擬力然后把虛擬力分配到各條腿上。為了讓你直觀(guān)理解下面是一個(gè)簡(jiǎn)化的“軀干姿態(tài)保持”偽代碼# 讀取IMU姿態(tài)誤差 roll_err target_roll - current_roll pitch_err target_pitch - current_pitch # 虛擬彈簧阻尼模型計(jì)算恢復(fù)力矩 torque_roll Kp_roll * roll_err - Kd_roll * roll_velocity torque_pitch Kp_pitch * pitch_err - Kd_pitch * pitch_velocity # 把恢復(fù)力矩分配到4條腿每條腿承擔(dān)一部分垂直力調(diào)整量 for leg in legs: delta_fz torque_roll * leg.roll_arm torque_pitch * leg.pitch_arm leg.add_vertical_force(delta_fz)實(shí)際系統(tǒng)里這個(gè)“力分配”過(guò)程會(huì)寫(xiě)成線(xiàn)性規(guī)劃或二次規(guī)劃問(wèn)題在滿(mǎn)足摩擦錐約束和單腿最大出力約束的前提下尋找最優(yōu)的腿部接觸力組合??刂祁l率 500Hz 以上時(shí)這種優(yōu)化需要用到高效求解器這也解釋了為什么這類(lèi)機(jī)器人對(duì)機(jī)載計(jì)算性能要求很高。4.4 輪式運(yùn)動(dòng)與轉(zhuǎn)向控制輪式運(yùn)動(dòng)模式下機(jī)器人可以簡(jiǎn)化為一個(gè)移動(dòng)機(jī)器人底盤(pán)。最常用的是“兩輪/四輪差速運(yùn)動(dòng)模型”v左 v - L * w / 2 v右 v L * w / 2其中v 是機(jī)器人線(xiàn)速度w 是角速度L 是左右輪距。如果輪子支持主動(dòng)轉(zhuǎn)向還可以用“前輪轉(zhuǎn)向模型”或“四輪獨(dú)立轉(zhuǎn)向模型”。相比之下四輪獨(dú)立轉(zhuǎn)向的靈活性更高可以實(shí)現(xiàn)原地轉(zhuǎn)向、斜向平移但控制標(biāo)定也更復(fù)雜。在航天場(chǎng)景中如果多條腿都帶轉(zhuǎn)向關(guān)節(jié)結(jié)構(gòu)重量和故障率都可能增加設(shè)計(jì)團(tuán)隊(duì)需要在機(jī)動(dòng)性和可靠性之間做權(quán)衡。5. 太空作業(yè)挑戰(zhàn)從地面樣機(jī)到航天裝備把“小橙”從地面樣機(jī)變成能夠執(zhí)行太空任務(wù)的機(jī)器人中間還隔著大量工程化工作。5.1 低重力環(huán)境月球重力約為地球的 1/6火星重力約為 3/8。低重力會(huì)帶來(lái)幾個(gè)顯著變化足端需要的支撐力變小但慣性力相對(duì)更大機(jī)器人更容易“飄起來(lái)”輪式驅(qū)動(dòng)時(shí)輪下壓力變小摩擦力變小在松軟土壤上更容易打滑足式步態(tài)的落足沖擊變小但軀干姿態(tài)容易因微小擾動(dòng)產(chǎn)生大角度偏移。低重力下地面調(diào)好的 PID 參數(shù)幾乎一定需要重新調(diào)試。更好的做法是在控制模型里顯式加入重力加速度參數(shù)并在地面用吊索或“重力補(bǔ)償臺(tái)架”模擬低重力環(huán)境做驗(yàn)證。5.2 真空、低溫與溫差太空表面的真空環(huán)境對(duì)機(jī)器人是嚴(yán)酷考驗(yàn)關(guān)節(jié)潤(rùn)滑劑在真空中容易揮發(fā)需要選用真空潤(rùn)滑脂或固體潤(rùn)滑材料電機(jī)和驅(qū)動(dòng)器散熱主要靠輻射不能依靠空氣對(duì)流必須設(shè)計(jì)導(dǎo)熱路徑或熱控措施月面晝夜溫差約 300 攝氏度電子器件需要加熱和隔熱保護(hù)輻射環(huán)境可能引起單粒子翻轉(zhuǎn)計(jì)算單元需要加固或具備故障恢復(fù)能力。這些和地面機(jī)器人常用的風(fēng)冷、水冷方案完全不同。航天級(jí)運(yùn)動(dòng)控制系統(tǒng)的“可靠冷卻”和“低溫啟動(dòng)”往往比算法本身更具挑戰(zhàn)。5.3 通信與自主性深空通信帶寬有限且存在延遲。這意味著機(jī)器人不能依賴(lài)云端 AI所有關(guān)鍵決策必須在本地實(shí)時(shí)完成遙操作優(yōu)先級(jí)高于自主決策但干預(yù)粒度要足夠大必須設(shè)計(jì)“地面操作員可解析”的狀態(tài)匯報(bào)機(jī)制。因此航天半人馬機(jī)器人的軟件系統(tǒng)會(huì)更強(qiáng)調(diào)“狀態(tài)機(jī) 安全監(jiān)控”而不是純粹依賴(lài)深度強(qiáng)化學(xué)習(xí)策略。深度學(xué)習(xí)模型可以做識(shí)別和輔助決策但最終要有一個(gè)可驗(yàn)證的安全兜底邏輯。5.4 材料與結(jié)構(gòu)可靠性太空機(jī)器人不可能隨時(shí)派維修人員。因此關(guān)鍵關(guān)節(jié)可能需要“冗余驅(qū)動(dòng)”或“斷電抱閘”線(xiàn)纜接口必須防振、防脫所有螺絲、連接器都要做抗疲勞評(píng)估軟件要支持單關(guān)節(jié)故障后的降級(jí)運(yùn)動(dòng)模式。這些工程考量對(duì)地面機(jī)器人的設(shè)計(jì)也有啟發(fā)即使不上太空在工業(yè)巡檢、應(yīng)急救援場(chǎng)景中可靠性同樣是第一優(yōu)先級(jí)。6. 開(kāi)發(fā)者視角如何復(fù)現(xiàn)一個(gè)簡(jiǎn)化版半人馬機(jī)器人看到這里很多做機(jī)器人開(kāi)發(fā)的朋友可能會(huì)想我沒(méi)有航天級(jí)硬件能不能在仿真環(huán)境里跑一個(gè)類(lèi)似的輪腿機(jī)器人答案是完全可以。這里給出一個(gè)基于 ROS 和 Gazebo 的技術(shù)路線(xiàn)。6.1 方案選型軟件建議Ubuntu 20.04 / 22.04ROS Noetic / ROS 2 HumbleGazebo 11 或更高版本RViz 可視化leg_ik或pinocchio做運(yùn)動(dòng)學(xué)計(jì)算gazebo_ros_pkgs連接仿真模型建議先在 URDF 中定義 4 條腿每條腿 3 個(gè)轉(zhuǎn)動(dòng)關(guān)節(jié) 1 個(gè)輪子連續(xù)關(guān)節(jié)輪子使用 Gazebo 自帶的摩擦模型地形使用高度圖或網(wǎng)格模型模擬碎石坡道。6.2 控制框架控制架構(gòu)可以用 ROS 的controller_manager接入joint_state_controller: type: joint_state_controller/JointStateController publish_rate: 50 leg_controller: type: position_controllers/JointPositionController joints: - front_left_hip_yaw - front_left_hip_pitch - front_left_knee # 其余關(guān)節(jié)類(lèi)似如果你要跑真實(shí)機(jī)器人更推薦使用ros2_control或獨(dú)立的mc_rtc、ocs2等控制框架。它們對(duì) MPC 和 WBC 有更完整的支持。6.3 仿真測(cè)試重點(diǎn)在仿真環(huán)境中建議先測(cè)試三個(gè)場(chǎng)景輪式模式直線(xiàn)行駛和轉(zhuǎn)向從平地向 10cm 臺(tái)階過(guò)渡觀(guān)察腿部是否產(chǎn)生干涉足式模式爬 20 度斜坡觀(guān)察軀干姿態(tài)能否保持。仿真無(wú)法完全模擬真實(shí)電機(jī)力矩響應(yīng)和土壤接觸力學(xué)但它可以幫助你快速驗(yàn)證算法邏輯和狀態(tài)機(jī)切換邏輯。等仿真穩(wěn)定后再遷移到硬件平臺(tái)會(huì)少踩很多坑。6.4 快速起步的代碼骨架提供一個(gè)極簡(jiǎn)版 Python 步態(tài)狀態(tài)機(jī)代碼骨架便于理解輪腿切換的核心邏輯class LegMotionState: WHEEL wheel LEG leg TRANSITION transition class RobotBehavior: def __init__(self): self.state LegMotionState.WHEEL self.transition_progress 0.0 def update(self, terrain_info): if self.state LegMotionState.WHEEL: if terrain_info[obstacle_height] 0.15: # 前方障礙過(guò)高切換為足式模式 self.state LegMotionState.TRANSITION self.transition_progress 0.0 print(Enter transition from wheel to leg) elif self.state LegMotionState.TRANSITION: # 過(guò)渡期間逐步調(diào)整腿部關(guān)節(jié)角度避免突變 self.transition_progress 0.1 if self.transition_progress 1.0: self.state LegMotionState.LEG print(Enter leg mode) elif self.state LegMotionState.LEG: if terrain_info[slope_deg] 5 and terrain_info[roughness] 0.02: # 地形平坦切回輪式模式 self.state LegMotionState.TRANSITION self.transition_progress 0.0 print(Enter transition from leg to wheel)這段代碼重點(diǎn)關(guān)注狀態(tài)切換的思想實(shí)際項(xiàng)目中還需要增加位姿判斷、速度一致性和安全保護(hù)等邏輯。7. 常見(jiàn)問(wèn)題與思考7.1 足式機(jī)器人和輪腿機(jī)器人哪個(gè)更有前景二者不是替代關(guān)系而是應(yīng)用場(chǎng)景不同。純足式機(jī)器人強(qiáng)在極端地形的靈活性但能效低輪腿機(jī)器人試圖在“效率”和“通過(guò)性”之間找到平衡。未來(lái)航天探測(cè)、災(zāi)害救援、復(fù)雜工業(yè)巡檢中輪腿機(jī)器人可能成為主流形態(tài)之一。7.2 “小橙”能直接在月球跑嗎目前還不能直接得出這個(gè)結(jié)論。公開(kāi)亮相代表技術(shù)驗(yàn)證達(dá)到一定階段但距離真正的航天任務(wù)還需要經(jīng)歷振動(dòng)、真空、熱循環(huán)、輻射等一系列環(huán)境試驗(yàn)同時(shí)還要通過(guò)嚴(yán)格的可靠性評(píng)審。所謂“未來(lái)有望奔赴太空作業(yè)”重點(diǎn)在“有望”二字上。7.3 開(kāi)發(fā)輪腿機(jī)器人需要掌握哪些知識(shí)至少需要三塊基礎(chǔ)機(jī)械設(shè)計(jì)了解多連桿機(jī)構(gòu)、關(guān)節(jié)驅(qū)動(dòng)選型、材料強(qiáng)度控制理論理解運(yùn)動(dòng)學(xué)、動(dòng)力學(xué)、PID、MPC、力控制軟件工程掌握 C/Python、ROS、實(shí)時(shí)系統(tǒng)、狀態(tài)機(jī)設(shè)計(jì)。如果只會(huì)其中一項(xiàng)可以加入團(tuán)隊(duì)協(xié)作如果三項(xiàng)都具備那你已經(jīng)具備獨(dú)立設(shè)計(jì)原型樣機(jī)的能力。7.4 開(kāi)源項(xiàng)目能參考嗎有很多開(kāi)源項(xiàng)目可以作為參考比如和四足機(jī)器人相關(guān)的 MIT Cheetah 系列開(kāi)源成果、ETH 的 several legged robot 項(xiàng)目、市場(chǎng)上有一些開(kāi)源輪腿機(jī)器人 SDK。建議先看它們的 Gazebo 仿真包再研究硬件圖紙和整機(jī)調(diào)試案例。開(kāi)源資料可以幫助你建立整體認(rèn)知但要直接用于航天項(xiàng)目還需要經(jīng)過(guò)大量工程驗(yàn)證。8. 總結(jié)與后續(xù)學(xué)習(xí)建議“航天自研半人馬機(jī)器人‘小橙’”這次公開(kāi)亮相對(duì)外展示的不僅僅是一臺(tái)外觀(guān)新穎的機(jī)器人更是國(guó)產(chǎn)機(jī)器人在“多模態(tài)移動(dòng)機(jī)構(gòu) 復(fù)雜環(huán)境適應(yīng)性 空間任務(wù)潛力”方向上的重要進(jìn)展。從技術(shù)角度看它已經(jīng)走在了一個(gè)非常有意思的交叉領(lǐng)域腿式運(yùn)動(dòng)與輪式運(yùn)動(dòng)結(jié)合控制算法與感知系統(tǒng)融合硬件可靠性與自主決策并重。對(duì)普通機(jī)器人開(kāi)發(fā)者來(lái)說(shuō)可以從三件事入手掌握 ROS 和 Gazebo 仿真搭建自己的輪腿機(jī)器人模型深入學(xué)習(xí)運(yùn)動(dòng)學(xué)逆解、步態(tài)規(guī)劃、狀態(tài)估計(jì)三個(gè)核心模塊關(guān)注力控制和 MPC 方向這是未來(lái)高性能腿足機(jī)器人的主流方向。如果條件允許可以嘗試復(fù)現(xiàn)一個(gè)簡(jiǎn)化版半人馬機(jī)器人原型。從“看到”到“做到”之間的距離永遠(yuǎn)比想象中更大但一旦跨過(guò)去你對(duì)機(jī)器人系統(tǒng)的理解也會(huì)完全不同。后續(xù)我計(jì)劃繼續(xù)更新這篇文章的配套內(nèi)容包括 Gazebo 仿真模型的具體搭建步驟、單腿運(yùn)動(dòng)學(xué)逆解完整代碼、不同步態(tài)的參數(shù)對(duì)比實(shí)驗(yàn)、以及從仿真遷移到低成本硬件的踩坑記錄。如果你也對(duì)輪腿機(jī)器人和足式機(jī)器人控制感興趣可以先自己動(dòng)手搭一個(gè) URDF 模型在仿真里感受一下“腿 輪”聯(lián)合控制的樂(lè)趣。希望這篇文章能給你帶來(lái)一些啟發(fā)。如果你對(duì)某個(gè)模塊有疑問(wèn)歡迎在評(píng)論區(qū)留言我們一起討論。