# 共通制御 I/F と MG400 実装の契約 この共通 I/F は本プロジェクト群で定義されたもので、COBOTTA、UR、DOBOT に共通する操作名と呼出し形式を目指す。**COBOTTA の I/F を DOBOT に流用したという意味ではない。** 各機種の実現可能な操作は異なり、共通メソッドの存在は同一の物理動作を保証しない。 `DobotCtrl` は公開 I/F 層で、各メソッドを `DobotTcp` に委譲する。`DobotTcp` が MG400 固有のコマンド、状態取得、座標変換を実装する。`dobot_api.py` はメーカー提供APIであり、`dobot_api_ext.py` は追加処理を担う。`ese774_frame` はこの公開 I/F をネットワーク越しに透過公開する通信基盤であり、共通 I/F の定義元ではない。 ## 操作の意味と例外 | 共通操作 | MG400 実装の扱い | |---|---| | `take_arm()` / `give_arm()` | 制御権取得・解放に対応する独立コマンドがないため、コマンドを送信せず `True` を返す。モータの有効化とは異なる。 | | `turn_on_motor()` / `turn_off_motor()` | `EnableRobot()` / `DisableRobot()` を使用する。 | | `servo_on` | フィードバックの `EnableStatus` に基づく状態。 | | `halt()` / `stop()` / `task_stop()` | 共通 I/F と同義の停止動作が確認できず、`NotImplementedError`。**非常停止手段として使用しない。** | | `hand_stop()` | 接続ハンドの仕様が定まらず未実装。 | | `set_decel()` | 独立減速度コマンドがなく `False` を返す。`get_decel()` は未実装。 | | `set_speed()` | MG400 の `SpeedL`、`set_extspeed()` は `SpeedFactor` に対応。異なる設定。 | | `get_speed()` | 最後に本ライブラリから設定した値を返す。実速度の読み取りではない。 | ## 座標と関節の公開表現 共通 Cartesian 座標は `[x, y, z, rx, ry, rz]`、MG400 は `[x, y, z, r]`。`DobotTcp._p_to_mg400()` は `rx` と `ry` が非ゼロの場合 `ValueError` を送出し、`rz` を `r` に対応させる。MG400 から読み取る際は `rx=ry=0` を補う。 共通関節座標は `[j1, j2, j3, j4, j5, j6]`、MG400 は `[j1, j2, j3, j4]`。MG400 に存在しない `j5`、`j6` はゼロが必須で、読取時にはゼロを補う。**6成分の公開表現は6自由度のハードウェアを意味しない。** ## リモート公開時の意味 サーバーは `FastApiServer(device_cls=DobotCtrl, router_cls=None, api_spec=None, object_name="dobot", ...)` を用いる。同期・非同期クライアントの通信方式が変わっても、サーバー側で実行する制御は `DobotCtrl` を通る。HTTP要求の完了と、ロボットの運動完了は区別する。 出典: 提供された `dobot_ctrl.py`、`dobot_tcp.py`、`server_fastapi/server.py`、`ese774_frame` 関連ソース。