Skip to content

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

🕷️ Hexapod-ROS2-Controller: 12-DOF 機器人軟硬體整合控制系統

ROS 2 Python Platform Award

本專案為國立成功大學114-1「數位電路導論」課程期末專題第一名作品。 透過整合 ROS 2 框架與 ESP32 微控制器,實現 12 自由度(12-DOF)六足機器人的低延遲步態控制與即時運動學解算,展現軟硬體協同設計 (Hardware-Software Co-design) 之系統架構能力。

🎥 System Demonstration (動態展示)

點擊 GIF 即可跳轉至 YouTube 觀看完整展示影片: Hexapod Demo


🏗️ System Architecture (系統架構與全機視角)

本專案採用軟硬體解耦的設計思維,將上層的演算法邏輯與底層的硬體驅動分離,以確保系統的高擴充性與穩定度。

Full Robot View

[ Upper Level: ROS 2 / PC ]
 ├── 🧠 Gait Controller (run_publisher_final.py)
 │    ├── Multi-threading Keyboard Listener (異步指令接收)
 │    └── Tripod Gait Generator (三角步態軌跡計算)
 │
 └── 📡 Bus Servo Driver Node (依賴庫整合)
      └── Translates JointTrajectory to Serial Packets

[ Lower Level: Hardware / ESP32 ]
 ├── 🔌 ESP32 Microcontroller (Firmware: Serial Parsing & PWM)
 └── ⚙️ 12 x Hiwonder Serial Bus Servos

🛠️ Hardware Specifications (硬體與零件選型)

為了達成高精度的步態控制與穩定的系統供電,本專案在硬體選型與佈線上經過嚴格評估,實現動力電源與邏輯電源的穩定分配。

Component (零件名稱) Specification / Model (規格型號) Purpose in System (系統用途)
Microcontroller Bus Servo Driver HAT (A) with ESP32-WROOM-32E 擔任底層核心硬體,負責解析 ROS 2 傳來的串列封包,並生成對應的控制訊號。利用其雙核心與高時脈優勢處理即時控制。
Actuators Hiwonder Serial Bus Servos (45kg.cm High Torque) x 12 提供 12 自由度的關節動力。採用串列匯流排馬達而非傳統 PWM 馬達,大幅減少配線複雜度,並支援角度回讀功能。
Power Supply 12V / 10A AC/DC Adapter 為 12 顆高扭力伺服馬達提供瞬間大電流,確保多軸連動時不會因壓降而導致控制器重啟。
Structure Custom Hexapod Frame 六足機器人實體機構支撐,確保多軸連動時的結構剛性與幾何對稱性。

Hardware Board Serial Bus Servos

-----

💻 Gait Controller (步態控制核心)

上位機的運算核心為 src/run_publisher_final.py,負責六足機器人的步態生成與指令發布。主要設計包含:

  1. 非同步多執行緒設計 (Multi-threading with Locks) 導入 threading.Threadthreading.Lock(),將「鍵盤指令監聽」與「步態運動主循環」分離。確保在進行三角步態(Tripod Gait)計算與發布時,系統仍能零延遲地響應使用者的中斷或轉向指令。

  2. ROS 2 Trajectory Publishing 將計算出的各關節角度,封裝成標準的 JointTrajectory 訊息格式,發布週期為 250ms。這個數值是實測夾出來的:週期過短時系統會當機,過長則步態速度不足,250ms 是兩個邊界之間能穩定運行的值。

    當機的原因推測為上位機的發布速率超過下游序列鏈路(driver node → 序列埠 → ESP32 → 12 顆匯流排馬達)的處理能力,未被消化的指令在佇列中持續累積所致。當時並未進一步驗證瓶頸是落在序列埠頻寬,或是每顆馬達逐一寫入的往返延遲——兩者對應的解法並不相同。以此專案的規模回頭看,較正確的做法應是在 ROS 2 的 QoS 層級設定有界佇列與適當的可靠性策略(步態指令屬於「僅最新值有意義」的資料),而非以人工試出一個發布週期來迴避問題。

  3. 三角步態實作 (Tripod Gait) 將 6 條腿分為兩組(Tripod 1 & Tripod 2),透過狀態機邏輯實現前進、後退與原地轉向,並保留 LIFT_OFFSETPAN_OFFSET 的參數化設計,方便後續調整。


🔧 My Contribution & Field Notes (個人貢獻與實戰紀錄)

我在本專案擔任 專案組長與系統整合 (Project Lead & System Integrator),負責統籌六人團隊的分工與進度、建置主機端的 ROS 2 環境與 workspace 編譯、參與機構組裝,並執行從「程式跑得起來」到「機器人真的會走」之間的全機整合與除錯。

比起功能清單,這個專案真正教會我的東西寫在下面。開發期間我們累計損毀 3 顆伺服馬達與 2 片控制板,以下是各次失效的原因判定與後續處置:

