高層功能架構詳解 - openExo

高層功能架構詳解

  • 1. 系統整體結構與模塊化設計
  • 2. 兩大核心類:ExoData 與 Exo
    • A. ExoData
    • B. Exo
    • C. 數據結構的層級關系
  • 3. 多微控制器協作與BLE通信
  • 4. 主控軟件運行流程(主循環偽代碼)
  • 5. 架構優點小結
  • 6. 與 Code Structure 的關系
  • 實用建議

1. 系統整體結構與模塊化設計

OpenExo 軟件架構高度模塊化。系統可根據需要自由組裝各個功能模塊,由一個 Arduino 級別的主控 MCU 統一調度。每個模塊(如電機、控制器、傳感器、LED 顯示等)都是獨立的,可插拔、可擴展,便于支持不同的實驗和應用場景。

2. 兩大核心類:ExoData 與 Exo

A. ExoData

  • 定位:ExoData 作為數據與參數的載體,負責保存系統的所有遙測(telemetry)數據和當前控制參數。

  • 結構特點:ExoData 的層級與 Exo 的模塊化硬件結構一一對應,實現了“軟硬件一體化抽象”。

  • 作用:

    • 存儲和實時更新各傳感器數據(如力敏電阻FSR、力矩傳感器、馬達反饋等);

    • 存儲和同步當前所有控制器參數、狀態(如各關節的目標/實際力矩、控制模式等)。

B. Exo

  • 定位:Exo 類是真正“驅動外骨骼硬件邏輯”的主對象,負責所有部件的實際控制和數據流轉。

  • 作用:

    • 組織、調度所有底層模塊(如馬達、控制器、傳感器、LED等);

    • 每輪主循環執行run(),完成數據采集、控制運算、命令下發等任務。

C. 數據結構的層級關系

可以用如下樹狀結構理解 Exo/ExoData 關系:

Exo / ExoData
├── StatusLed       // 狀態指示燈模塊
├── SyncLed         // 同步指示燈模塊
├── FSRs            // 足底壓力傳感器模塊
└── Side / SideData // 左/右側模塊└── Joint / JointData      // 每個關節(如髖、踝、肘等)├── TorqueSensor       // 力矩傳感器├── Motor / MotorData  // 電機驅動與反饋└── Controller/ControllerData // 控制器及其參數

說明:

  • “/” 表示 Exo 和 ExoData 的同層鏡像關系

  • 每一層的Data對象存儲該模塊的狀態和參數

  • 這樣做方便主控、藍牙、遠程上位機等任意環節“全局訪問/更新/同步”當前設備狀態

  • Exo:總控制器,調度所有下級模塊。

  • StatusLed/SyncLed/FSRs:與外部交互的硬件模塊。

  • Side(如左/右腿):每側獨立實例,可適配不同任務(如左踝+右髖)。

  • Joint:每個關節可配置不同的傳感器、電機和控制策略(比如左側髖關節是直驅,右側踝關節是Bowden拉索)。

  • 各模塊的 Data:每層對象都有與之配套的數據描述類(如 JointData),實現參數與狀態分離(方便持久化/同步/通信)。

3. 多微控制器協作與BLE通信

  • 有的硬件會配備兩個 MCU:

    • 主 MCU(主控):執行核心控制任務(如實時采集、計算控制量、下發馬達指令)。

    • 通信 MCU(如 Arduino Nano BLE 33):處理藍牙通信和一些“軟實時”任務(如數據上傳/接收、遠程調參)。

  • 兩者通過 UART 通信,ExoData 作為協議“橋梁”,同步數據/參數。

  • 常見相關類有:

    • ComsMCU / ExoData:通信 MCU 端的數據容器

    • ExoBLE / ExoData:藍牙接口的數據容器

    • BleParser:負責BLE數據解析與命令分發

4. 主控軟件運行流程(主循環偽代碼)

  • 從SD卡讀取配置

    • 如關節數量、類型、參數、控制器配置等
  • 創建 ExoData 實例

    • 靜態變量方式保存主數據結構
  • 創建 Exo 實例

    • 同樣靜態變量,管理所有外設/模塊
  • 每周期運行流程:

    • 讀取藍牙/串口/本地消息,更新 exo_data

      • 包括參數調整、控制模式切換、狀態同步等
    • 調用 exo.run()

      • 依次調度所有子模塊(如各關節、各傳感器、LED 等)

      • 完成采集、運算、指令下發

