# 共通 I/F と BL774 型システム ## ロボット単体 API ではない `URCtrl` は、UR を単体で便利に動かすためだけの API ではない。実験装置全体の中で、協働ロボットを一つの制御対象として扱うための API である。 ```text 実験計画 ↓ 測定シーケンス ↓ 装置制御層 ↓ ロボット共通 I/F ↓ UR / COBOTTA / 他ロボット ``` ## BL774 型の意味 BL774 型とは、本プロジェクトで想定する研究用・ビームライン用の制御構成である。 この構成では、ロボットは単に人手作業を置き換える機械ではない。測定器、検出器、ステージ、カメラ、サーバー、ログ、ジョブ管理と接続される自動化要素である。 そのため、ロボット API は以下のような性質を持つ必要がある。 ・短い Python コードで書ける。 ・状態が読める。 ・エラー復旧手順を持つ。 ・遠隔制御サーバーに載せられる。 ・デバイス共通フレームに接続できる。 ・ロボット固有 API を上位層へ漏らしすぎない。 ## SPring-8 互換 SPring-8 のような放射光実験では、ロボット操作は測定シーケンスの一部である。 例。 ```text 試料を置く ↓ ロボットを退避する ↓ シャッター・検出器準備 ↓ 測定 ↓ 試料交換 ↓ 次の測定 ``` この流れでは、ロボット制御 API は「手動操作の代替」ではなく「測定シーケンスの命令」として安定している必要がある。 ## 共通 API の対象範囲 共通 I/F が直接扱う範囲は次の通りである。 ・接続 ・現在位置取得 ・現在関節角取得 ・教示点管理 ・単点移動 ・複数点移動 ・軸移動 ・IO ・TCP / Tool ・状態取得 ・エラー情報 ・復旧補助 一方、以下はロボット固有拡張として扱う。 ・メーカー固有スクリプト ・ロボット専用ハンド ・メーカー固有ファイル転送 ・特殊 UI 操作 ・Teach Pendant 固有機能 ## サーバー化との関係 この共通 I/F は、将来的に `ese774_frame` などのデバイスサーバー層へ載せることを前提にする。 重要なのは、フレーム側に UR 固有実装を入れないことである。 ```text ese774_frame 汎用フレーム URCtrl UR 固有実装 CobottaCtrl COBOTTA 固有実装 ``` サーバー層は共通 I/F を公開し、実体クラスとして `URCtrl` や `CobottaCtrl` を選ぶ。