跳到正文

Wiki

單執行器實物適配

約 3 分鐘閱讀

本文由簡體中文內容確定性轉換,並受版本化術語表保護。

按實際電機、驅動器和協議實現設備後端。先驗證一個執行器,再擴展完整機械人。

1.示例 1:明確設備契約

項目 需要確認的內容
身份 型號、固件、地址與協議版本
通信 速率、幀格式、校驗和確認
模式 位置、速度、力矩或電流,切換條件
反饋 編碼器分辨率、軸側、圈數與故障
傳動 減速比、方向、零點與有效範圍
停機 保持、減速、禁能與抱閘的含義
超時 目標過期、通信失聯時設備自己做什麼

協議未明確前,不猜測使能報文。先做只讀解析,核對身份和反饋。

1.1.Ubuntu 設備路徑與權限

實際 USB 串口可能為 /dev/ttyUSB0 或 /dev/ttyACM0。檢查實際路徑與所屬組:

ls -l /dev/ttyUSB0
id -nG

設備屬於 dialout 而當前用户不在該組時,可執行以下命令,註銷並重新登錄後再檢查:

sudo usermod -aG dialout "$USER"

可用時優先記錄 /dev/serial/by-id 中的穩定設備鏈接。不要以 root 運行整個機械人程序來繞過設備配置。

2.示例 2:換算編碼器與速度

假設有效分辨率每電機轉 8192 count,減速比 10,方向 sign,已展開的多圈計數 count:

q = sign * (count - zero) * 2π / (8192 * 10)
dq = sign * motor_rpm * 2π / (60 * 10)

8192 必須是協議中的有效 count/rev。如果手冊給的是線數,要先確認是否已經計入四倍頻。單圈計數先處理迴繞;沒有圈數或足夠採樣約束時,兩個讀數不能唯一恢復跨多圈運動。

保存 /tmp/jazzy_units.cpp 驗證算術:

#include <cmath>
#include <iostream>
int main()
{
  const double pi = std::acos(-1.0);
  const double q = 40960.0 * 2.0 * pi / (8192.0 * 10.0);
  const double dq = 60.0 * 2.0 * pi / (60.0 * 10.0);
  std::cout << "q=" << q << " rad, dq=" << dq << " rad/s\n";
}
g++ -std=c++17 /tmp/jazzy_units.cpp -o /tmp/jazzy_units
/tmp/jazzy_units

示例結果約 q=3.14159、dq=0.628319。這是假設參數的換算,不是設備測量結果。

3.示例 3:實現設備後端

on_init 校驗實際接口和參數;on_configure 建立通信並取得可信反饋;on_activate 確認故障、模式與初始目標;read 更新 SI 單位狀態;write 檢查並轉換命令;on_deactivate 執行設備定義的停止流程。

使能、清錯和停止需要確認時,用有序的離散操作和明確狀態處理。不要把虛擬協議的最新目標郵箱直接當作可靠命令隊列。

上一章固定兩個關節和教學協議,不能只改串口路徑就作為單執行器實物驅動。完成適配後,按身份、反饋、單位、方向、模式、小範圍運動和停止逐項驗收,保存對應日誌。


返回 Jazzy 總覽 · 上一篇:虛擬串口與模擬下位機 · 下一篇:完整機械人與進階實例