典型主循環C++偽代碼:

void loop() {// 1. 讀取外部消息(如藍牙參數、命令)BleParser.parseIncoming(&exo_data);// 2. 更新數據、同步狀態exo_data.update();// 3. 調用核心控制邏輯exo.run(&exo_data);// 4. 采集/上報/存儲數據等exo_data.log();
}

5. 架構優點小結

  • 完全模塊化,軟硬件結構高度鏡像,易于維護、擴展、可視化;

  • 所有參數/狀態集中于 ExoData,方便通信與遠程配置;

  • 硬件更換、控制策略切換非常方便,只需變更 SD 卡配置,無需代碼大改;

  • 支持多MCU分布式架構(實時主控+通信/可視化分工),適合科學實驗和實際場景使用。

6. 與 Code Structure 的關系

高層功能模塊是所有底層 C++ 代碼和硬件抽象的核心“骨架”。每一個子模塊(如 Joint、Motor、Controller)都可在詳細的 Code Structure 章節查找對應的實現、繼承和接口規范。

實用建議

  • 如需開發新功能,只需擴展 Joint/Motor/Controller 的派生類,并在 ExoData 里加入參數描述即可;若需遠程調參/數據可視化,可直接基于 ExoData 實例和 BLE 協議擴展新接口。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90063.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90063.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90063.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【西北工業大學公開課】導引系統原理(全61講)周軍 -個人筆記版 5000字

【嚴正聲明】此文檔為個人筆記:僅供個人與同學參考學習,記錄學習過程,嚴謹商業轉載,或商業售賣!感謝西北工業大學公開課知識分享,公開資料開源!視頻鏈接:【【西北工業大學】導引系統…

《命令行參數與環境變量:從使用到原理的全方位解析》

前言 當我們在終端輸入 ls -l /home 查看目錄詳情,或用 gcc -o hello hello.c 編譯代碼時,或許很少思考:這些空格分隔的 “指令 選項 路徑” 是如何被程序識別的?為什么 PATH 變量能讓系統找到可執行文件,而 HOME 變…

C++設計模式:單例模式 (現代C++主流實現方式Meyer‘s Singleton + 使用CRTP模板化)

文章目錄單例模式創建單例類餓漢式or懶漢式現代C單例模式的主流實現方式——Meyers Singleton使用 CRTP 模板化單例類單例模式 單例模式是指程序中只需要一個實例化對象,在全局作用域或整個代碼架構中,此對象只被實例化一次,就可以達到在整個…

Eureka 和 Nacos

一、基本介紹EurekaEureka 是 Netflix 公司開發的一款基于 REST 風格的服務注冊與發現組件,專為分布式系統設計。它遵循 AP 原則(可用性、分區容錯性優先),強調在網絡分區等異常情況下的服務可用性,是 Spring Cloud Ne…

文件IO筆試題

