# 第3章 RTDE と `ur_rtde` のアーキテクチャ ## 本章について Universal Robots の制御では、**Universal Robots 公式 RTDE** と **SDU Robotics `ur_rtde`** を区別する必要がある。 RTDE は UR controller が公式に提供する双方向データ I/F である。一方、本ドキュメントで使用する `RTDEControlInterface`、`RTDEReceiveInterface`、`RTDEIOInterface` は、SDU Robotics が開発する第三者 OSS `ur_rtde` の API である。 本章では、この二つの関係と、Dashboard Server、Primary / Secondary Interface を含む現在の実装上の役割分担を説明する。 --- # 3.1 Universal Robots 公式 RTDE RTDE (Real-Time Data Exchange) は、外部 application と UR controller の間で controller が公開する data field を読み書きする Universal Robots 公式 protocol である。 状態取得だけでなく、I/O、speed slider、汎用 input register など controller 側の公開入力値も書き込める。 ただし、RTDE protocol 自体に `movej`、`movel`、`servoj` といった URScript の motion command が定義されているわけではない。RTDE で controller に値を書き込むことと、その値を robot motion としてどう解釈するかは別の責務である。 --- # 3.2 SDU Robotics `ur_rtde` 現在の Python 実装で利用する `ur_rtde` は Universal Robots 純正 SDK ではなく、SDU Robotics が開発する第三者のオープンソースライブラリである。 `ur_rtde` は役割ごとに主として次の I/F を提供する。 - `RTDEControlInterface`: モーション制御 - `RTDEReceiveInterface`: controller state の取得 - `RTDEIOInterface`: I/O 操作 これらは Universal Robots 公式 RTDE protocol を利用するが、`RTDEControlInterface` という motion API 自体が公式 RTDE protocol に存在するわけではない。 --- # 3.3 `RTDEControlInterface` の実体 `RTDEControlInterface` は PC から `moveJ()`、`moveL()`、`servoJ()` などを呼べるモーション制御 I/F を提供する。 その実装では、PC 側 `RTDEControlInterface` と robot 側で動作する SDU の control URScript が協調する。PC 側は Universal Robots 公式 RTDE の register を利用して command と parameter を controller に渡し、control URScript がそれを読み取って `movej`、`movel`、`servoj` などの URScript motion command を実行する。 したがって、`RTDEControlInterface.moveJ()` を「公式 RTDE に存在する MoveJ command を直接呼び出す API」と理解してはいけない。 --- # 3.4 `RTDEReceiveInterface` `RTDEReceiveInterface` は SDU Robotics `ur_rtde` の状態取得 I/F である。Universal Robots 公式 RTDE の output data を利用し、現在関節角、TCP pose、robot mode、safety mode などを PC 側から扱いやすい API として提供する。 Move command は持たない。 --- # 3.5 `RTDEIOInterface` `RTDEIOInterface` は SDU Robotics `ur_rtde` の I/O 操作用 I/F である。Universal Robots 公式 RTDE の writable field を利用して、Standard Digital Output、Tool Digital Output、Analog Output などを操作する。 --- # 3.6 Dashboard Server Dashboard Server は Universal Robots 公式の管理用 TCP I/F であり、RTDE protocol や SDU Robotics `ur_rtde` とは別系統である。 Power On / Off、Brake Release、program load / play / pause / stop、Protective Stop からの復旧など、controller の運転管理を担当する。 --- # 3.7 Primary / Secondary Interface Primary / Secondary Interface も Universal Robots 公式 I/F である。Controller 情報の取得や URScript の送信などに利用される。 現在の実装では、controller message / error の取得に Primary Interface を利用する部分がある。 --- # 3.8 `URCtrl` での役割分担 `URCtrl` は、これらの異なる I/F を上位の共通 API から利用できるようにまとめる。 |機能|現在の主な実装| |---|---| |モーション制御|SDU `RTDEControlInterface`| |状態取得|SDU `RTDEReceiveInterface`| |I/O|SDU `RTDEIOInterface`| |運転管理|Universal Robots Dashboard Server| |controller message / error|Universal Robots Primary Interface| 利用者は通常、これらを個別に操作するのではなく `URCtrl` を通して利用する。 --- # まとめ Universal Robots 公式 RTDE は controller の data field を読み書きする公式 protocol である。 現在使用している SDU Robotics `ur_rtde` は、その公式 RTDE を利用する第三者 OSS であり、`RTDEControlInterface` はさらに robot-side control URScript を組み合わせてモーション API を構成している。 したがって、**公式 RTDE protocol、SDU Robotics `ur_rtde`、URScript、Dashboard Server、Primary / Secondary Interface は、それぞれ異なる責務を持つ層として扱う必要がある。**