1. 未設定角度上下限 → 堵轉燒毀

初期未在馬達端設定關節的角度限制,步態指令將關節推向超出機構容許的位置。馬達抵住機構極限後無法到位,持續以最大扭力堵轉 (stall),電流迅速攀升並冒煙。

處置: 在馬達設定與上位機指令兩端同時加上角度限制。軟體端的限制不能取代硬體端的限制——只要有任何一個指令來源繞過軟體檢查,馬達仍會撞到底。

2. 指令發布頻率過高 → 熱累積燒毀

上位機以過高的頻率發布關節指令,馬達持續高頻作動,產生的熱量超過散熱速率而燒毀。

這次失效最值得記錄的一點是:我們事前已經啟用了原廠軟體的溫度保護功能,但它沒有攔下這次損壞。 保護機制的觸發速度跟不上實際的熱累積速率,因此無法作為唯一的防線。此後我們改以控制發布週期從源頭限制作動頻率,而非依賴事後的保護機制。

3. 出廠不良品 → 持續發熱燒毀

一顆馬達自始就完全無法作動,但仍持續接收指令並發熱,最終燒毀。排查後確認為出廠即存在的瑕疵,與控制端無關。

這次的教訓是排查順序: 症狀(馬達不動)與軟體 bug 的表現一模一樣,我們一開始往程式的方向找。面對「不會動」的關節,應先以單顆馬達的獨立測試排除硬體不良,再回頭檢查控制邏輯,否則會在錯誤的方向上耗掉大量時間,而故障品在這段期間仍在持續受熱。

4. 螺絲掉落造成短路 → 控制板燒毀

組裝過程中一顆螺絲掉落至通電的控制板上,跨接電路造成短路,板子當場冒煙報廢。

處置: 之後只要在板子上方進行任何作業,一律先鋪一層塑膠保護膜,讓掉落的金屬件落在膜上而非電路上。同時自備電動螺絲起子以減少手動作業時的失手機率。採用此措施後,未再因相同原因損失任何一片控制板。


🔗 Hardware & Dependencies (硬體與底層驅動依賴)

本專案的成功運作,建立在以下優秀的開源驅動與工具庫之上。感謝以下 Repository 提供底層的通訊與校正支援:

  • zlink-bus-servo-driver 作為 ROS 2 與匯流排馬達之間的通訊橋樑,負責處理底層的封包轉換與序列埠發送。
  • ESP32_servo_control 燒錄於 ESP32 的韌體核心,負責接收上位機指令並輸出高精度的 PWM 訊號至 12 顆伺服馬達。
  • tools 用於機器人組裝初期的零點校正與環境變數建置。

🚀 How to Run (執行方式)

1. Environment Setup

請確保已安裝 ROS 2 (Humble/Foxy) 並編譯上述依賴庫的工作區 (Workspace)。

2. Launching the Controller

# 啟動底層通訊節點 (依賴庫)
ros2 launch zlink_bus_servo_driver bus_servo_driver.launch.py

# 啟動本專案之步態控制大腦
python3 src/run_publisher_final.py

3. Controls

  • W : 前進 (Walk Forward)
  • S : 後退 (Walk Backward)
  • A : 原地左轉 (Turn Left)
  • D : 原地右轉 (Turn Right)
  • [Space] : 停止並回到站立姿態 (Stand)
  • Q : 安全退出程式 (Quit)

👥 Contributors & Acknowledgements (團隊貢獻與致謝)

本專案為 6 人團隊協作成果,感謝所有成員的專業分工與投入,讓這個六足機器人得以從理論走向實體。以下為團隊成員與職責劃分:

  • [謝〇祐] (@RogerH0711) - Project Lead & System Integrator (專案組長與系統整合)
    • 統籌六人團隊分工、開發進度與系統架構規劃。
    • 建置主機端 ROS 2 開發環境與 workspace 編譯,參與機構組裝。
    • 負責上位機操作與全機軟硬體之最終系統整合、失效分析與防護措施導入。
  • [蔡〇森] (@Andy5533) , [廖〇嘉] (@PatrickLoveCode) - Algorithm & Software Engineers (演算法與軟體開發)
    • 規劃底層程式碼架構。
    • 負責步態控制程式 (run_publisher_final.py) 的規格制定與實作,包含馬達配置與關節相對位置的定義、非同步多執行緒與中斷控制邏輯,以及後續除錯。
  • [陳〇融], [顏〇勳] - Hardware & Mechanical Engineers (硬體與機構工程)
    • 負責六足機器人實體機構組裝與伺服馬達走線設計。
    • 規劃 ESP32 控制板電源分配與硬體線路連接。
  • [黃〇銓] - QA & Field Testing (測試與調校)
    • 執行伺服馬達零點硬體校正。
    • 負責步態參數調優與實際場域運行之壓力測試。

About

12-DOF Hexapod Robot Controller with ROS 2 and ESP32

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages