共通 I/F を使った制御フロー

ローカルで状態を確認する

from dobot.dobot_ctrl import DobotCtrl

robot = DobotCtrl(dobot_ip="192.168.1.6", auto_connect=True)
try:
    print(robot.state())
    print(robot.get_current_position())
    print(robot.get_current_angle())
finally:
    robot.disconnect()

実機に動作を指示しない状態確認例である。auto_connect=True で初期化時に接続する。state() 等の返り値の詳細は Sphinx 自動 API と実装を参照する。

モータと制御権

robot.take_arm()
robot.turn_on_motor()
# 安全を確認したうえで、必要な操作を実行する
robot.turn_off_motor()
robot.give_arm()

共通 I/F の take_arm() / give_arm() は MG400 では同等の制御権 API が確認できず、現実装では no-op である。turn_on_motor() / turn_off_motor() は MG400 の有効化・無効化操作に対応する。上のコードは呼び出し関係の説明であり、安全確認を省いた運転手順ではない。

FastAPI サーバーで同じ I/F を公開する

python -m dobot.server_fastapi.server

server_fastapi/server.py は FastApiServer(device_cls=DobotCtrl, router_cls=None, api_spec=None, object_name="dobot", ...) を使用する。公開対象は ese774_frame の自動 dispatch 規則に従う。機器固有の API 定義を別途複製する方式ではない。

from dobot.config import Config
from dobot.server_fastapi.client_sync import SyncDobotClient

client = SyncDobotClient(config=Config())
print(client.state())
print(client.get_current_position())

サーバーは既定では 127.0.0.1:8000、MG400 は 192.168.1.6 を参照する。Config.load_yaml() はクラス設定を更新し、Config(yaml_path=...) はインスタンス設定を更新する。サーバーの設定参照方法を確認して使い分ける。

非同期クライアントは dobot.server_fastapi.client_async.AsyncDobotClient。HTTP の非同期処理と、ロボットの移動完了待機は別概念である。移動を行う場合は move() のパラメータと wait_for_complete() の動作を確認し、作業空間の安全を確保する。