目錄前言一、核心概念:二、關鍵操作步驟:三、為什么需要文件IO?四、常見類型:五、標準IO源碼六、筆試真題和練習1.代碼實現1代碼實現22.代碼實現3.代碼實現4.代碼實現5.代碼實現七、總結前言 文件IO(文件輸入/輸出&am…

前端學習 5:DFT

DFT技術 DFT (design for testability):指在設計系統和電路的同時,考慮測試的需求,通過增加一定的硬件開銷,獲得最大可測性的設計過程。(因為增加了硬件,所以也帶來了不足&#xff…

最長遞增子序列(LIS)問題詳解

最長遞增子序列LIS問題詳解一、問題定義與核心特征1.1 問題描述1.2 核心特征二、基礎解法:動態規劃(DP)2.1 解法思路2.2 Java代碼實現2.3 復雜度分析三、優化解法:二分查找貪心3.1 核心思路3.2 二分查找的作用3.3 Java代碼實現代碼…

什么是HTTP長連接、短連接?誰更能抗DoS攻擊?

想象你在快餐店點餐: 你:“一個漢堡”收銀員:“好的,15元”交易結束,你離開隊伍你想加杯可樂,重新排隊你:“一杯可樂”收銀員:“好的,8元”再次離開… 這種每次溝通后立即…

微軟徽標認證是什么?如何快速獲取驅動簽名?

在Windows系統中安裝硬件驅動時,是否遇到過“無法驗證發布者”的警告?這正是驅動數字簽名在背后發揮作用。對于軟件開發者而言,驅動數字簽名不僅是系統兼容性的保障,更是企業品牌信任度的核心。一、驅動數字簽名的核心作用驅動數字…

Apache Ignite緩存基本操作

這段內容主要講解了 Apache Ignite 中緩存(IgniteCache)的基本操作,包括獲取緩存、創建緩存、銷毀緩存、執行原子操作以及異步操作等。下面我將用中文對這些內容進行詳細解釋,幫助你更好地理解。一、獲取緩存實例(Gett…

最新基于R語言結構方程模型分析與實踐技術應用

現代統計學理論和方法的不斷完善,使科研工作對統計方法的要求也越來越高,面對紛繁復雜的數據,如何選擇最為合適的數據分析方法已成為科研工作者,尤其是廣大剛處于科研生涯起步階段的研究生們最為棘手問題。隨著科學的發展&#xf…

物聯網_TDengine_EMQX_性能測試

一、Tdengine接口開發文檔 1、數據庫 1.創建數據庫 URL /dp/createdb/ method post 請求示例 {"db_name":"demo01" // 必填 }響應示例 // 成功 {"code": 1,"data": {"成功創建數據庫": "demo04"},"error…

從分析到優化:Amazon Q CLI 助力 EKS 網絡調用鏈剖析與運維實踐

1. 引言 在 Amazon EKS(Elastic Kubernetes Service)環境中,理解從 ALB(Application Load Balancer)到 Pod 的完整網絡調用鏈對運維人員至關重要。本文將展示如何利用 Amazon Q CLI 這一 AI 助手工具,通過…

Class10簡潔實現

Class10簡潔實現 import torch from torch import nn from d2l import torch as d2l# 輸入為28*28,輸出為10類,第1、2隱藏層256神經元 num_inputs, num_outputs, num_hiddens1, num_hiddens2 784, 10, 256, 256 # 第1個隱藏層丟棄率為0.2,第…

【多線程篇22】:ConcurrentHashMap的并發安全原理剖析

文章目錄一、HashMap 的“不安全”:問題的根源1. 數據結構回顧 (JDK 1.8)2. 并發下的致命缺陷:put 操作二、ConcurrentHashMap 的安全之道 (JDK 1.8)1. 核心數據結構2. 安全的 put 操作:分場景精細化加鎖3. 安全的 size() 計算:并…

【Java + Vue 實現圖片上傳后 導出圖片及Excel 并壓縮為zip壓縮包】

系統環境: Java JDK:1.8.0_202 Node.js:v12.2.0 Npm:6.9.0 Java后端實現 Controller /*** xxxx-導出* param response 返回信息體* param files 上傳的圖片文件* param param1 參數1* param param2 參數2*/PostMapping("/ex…

安科瑞:能源微電網助力工業園區“綠色”發展

朱以真近日,廈門市工業和信息化局印發工業園區綠色智慧微電網建設,擬開展全市工業園區綠色智慧微電網試點通知,那么對于如何實現綠色園區的建設是今天的話題。對工業園區綠色智慧微電網建設需求,其核心價值體現在“源-網-荷-儲-充…

VUE2 學習筆記3 v-on、事件修飾符、鍵盤事件

事件處理v-on用于事件交互。語法:v-on:要綁定的事件“事件觸發時執行的函數” (函數這里可以寫括號,也可以不寫,沒有影響)簡寫::事件觸發時要執行的函數,在Vue配置參數中,通過method…

變換域通訊系統CCSK的matlab仿真

CCSK(Cyclic Code Shift Keying)通信系統的MATLAB仿真。實現完整的CCSK調制、AWGN信道傳輸和解調過程,并計算了誤碼率(BER)。 % CCSK通信系統仿真 clear; clc; close all;% 參數設置 L 31; % m序列…

技術演進中的開發沉思-40 MFC系列:多線程協作

今天說說MFC的線程,當年用它實現中間件消息得心應手之時,可以實現一邊實時接收數據,一邊更新界面圖表圖文信息,順滑得讓人想吹聲口哨。 MFC 多線程它像給程序裝上了分身術,讓原本只能 “單任務跑腿” 的代碼&#xff0…