0
0

ユニバーサルロボットへのRTDE通信の実例(JAVA)

Posted at

はじめに

世界で多くのシェアを誇る協働ロボットであるユニバーサルロボットは、ロボットの座標値やスピードスライダ値などの取得、または設定できるデータ通信機能を実装しております。
Real-Time Data Exchange(RTDE)通信と呼ばれるもので、ポート30004番にアクセスすることでリアルタイムのデータの取得・設定を可能とします。内容についてはEtherNet/IPの内容と同等なのでPLCがあればこの通信を使うことは不要ですが、ラズパイや外部パソコンからデータ通信を行うときに非常に役立ちます。

RTDE通信の仕組みは次の投稿で詳細にご説明しますが、まずここではどういうことができるのかを知っていただくために、JAVAで通信できるライブラリをOSSでGithubに公開しておりますので、それを使用した例を示します。

RTDE通信のプログラム例

Githubの公開アドレス

App.javaのファイルを開いていただけると、今回作成したライブラリの使い方の例が載っております。

        RTDESocketClient client= new RTDESocketClient("192.168.83.129", 20, "myApp") {

            @Override
            public void onReceive(Object[] values) throws IOException {
                double[] pos = (double[])values[0];

                System.out.println(pos[0]*180/Math.PI);
            }

            @Override
            public Object[] onSend() throws IOException {
                return null;
            }
            
        };

        client.addOutput(RTDEOutput.actual_q);
        client.start();

RTDESocketClientクラスのコンストラクタに、ロボット(ここではオフラインシミュレータ)のIPアドレスと、送受信の1秒間当たりの回数、通信ヘッダを設定します。通信ヘッダはログ用なので空欄でも構いません。
今回はロボットのジョイント角度の取得を行ってみます。そのため、末尾にaddOutputメソッドでRTDEOutput.actual_qというのを指定しています。これはユニバーサルロボットの資料を見ればわかりますが、actual_qというのはジョイント6軸すべての値を示します。
実際に取得できたかどうかを確認するために、onReceiveという抽象メソッドを明確に定義することでデータ受信直後の処理を書きます。ここではvalues[0]をdouble配列にキャストして、ロボットのベース軸の角度を表示するコードを書いています。
これを実行すると、下図のようにロボットのベース座標と、取得した値が合致することがわかります。

image.png

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0