移動指令の同期・非同期処理の実装照合

本書は提供された DobotCtrl / DobotTcp のソースコードに対する静的照合です。MG400実機試験ではありません。

公開インターフェース

DobotCtrl.move(target, *, motion_mode=None, coord_type=None, path_blend=None, offset=None, pose=None, speed=None, accel=None, decel=None, is_async=True) は、同名・同引数で DobotTcp.move() に委譲します。公開I/Fの is_async は、Pythonの async def やHTTP非同期実行を意味しません。移動コマンドの受付後に戻るか、Sync()でキュー完了を待つかを選ぶ引数です。

コマンドの選択

条件

送信コマンド

備考

coord_type="J", motion_mode="PTP"

JointMovJ

6要素公開J座標をMG400の4軸に変換

coord_type="P", motion_mode="PTP"

MovJ

6要素公開P座標をMG400の4要素に変換

coord_type="P", motion_mode="LINE"

MovL

直線移動

motion_mode="CIRCLE"

未対応 (False)

単一目標だけでは円弧軌道を表現できない

motion_mode="SPLINE"

未対応 (False)

未実装

coord_type="J" かつPTP以外

未対応 (False)

J座標の意味を保持できない

pose 指定は未実装で False。offset はP座標だけに適用可能です。path_blend の非None指定は未対応の設定処理に依存します。速度はPTP/Jで set_jspeed()、LINEで set_speed() を呼びます。加速度・減速度は移動指令より前に設定されます。設定が途中で失敗した場合、移動コマンドは送信されませんが、それ以前の設定変更が巻き戻される保証はありません。

完了の意味とエラー

  1. コマンドの応答を _handle_command_reply() で判定します。応答コード0は受付成功であり、物理的な移動完了ではありません。

  2. is_async=True は _wait_motion_start_or_error() に進みます。既定の監視時間は0.25秒、間隔は0.01秒です。この戻り値がTrueでも、移動全期間の成功を保証しません。

  3. is_async=False は wait_for_complete() に進み、Sync() 応答を検査した後、_motion_error_active(query_error_id=True) を実行します。ただし通信失敗を正常状態と区別できない経路があるため、戻り値Trueを安全上の完了保証に使用できません。

  4. get_motion_complete() は busy_status が取得できなければFalse、取得できれば not bool(busy_status) を返します。指令ごとの成功・失敗を追跡するものではありません。

drive() と制約

drive() は軸番号と値の組を受け取り、現在の関節角から目標J座標を組み立てて move(..., motion_mode="PTP", coord_type="J") に委譲します。軸番号は1始まりで1~6を受け付けますが、MG400に存在しないJ5/J6への非ゼロ指定は失敗します。relative=True は現在角度への加算です。現在角度の取得に失敗した場合も False です。rotate() は未実装です。

検証範囲

この照合は静的な分岐と委譲先の確認です。TCP応答の実時間挙動、複数指令の競合、タイムアウト、非常停止、安全インターロックは検証していません。