動作のポータビリティ
どのアームでも、同じコードで動く

Hardware Abstraction Layer による3機種対応設計

Pipeline

Step 01
📱 iPhone 3Dスキャン
現実空間をスキャンして座標を取得。追加機材ゼロ。
Step 02
🖥 Unity デジタルツイン
シミュレーションで動作を設計・検証。関節角度CSVを生成。
Step 03 — NEW
⚙️ HAL(ハードウェア抽象化)
同じCSVを任意のロボットアームに変換する抽象化レイヤー。ここだけがハード依存。
Step 04
🦾 実機展開
mechArm / SO-101 / Lite 6 ——どのアームでも同じコードで動く。

3 Layer Architecture

1 What
動作の意味
「カップを掴んで台座に置く」
タスク定義。ハードウェアに依存しない。
どのアームを使っても意味は変わらない。
hardware-agnostic
2 How
動作の軌跡
関節角度のシーケンス(CSV)
frame, j0, j1, j2, j3, j4, j5
ハードに近いが抽象化できる。Unityが生成。
portable data
3 Execute
動作の実行
各ハードのSDKに変換(HAL)
pymycobot / FEETECH UART / xArm SDK
ここだけがハード依存。アダプターを差し替えるだけ。
adapter pattern

3 Robots — 3 Architectures

Phase 2 🔵
mechArm 270 M5
pymycobot
Serial / USB-C
±0.5mm
〜¥100,000
最初の証明・検証機
Phase 3 🟢
SO-101
FEETECH Servo
UART + 模倣学習
AI補正
〜$220
民主化の証明
LeRobot接続
Phase 4 🟣
UFACTORY Lite 6
xArm Python SDK
TCP/IP (Ethernet)
±0.1mm
〜¥750,000
産業グレード証明
SIer向け提案

HAL — factory.py

robot_hal/factory.py — LOG102実装済み
# 1行変えるだけでロボットが切り替わる

from robot_hal.factory import create_robot

# Phase 2 — mechArm 270 M5(実装済み)
robot = create_robot("mecharm", port="/dev/cu.usbserial-XXXX")
✓ pymycobot + シリアル通信

# Phase 3 — SO-101(フェーズ3で実装)
robot = create_robot("so101", port="/dev/ttyUSB0")
→ FEETECH UART + 模倣学習

# Phase 4 — UFACTORY Lite 6(フェーズ4で実装)
robot = create_robot("lite6", ip="192.168.1.100")
→ xArm SDK + TCP/IP

# 共通インターフェース — どのアームでも同じ
robot.connect()
robot.send_angles([38.51, 79.01, -34.54, 0, -48.13, 0], speed=30)
robot.get_angles()
robot.go_home()