1.はじめに
「ReBeL」は、igus社のローコストな協働ロボットです。
https://www.igus.co.jp/info/build-or-buy-servicerobot-rebel
今回はReBeLの操作のうち、iRC以外の方法による運転を試してみました。
2.いろいろなインターフェース
こちらのページには、igusのロボットを制御する為の、様々な方法(インターフェース)が紹介されています。
https://www.igus.co.jp/info/programs-igus-robot-control
それぞれのインターフェースの特徴について、本記事の執筆時点(25年3月)における主観をまとめました。
(作成中)
この中で、比較的いろいろな操作がし易く、サンプルプログラムも提供されているのが「TCP/IP Interface」であり、igusではこれを「CRI Ethernet Interface」と読んでいます。
次章ではこのインターフェースを深掘りします。
3.CRI Ethernet Interface
公式の説明ページはこちらです。
https://wiki.cpr-robots.com/index.php/CRI_Ethernet_Interface
ここでは、iRCソフトウェアのバージョンV13を使用しています。
公式の説明ページにあるマニュアル「CRI V16 (until iRC/CPRog V13)」に従って進めていきます。
https://wiki.cpr-robots.com/images/2/23/CPR_RobotInterfaceCRI.pdf
最初に、CRIインターフェースを有効化します。

iRCソフトウェアのメニュー「File」→「Configure Interfaces」→「CRI Interface」
マニュアル(おそらくV12以前)を見るとここに有効・無効の切替ボタンがありますが、このバージョンでは、有効・無効の切替はできないです。
表示上はServerがStoppedになっていますが、TELNETで接続すると有効化されているようです。
下記はTELNETで接続したときに受信した内容の抜粋です。
hoge@fuga:~$ telnet 192.168.3.11 3920
Trying 192.168.3.11...
Connected to 192.168.3.11.
Escape character is '^]'.
CRISTART 0 MESSAGE TinyCtrl Version V980-13-040 CRIEND
CRISTART 1 MESSAGE Configuration: "igus REBEL-6DOF" Type: "REBEL-6DOF-01" Gripper: "" CRIEND
CRISTART 2 MESSAGE VelocitySetting: "0" CRIEND
CRISTART 3 CMD Active true CRIEND
CRISTART 4 STATUS MODE joint POSJOINTSETPOINT 0.00 -20.00 110.00 0.00 90.00 0.00 0.00 0.00 0.00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 POSJOINTCURRENT 0.09 0.08 -0.09 90.09 0.02 -0.10 0.00 0.00 0.00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 POSCARTROBOT 215.9 0.0 348.7 180.00 0.00 180.00 POSCARTPLATTFORM 0.0 0.0 0.0 OVERRIDE 90.0 DIN 0 DOUT 0 ESTOP 3 SUPPLY 0 CURRENTALL 0 CURRENTJOINTS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ERROR _MNE_COM_LAG 28 28 28 28 28 28 12 12 12 0 0 0 0 0 0 0 KINSTATE 99 OPMODE -1 CARTSPEED 0.0 CRIEND
・・・
4.プログラム言語C#版のサンプルをビルドする
Githubから、ソースコードをクローンします。
https://github.com/CommonplaceRobotics/CRI-DemoClient
Visual Studio 2022で開いてビルド・実行してみます。


ReBeLとパソコンとのLAN接続を外した状態で、「Connect TO CRI Server」ボタンをクリックします。間もなく接続失敗のメッセージが出ます。

実行できるところまで確認できました。
5.C#版のサンプルプログラムで、ReBeLを操作する
ReBeLとパソコンとのLAN接続をします。
以降の説明は、iRCとC#版のサンプルプログラム(以降、C#プログラム)の両方を動かした状態で進めています。
iRCも起動して、接続「Connect」、サーボOFF「Disable」状態にしておきます。

C#プログラムの「Connect TO CRI Server」ボタンをクリックします。接続できた旨のメッセージと、ウィンドウ中央には、ReBeLの各軸の位置情報が表示・更新されています。

操作権の考え方
ここから、iRCとC#プログラムを併用する場合に、お互いが干渉せず安全に操作するための「操作権」のやり取りがあります。
| 操作権の委譲方向 | 操作 | ステータス表示 | 操作 |
| iRC→C#プログラム | C#プログラムの「Set Active」ボタンをクリック ※iRCでEnable状態であれば、そのままEnableが継続する | 〇:iRC 〇:C#プログラム | ×:iRC 〇:C#プログラム |
| C#プログラム→iRC | iRCツールバーの「Reset」ボタンをクリック→「Enable」をクリック | 〇:iRC 〇:C#プログラム | 〇:iRC ×:C#プログラム |
上記の操作の実際を示します。C#プログラム側のログに着目します。
iRC→C#プログラム
C#プログラムの「Set Active」をクリックすると「CMD Active true」が表示

C#プログラム→iRC
iRCの「Reset」をクリックすると「CMD Active false」が表示

C#プログラムからの操作
C#プログラム側に操作権が渡った状態での操作を説明します。
急に予想しない動きをする恐れがあるので、非常停止ボタンを手の届く範囲において、試行してください。
基本的には、iRCのキーワードがそのまま対応します。

「Motion」タブ

ロボットのJOG操作相当の動きををします。
ここで注意すべきは、「A1+」~「A6-」の押しボタンは「速度の増減」を操作するで、クリックすると、速度が増減します。
クリック、あるいは押したままにして、少しずつ軸を動かす訳ではありません。
ウィンドウ中央のステータス表示からは速度は読み取れないので、チェックボックス「Hide alive m going out」をOFFにすると、現在速度に相当するログが流れるので、それを読み取ります。
チェックボックス「Joint」、「Cart Base」、「Cart Tool」はそれぞれ、iRCのツールバー「Motion Type」にリンクします。チェックボックスをクリックで切り替わります。
「Override」ボタンは、Overrideの増減を指定します。ただしこの「Motion」タブの「A1+」~「A6-」の操作に対しては影響しません。他のタブの動作の時に、Overrideが効きます。
「Stop」ボタンは、現在の速度を0にして止めます。
「Motion」タブ

指定の座標に移動します。
絶対値での指定です。値を設定してボタンをクリックすると、Overrideで指定された速度で移動します。
「Stop」ボタンはその場で停止します。
「Program」タブ

現在ロードされているプログラムを操作します。
「Start」「Pause」「Stop」:現在ロードされているプログラムの進行を操作します。
「Delete」:現在ロードされているプログラムをアンロードします。
「Load」:ReBeLのなかのラズパイディレクトリ「~/TinyCtl/Data/Progrram」に保存されている、プログラムを読み込みます。C#プログラムのコードでファイル名XMLを指定しているので、Cloneしてきただけのコードではエラーになります。
「Send」:パソコンのディレクトリ「C:\iRC-igusRobotControl\Data\Programs」の中の指定ファイルを、ReBeLのなかのラズパイディレクトリ「~/TinyCtl/Data/Progrram」に転送します。C#プログラムのコードでファイル名XMLを指定しているので、Cloneしてきただけのコードではエラーになります。
現在のプログラムの状態を把握するのは、C#プログラムだけではやりにくいので、iRCをモニタとして横に開いておくことをオススメします。

あ
あ
(作成中)
