JSONファイルからの順次送り出しでアームロボットを動かす

実験室に設置しているアームロボット(Universal Robot社のUR10e)は、制御用PCからPythonでコントロールしてPick&Place動作などを行うように構成しています。ここでは、Node-REDでアームロボットの動作記述ファイル(JSON)を読み込んで、順次実験室のロボット制御用PCに送信してアームロボットを動作させる事例を紹介します。

システム構成

アームロボットUR10eは台座にコントローラを格納しており、制御用PCが実験室内のLANを経由して接続されています。この制御用PCは動作記述ファイルをJSONで保持しており、Pythonでその動作を解釈してUR10eの動作コマンドに変換し、UR10eコントローラに送信することでロボットを動作させる構成となっています。
この動作記述ファイルの内容を外部接続のコンピュータからNode-REDで順次送信することで、実験室内の別のコンピュータから、または安全が担保できればネットワーク経由の遠隔操作でロボットを動作させることが可能となります。

動作記述ファイル

動作記述ファイルの内容は以下のようなものです。
JSONファイルの中に動作が順次記載されており、これを送信して「アームロボットの動作が完了したら」次を送信する、という手順で動作を実現しています。
下記の切り出した部分は(1)対象物の上に移動し、(2)指を開き、(3)把持位置に降下、(4)開いた指をニュートラルに戻し(5)対象物を把持する という一連の動作を記述しています。

Node-REDフローの構成

操作手順とフローの内容

1.動作記述ファイルを選択

まず、file-inノードを開いて対象となる設定記述ファイルのパスを設定します。
出力形式は文字列にしておきます。

これでデプロイし、「動作データ読み込み」のinjectノードをクリックするとファイルが読み込まれます。ここでJSONエラーが出るようなら動作記述ファイルの内容を良く確認し、修正してください。正しく読み込まれた場合はデバッグウインドウに読み込んだファイル名が表示されます。

このプロセスでは、次のように変数を設定しています。
-読み込んだファイルをJSONでパースする:動作記述ファイル中の各動作コマンドが配列に格納されます。
-changeノードを使って各変数を設定する:以下の設定内容で、flow.の中に必要となる各種情報を保存しておきます。

読み込んだ動作記述ファイルのデータをクリアする場合は、「動作データを消去」のインジェクトノードをクリックします。
そうすると、読み込んだ各種情報をクリアして”no datafile”の表示をします。
no datafileの状態ではアームロボットは動作しませんので、もう一度動作記述ファイルを読み込んでおいてください。

動作データの消去に続く変数消去のためのchange nodeの内容は以下の通りです。
各動作コマンドを格納する配列や、ステップ数、ファイル名などを消去しています。

2.ロボットの動作を開始

アームロボットUR10eのコントロール用PCとはWebsocketノードで接続しています。接続が確立している状態で、Startのインジェクトノードをクリックします。
すると、次のノードでstartが押されたことを記憶すると共にプログラムカウンタに相当する変数”pos”を0にして次のファンクションノードに入ります。

ファンクションノードでは、配列に格納された該当する番号の動作設定コマンドを読み出して、次の動作設定コマンドを読みだす時のためにカウンタを進めておきます。
送信すべき動作設定コマンドがなくなったら、flow.startをfalseに設定して停止の状態にする作業も行います。

読み出したデータは次のswitchノードで念のためstartボタンが押された状態である事を確認して、websocketノードを通じてUR10eコントローラのPCに送信されます。

ここまでで最初のコマンドが送信されました。

これを受けて、 UR10eコントロールPCはアームロボットを駆動します。一つの動作が完了すれば、websocket inノードで{“motion”:”completed”}というメッセージが送り返されます。続く2つのswitchノードでこのメッセージが「動作終了メッセージであること」と、「起動中であること」の確認をしたうえで、次のFunctionノードで新たな動作設定コマンドを読み取って送信します。

これを繰り返すことで、アームロボットのひとつの動作の完了を確認しながら次のコマンドを送り出す、という事ができるようになります。
これにより、Pick & Place など様々な動作をすることができるようになります。

3.停止の操作

フローには動作を停止する際のインジェクトノードも設けています。
これに続くchange nodeでは、停止状態への設定と、動作設定コマンドのカウンタを0にしています。

 

安全機能の追加、リスクアセスメントと安全対策

機器を遠隔で制御する場合、必ず安全であることを確認してください。例えば、扉の開閉を行う場合では、人や物が挟まれないか等、十分注意して制御システムを構築してください。パトライトの点滅やブザーの発報などを行ってから、機器の動作を行うことをお勧めします。

(重要)

・この事例のようにロボットを取り扱うには適切なリスクアセスメントを行って、適切な安全対策を施した上で導入してください。過去にロボットと人の接触事故による死亡事故の事例が発生しています。労働安全衛生法により教育を受けた資格を持つ資格保有者でないと取り扱うことができない産業用ロボットの場合は特に注意してください。

以下に構成のみ簡単に説明しますが、事故を防ぐためにも教育や資格について調査し、それぞれの現場に合わせた適切なリスクアセスメントと安全対策を行ってください。

1.産業用ロボットの場合
産業用ロボットに関連するすべての作業者に対し「産業用ロボットの教示(検査)等の業務に係る特別教育」の受講を、労働安全衛生法により義務付けています。

・労働安全衛生法第59条第3項)労働安全衛生法 第六章 労働者の就業に当たっての措置(第五十九条-第六十三条)
「事業者は、危険又は有害な業務で、厚生労働省令で定めるものに労働者をつかせるときは、厚生労働省令で定めるところにより、当該業務に関する安全又は衛生のための特別の教育を行なわなければならない。」

ロボットのプログラミング、ロボットのメンテナンス、以外でも、間接的に関わる作業者も含めて少しでも関連する可能性がある場合は特別教育を受講し資格取得をしておきましょう。無資格で作業を行ったり行わせた場合は、作業者と事業者の両方が罰せられることとなります。

2.協働ロボットの場合
ロボットの中でも出力が80W未満の場合に限り「協働ロボット」として資格不要で取扱いできるロボットがあります。
この「協働ロボット」のと呼ばれるものは、もともと人と同じ環境で作業をすることを目的として開発されています。関節を動かすモーターの出力も低出力で、モノや人との衝突や接触があった場合でも衝突を検出して自動停止したり、緩衝材により保護するなど、より安全面により配慮した設計となっています。

・ロボットを取り扱う場合、基本的には特別教育を受けた資格取得者でないと取り扱うことができません。
もともと産業用ロボットが人と同じ現場で作業を行う場合は、労働安全衛生規則第150条の4により安全柵などを設ける必要がありました。これが、平成25年12月24日付基発1224第2号通達で、「ロボットと人との接触による危険がない」と判断された場合には同一現場で協働することが認められた、という経緯になります。

(まとめ)
稼働させる設備がどのカテゴリに属するかを把握したうえで、特別教育や資格についても調査し、リスクアセスメントを行ったうえで適切な安全対策を施し、事故の無いように運用してください。