今回はURを用いたURCapの開発について、環境構築から実際の手順まで解説していきたいと思います

目次[]
導入
URとは

UR(Universal Robot)とはUniversal Robots社が開発した協働ロボットで、人とロボットが協力して作業することができるロボットです。軽量でスペースを必要としないため、既存の生産レイアウトを変更することなく導入することができます。ねじ締め、梱包、パレタイジング、溶接・研磨など多岐にわたる用途で用いることができます。
URは、URCapという周辺機器やプラグインを開発するためのフレームワークを利用することで自動化や、さまざまな機能を拡張することができます。
今回はURcapの開発手順について、説明していきたいと思います。
URCapの開発環境
今回はWindowsにLinuxの仮想マシンを立ち上げ開発を行います。シミュレータを用いたテストに必要な環境は以下になります。
実際に開発に使用したのは以下になります。(推奨環境とは異なります)
*2024/5/16時点
・Windows11(4コア、8GBメモリ)
・GitHub Desktop(任意)
・Docker Desktop
・IntelliJ IDEA Community Edition
GitHub Desktopのダウンロード
ローカルでソースコードを管理することができるデスクトップアプリのGitHub Desktop(https://desktop.github.com/)をダウンロードします。
GitHub Desktopのインストール後、リポジトリを以下の手順でローカルマシンにコピーします。
GitHubウェブページを開き、URCapのメインページ(https://github.com/UniversalRobots/HelloWorldSwing)を開き,「<>Code」ボタンをクリックし、表示されるURLをコピーします。

GitHub Desktopアプリを開き、「File>Clone Repository」をクリックし、テキストボックスにコピーしたURLを貼り付け「Clone」します。

IntelliJ IDEA Community Editionのダウンロード
JetBrains社製のJava系向けIDE(統合開発環境) IntelliJ IDEA Community Edition(https://www.jetbrains.com/idea/download/?section=windows)をダウンロードします。最初に表示されているダウンロードリンクは有料版のため、一番下までスクロールする必要があります。
IntelliJ IDEAの他に、EclipseやNetbeansなど、JavaとMavenの統合をサポートする他のIDEも使用できます。
IntelliJを開き、「ファイル>開く」をクリックして、先ほどCloneしたリポジトリを開きます。

Docker Desktopのダウンロード
URのティーチペンダントの操作をシミュレートするためにDocker(https://www.docker.com/products/docker-desktop/)を使用します。
WindowsでUbuntuターミナルを使用するにはWSLをインストールする必要があります。コマンドプロンプトで以下のコマンドを用います。
wsl.exe –install Ubuntu-20.04
インストールしたWSLを開き、
docker pull universalrobots/ursim_e-series
コマンドを実行することでURのシミュレータをダウンロードします。
URSimのContainerを実行することで、ブラウザ上でシミュレータ(http://localhost:6080/vnc.html?host=localhost&port=6080)を使用できます。
ビルド方法

基本操作
プログラムをビルドする際、birudしたいフォルダでLinuxシェルを開き、以下のコマンドを実行します。ビルドには時間がかかる可能性があります。
今回はサンプルコードを実行するので、HelloWorldSwingフォルダ下のcom.ur.urcap.examples.helloworldswingフォルダ内で、Linuxシェル(フォルダ内でshift+右クリック)を開きます。
mvn clean package -DskipTests
コマンドを実行後、com.ur.urcap.examples.helloworldswingフォルダ内にtargetフォルダが作成されます。
targetフォルダ内に生成された.urcapファイルをDockerコンテナーの/ursim/programs.URXXフォルダーにコピーします。
*XXはDockerで実行されているロボット モデルによって異なります
その後、Dockerを開きフォルダを選択し実行(画像)し、シミュレータnoVNC(リンク)を開き接続することでHelloWorldのプログラムをシミュレータで実装することができます。


プログラムを編集し、シミュレータを使用するときは、ビルド方法(上記コマンド)に加えシミュレータのバージョン更新とDockerのリロードが必要になります。
バージョン更新
コマンドでのビルド後、画面右上の3本線からロボットの設定を選択します。


画面左側のシステムバーを押し、URCapsバーを押します。現在有効になっているURCapsが表示されているので、選択し「-」ボタンを押します。その後「+」ボタンを押し、追加したいファイルを開き再起動ボタンを押します。


Dockerを開き、リロードボタンを押します。

Dockerの更新後、シミュレータを起動し接続することでバージョンが更新され、編集したコードが適用されます。
システム構成
URCap が PolyScope(GUI) に統合される方法の一般原理を下の図に示します。PolyScope が起動すると、インストールされている URCap がないか検索されます。次に、PolyScope は各 URCap の Activator を呼び出し、Activator は PolyScope で使用できるようにするサービスを登録します。Activator には 2 つの上書きメソッドがあります。 start() と stop() です。 start() メソッドは PolyScope の起動時に呼び出され、stop() メソッドは PolyScope の停止時に呼び出されます。サービスは、ユーザインターフェイスに表示されるノードの名前など、URCap のいくつかの一般的なプロパティを設定します。このサービスは、PolyScope がユーザインターフェイス (UI) と各ノードのコントリビューションをそれぞれ作成するために使用するいくつかのメソッドも公開します。

サービスのタイプが必要な場合 (プログラム ノードなど)、ユーザーがサービスをプログラムに挿入すると、PolyScope はサービス内のメソッドを呼び出してこのノードを作成します。これにより、ユーザインターフェイスとContributionが作成されます。
ユーザインターフェイスは、Java Swing で作成することも、HTML ユーザインターフェイスとして作成することもできます。どちらの場合も、実際のプログラムノードのインスタンスがプログラムに挿入される数に関係なく、UI のインスタンスは 1 つだけしか存在しないことに注意することが重要です。
ユーザー インターフェイスには、PolyScope のレイアウトでユーザーに表示されるスタイルなどの視覚要素が含まれており、UI を操作するときに、それに応じて Contribution の設定を変更しようとします。
Contribution は、アクティブノードのロジック、またはコントローラーコードです。プログラム内でアクティブなノードのインスタンスごとに、コントリビューションの新しいインスタンスが存在します。 Contribution には、ノードの構成を保存するために使用される DataModel オブジェクトがあります。ユーザーが UI でアクションを実行すると、UI はこれをアクティブな Contribution に報告し、Contribution はこの設定を DataModel に保存します。ユーザーがプログラムを実行すると、コントリビューションは DataModel の構成に基づいて URScript を生成します。
ノードが作成され、ユーザーがノードを操作しているとき、UI とコントリビューションの間で一般的なアクティビティが発生します
各ノードの説明
インスタレーションノードはSwingInstallationNodeServiceを実装することでサービスを提供可能にします。SwingInstallationNodeViewはインストレーションノードのUIを提供し、InstallationNodeContributionはインストレーションノードのロジックを提供します。

結果
シミュレータを起動するとこのような画面が表示されます。

今回のHelloWorldのサンプルコードではティーチペンダント画面に画像右側のように表示するだけの簡単なものとなっています。
プログラムを選択し、URCapsのバーを選択することでプログラムツリーに表示し、編集することができます。

メソッドについての説明は以下のリンクに記載されています
https://www.universal-robots.com/articles/ur/urplus-resources/urcap-principle-of-urcaps-in-polyscope/
まとめ
URcapを使いこなすことでURの機能をさらに拡張することができ、多くの環境で活躍させることができます。今回は、URcapの開発環境の設定とサンプルをシミュレータで動かすだけでしたが、応用・発展のURcapシステム開発や関連情報を随時更新していく予定です。
<引用>Universal Robots
iCOM技研の取り組み
iCOM技研はSIer事業を展開しており、協働ロボットシステムの導入を行っています。弊社は、協働ロボットの販売からソフトウェア開発、ロボットスクールまで行っています。2024年からAI開発にも取り組み始めました。
今回はURCapの開発手順を手順に沿って解説しました。今後はティーチングレス化された協働ロボットシステムを開発し、製造業の人材不足を解消する製品を生み出していく方針です。