共通制御 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 関連ソース。