# 第6章 RTDEIOInterface ## 本章について RTDEControlInterface がロボットを動かし、RTDEReceiveInterface が状態を取得するのに対し、 `RTDEIOInterface` は SDU Robotics `ur_rtde` が提供する I/O 操作用 I/F であり、Universal Robots 公式 RTDE の writable field を利用してロボットの入出力(I/O)を制御する。 PLCとの連携、センサの読み取り、電磁弁やグリッパの制御など、ロボット外部機器との接続で利用する。 本章では、 ・Digital IO ・Tool IO ・Analog IO について説明する。 --- # 6.1 I/Oとは I/Oとは ``` Input / Output ``` の略である。 ロボットはモータだけではなく、 ・センサ ・電磁弁 ・ソレノイド ・シリンダ ・グリッパ ・ランプ ・PLC などとも通信する必要がある。 これらを制御するのが IO である。 --- # 6.2 IOの種類 URには複数種類のIOが存在する。 |種類|用途| |----|----------------| |Standard Digital Input|外部入力| |Standard Digital Output|外部出力| |Tool Digital Input|ツール先端入力| |Tool Digital Output|ツール先端出力| |Analog Input|アナログ入力| |Analog Output|アナログ出力| --- # 6.3 RTDEIOInterface 生成方法 ```python from rtde_io import RTDEIOInterface rtde_io = RTDEIOInterface(IP) ``` 通常は ```python RTDEControlInterface RTDEReceiveInterface RTDEIOInterface ``` の3つを同時に生成する。 --- # 6.4 Standard Digital Output もっとも利用するAPIである。 ```python rtde_io.setStandardDigitalOut(pin, value) ``` 例 ```python rtde_io.setStandardDigitalOut(0, True) ``` DO0をONにする。 OFF ```python rtde_io.setStandardDigitalOut(0, False) ``` --- # 6.5 Standard Digital Input 入力状態は RTDEReceiveInterface から取得する。 ```python state = rtde_r.getDigitalInState(0) ``` 戻り値 ``` True False ``` である。 --- # 6.6 Tool Digital Output ツールコネクタの出力を制御する。 ```python rtde_io.setToolDigitalOut(pin, value) ``` 例 ```python rtde_io.setToolDigitalOut(0, True) ``` ハンド開閉などで利用する。 --- # 6.7 Tool Digital Input ツール先端入力も Receive Interface から取得する。 例 ```python state = rtde_r.getToolDigitalIn(0) ``` ※API名はバージョンにより異なる。 --- # 6.8 Analog Output アナログ電圧出力 ```python rtde_io.setAnalogOutputVoltage(...) ``` または 電流出力 ```python setAnalogOutputCurrent(...) ``` が利用できる。 用途 ・インバータ ・速度指令 ・電圧指令 など。 --- # 6.9 Analog Input アナログ入力は Receive Interface から取得する。 例 ```python voltage = ``` センサ入力 ロードセル 変位計 などに利用できる。 --- # 6.10 グリッパ制御例 もっとも単純な例 ```python OPEN ↓ DO0 ON ↓ 0.5秒待つ ↓ DO0 OFF ``` Python ```python rtde_io.setStandardDigitalOut(0, True) time.sleep(0.5) rtde_io.setStandardDigitalOut(0, False) ``` --- # 6.11 トグル動作 LED点滅例 ```python while True: rtde_io.setStandardDigitalOut(0, True) time.sleep(0.5) rtde_io.setStandardDigitalOut(0, False) time.sleep(0.5) ``` --- # 6.12 MoveとIOを組み合わせる 典型的なピック動作 ``` MoveJ ↓ MoveL ↓ Close Gripper ↓ MoveL ↓ MoveJ ``` コード例 ```python robot.move(...) robot.move(...) robot.set_do(0, True) robot.wait_move() robot.move(...) ``` --- # 6.13 入力待ち センサ待ち ```python while True: if rtde_r.getDigitalInState(0): break time.sleep(0.01) ``` PLC同期などで利用する。 --- # 6.14 IO制御の注意点 IO更新は比較的高速であるが、 数ms以内の厳密なタイミング制御には向かない。 位置同期が必要な場合は URScript または Robot Program との組み合わせを検討する。 --- # 6.15 ur_ctrl.pyでの実装 ur_ctrl.pyでは ```python set_do() get_di() set_tool_do() get_tool_di() ``` などのAPIとしてラップすることを推奨する。 利用者は RTDEIOInterface を直接扱う必要がなくなる。 --- # まとめ RTDEIOInterface は ロボット外部機器との通信を担当する。 主な利用方法は ・デジタル出力 ・デジタル入力 ・ツールIO ・アナログIO である。 モーション制御と組み合わせることで、 実際の自動化装置を構築できる。 次章では Dashboard Server を説明する。