外部監視・制御のためのクライアントライブラリ

著者:Martin Rytter / Ebbe Overgaard Fuglsang

本記事では、外部からの監視や制御に利用できるクライアントライブラリの概要を紹介します。 いつ使うべきなのか?どれを選べばよいのか?――答えは「用途による」です。

クライアントライブラリとは

クライアントライブラリとは、協働ロボットを外部から監視または制御するためのソフトウェアパッケージです。

これらのライブラリを使うことで、通常のPC、産業用PC、またはイーサネットで協働ロボットに接続された外部機器上で動作するソフトウェアを開発できます。

また、URCapとして配布するソフトウェアを開発する場合にもクライアントライブラリを利用できます。この場合、ソフトウェア自体はロボット上で動作しますが、ライブラリの使い方は同じです。

さらに、ROSシステムから協働ロボットを監視・制御するための特別なクライアントライブラリであるROSドライバーについても紹介します。

本当に必要か?

多くの場合、クライアントライブラリは必要ありません。

ロボットに必要な機器を通常の入出力やフィールドバスで接続し、ティーチングペンダント上のロボットプログラムからすべてを制御できるのであれば、その方法が最もシンプルです。この場合、高価なハードウェアを追加する必要もなく、統合の複雑さも避けられます。

しかし、次のようなケースではクライアントライブラリが便利、あるいは必要になります。

プログラム実行中のレジスタ監視・変更

ロボットプログラムが動作している間に、外部プロセスからレジスタを監視または変更するケースです。
ユーザーはティーチングペンダントでプログラムを開始・停止しながら、外部ソフトウェアが並行して動作します。通信はすべてレジスタの読み書きによって行われます。

例:
部品位置を検出する外部ビジョンシステムが、最適なピック位置をレジスタに継続的に書き込む。

URCapでは、プログラム実行中にレジスタを監視・変更するプロセスを組み込むケースがよくあります。

外部からのプログラム操作

外部ソフトウェアから、ロボットが使用するプログラムの
・読み込み
・開始
・停止
を制御するケースです。

外部ユーザーインターフェースからロボットを操作する場合に便利です。

例:
ユーザーが製品の種類を選択すると、対応するロボットプログラムを自動的に読み込む簡易操作パネル。

外部からの動作制御

外部ソフトウェアがロボットの動作指令を継続的に送信するケースです。

これは高度な用途であり、必要となるアプリケーションは限られています。

例:
外部の経路計画ソフトウェアを使用するビンピッキングシステム。

まとめると、外部ソフトウェアを開発する際に

  • レジスタの監視・変更
  • プログラムの読み込み・開始・停止
  • ロボット動作の制御

が必要であれば、クライアントライブラリの利用を検討するとよいでしょう。

どのライブラリを使うべきか

外部ソフトウェアをC++で開発する場合は、次のライブラリを推奨します。

Universal Robots Client Library for C++

前述したすべての用途に対応する高機能ライブラリです。
ユニバーサルロボットが開発を支援し、FZIと共同で開発されています。

ライブラリ、ドキュメント、サンプルコード
https://github.com/UniversalRobots/Universal_Robots_Client_Library

Universal Robots ROS2 Driver

このROS2ドライバーは、Universal Robots Client Libraryをベースに開発されています。
同じ開発チームによって保守されています。

ライブラリ、ドキュメント、サンプルコード
https://github.com/UniversalRobots/Universal_Robots_ROS2_Driver

これらのライブラリが利用できる場合は、ほとんどのケースで十分対応できます。

ただし、他にもいくつかのライブラリがあります。古いソフトウェアで使われていることもありますが、新しいプロジェクトでも用途によっては利用されることがあります。

RTDEライブラリ

RTDEライブラリは、Realtime Data Exchangeプロトコルのみを実装したライブラリです。
レジスタの監視・変更だけが目的であれば、これらを使用できます。

RTDE Client Library

ユニバーサルロボットが提供するPythonベースのライブラリです。
長く利用されており、eシリーズおよびSW3.4以降のCB3ロボットで使用できます。

ソフトウェア
https://github.com/UniversalRobots/RTDE_Python_Client_Library

ドキュメント
https://www.universal-robots.com/articles/ur/interface-communication/real-time-data-exchange-rtde-guide/

UR RTDE

デンマーク南部大学で開発されたライブラリです。
C++ベースで、Pythonバインディングも提供されています。

https://gitlab.com/sdurobotics/ur_rtde

Dashboard Server

Dashboard Serverは、

  • プログラムの読み込み
  • プログラムの開始
  • プログラムの停止

を行うためのプロトコルです。

RTDEとDashboard Serverの両方を実装したライブラリも存在します。

Sintef Client Library

ノルウェーのSintef社が開発したライブラリです。
RTDEとDashboard Serverの両方に対応しています。

Pythonベース
https://github.com/SintefManufacturing/python-urx

これらが現在広く使われているライブラリです。
もし新しく興味深いライブラリがあればぜひ教えてください。開発者の皆さんが新しいアイデアを生み出すことを私たちは歓迎しています。

自分で開発する

まずは既存のライブラリを試すことをおすすめします。
ただし、独自ライブラリを開発することも可能です。

その場合は、ロボットと通信するためのプロトコルを理解する必要があります。主なものは次のとおりです。

RTDE(Realtime Data Exchange)

TCPポート30004
レジスタの監視および制御

https://www.universal-robots.com/articles/ur/interface-communication/real-time-data-exchange-rtde-guide/

Dashboard Server

TCPポート29999
プログラムの読み込み・開始・停止

https://www.universal-robots.com/articles/ur/dashboard-server-e-series-port-29999/

Interpreter mode

TCPポート30020
ロボット動作制御

https://www.universal-robots.com/articles/ur/programming/interpreter-mode/

Primary / Secondary / Real-time interface

これらはさまざまな機能を持つプロトコルです。
URソフトウェア内部では、ユーザーインターフェース部分と制御部分の通信に使用されています。

誰でも使用できますが、扱いやすいインターフェースではありません。また将来の仕様について強く依存した設計を行うことは推奨されません。

https://www.universal-robots.com/articles/ur/interface-communication/remote-control-via-tcpip/

利用可能なライブラリが対応していない言語で開発する場合や、特殊な要件がある場合には、これらのプロトコルを利用して独自ライブラリを作成することも意味があります。

ただし、多くの場合、既存の問題はすでに誰かが解決しています。多くの開発者にとっては、実績のあるライブラリを使う方が効率的でしょう。

困ったときは

最後に、URフォーラムを紹介します。

https://forum.universal-robots.com/

ここには、本記事で紹介したライブラリを利用したり開発に関わったりしている開発者が多く参加しています。とてもフレンドリーなコミュニティですので、遠慮せず質問してください。