Universal Robotics URCapsの開発環境構築

お仕事でUniversal Robotsのロボットを使うことになりそうなので、この際だから開発環境の作り方まとめておきます。英語の資料をおっかなびっくり追っただけなので、よく知っている方いたらコメントください

# URCapsとは

[Universal Robots](https://www.universal-robots.com/ja/)が開発しているロボットURシリーズのサードパーティソフトウェア開発のフレームワークです。(ティーチングペンダント・ロボットコントローラー上で動作するプログラムのSDK)

#この文書の目的
URCapsをインストールして、サンプルプログラムを動かすまでの流れをまとめます

# 環境

- Ubunutu 17.10 (virtual box使用Windows10上に構築)
- Java 8 (Openjdk 8)　公式ではJDK6 を使用せよと書いてあります
- PolyScope 3.4.0.39 has been released March 14th 2017.
- URCaps SDK v. 1.1.0.76


#手順
## UR+ に登録する
URの公式開発者フォーラムであるUR+に登録します。UR+に登録しないとURCapsがダウンロードできません。
[ココ](https://www.universal-robots.com/plus/developer/)からアカウント登録しましょう

(2018/06/10 追記)
忘れていましたが、登録時に電話番号を登録します。URの日本法人から確認の電話がありますので、ご注意ください。

## Linuxを用意する
PCにLinuxをインストールしましょう。
公式では、Linux以外から開発するにはVMwareやVirtualboxを使用してLinuxをゲストOSとして設置して開発するように言われています。僕はWindows10からVirtual Boxを起動してその上に環境を構築しました。

## Javaをインストールする

公式ではJava SDK 6でと書いてありましたが、OpenJDK8でも問題なくコンパイルできたので、おそらく大丈夫なはず。。。

## URCapをダウンロード&解凍する
UR+にログインして
~~[Download URCaps SDK](https://forum.universal-robots.com/t/download-urcaps-sdk/19/10)の投稿をブラウザで開いてください。~~
(20180708追記)
[ダウンロードサイト](https://plus.universal-robots.com/download-center/urcaps-starter-package/)からSDKをダウンロードしてください

最下部にURCapsのダウンロードリンクが貼られています。
FTPを使用してダウンロードするか、リンク先のWebページからダウンロード可能です。

zipファイルでなのでunzipでもtarでも好きな方法で解凍しちゃってください。

## install.sh を実行する
ダウンロードしたファイルを解凍するとinstall.shというファイルが解凍したフォルダ直下にあります。これを実行すると必要なソフトウェアがインストールされます。

```
$ ./install.sh
```

インストールの最後でクロスコンパイル用のGCCツールチェインをインストールするか聞かれますが、僕はNoにしておきました。

C/C++でデーモンプログラムを書く際には必要となりそうなので、本当は入れた方がよさそうですが。。。

install.shの中身を覗いてみると以下のソフトのインストールとmvn installで./artifacts/下のjarファイルをmavenのローカルリポジトリに追加してるだけみたいでした

### install.shでインストールされていると思しきソフトウェアたち

 * dialog
    * 不明
 * sshpass
    * sshのログインのパスワード認証自動化用のソフトの模様 
 * maven
    * 言わずとしれた、javaのビルドシステム


## サンプルをコンパイル
Hello Worldがダウンロードしたファイルに追加されているので

(解凍先)/sample/com.ur.urcap.examples.helloworldに移動して

```
$ mvn install
```

でビルド開始

初回だと、いろいろダウンロードするので結構ビルドに時間かかりました。
target/hello_world.urcapが、jarファイルと共に生成されていれば成功です。

## ロボットにデプロイする
ロボットにプログラムを書き込む方法としてmavenのコマンドを

```
$ mvn install -Premote
```


でssh経由でデプロイできるようなのですが、ロボット側のネットワーク設定をしていなかったので、今回はUSBメモリに入れて手動デプロイします

ロボットのティーチングペンダントで[URCaps setup]の画面に行くと、以下の画面が表示されます。
[+]のボタンを押すと、ファイル選択の画面に切り替わるのでusb/hello_world.urcapを選択します。

インストールが開始されて完了すると以下の画面が表示されてマニフェスト関係が表示されます。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/6898/d5895371-2907-5a06-ab02-c85ea9b5adc0.png)

## 実行 
プログアム構造のURCapsタブからHello Worldが表示されているので上手くインストールできているようです。

![hellow.png](https://qiita-image-store.s3.amazonaws.com/0/6898/0ae23a78-fcf8-09fd-1765-13f16cd2e54d.png)

こんな感じの画面が出てきて、URのプログラムに組み込めたらOK
![prog.png](https://qiita-image-store.s3.amazonaws.com/0/6898/40be2770-f30a-ca80-99f5-468d1fa4530a.png)

この状態でロボットのプログラムを実行すると「Hello World」とポップアップダイアログが表示されたのでどうやら実行できたみたいです。

これで多分環境出来てる。。。はず！

# 今回の方法の代替手段
URCaps Starter Packageという開発に必要なソフトが一通り入って環境構築されたUbuntuの仮想イメージが用意されています。以下のリンクからダウンロードすると楽に環境構築できると思います。

[URCaps Starter Packageについての投稿](https://forum.universal-robots.com/t/urcaps-starter-package/95) (UR+のアカウント必要)


# 今後やりたいこと

* Hello Worldのプログラムちゃんと追う
* mavenで書かれているのでGradle化
* IntelliJから使えるようプロジェクト作成
* ssh経由でのデプロイ　うまく行けばJenkins使ってデプロイとかもできるかも
* windows上での環境構築(デプロイまでの代替手段)
* Ubuntu上でURSim(シミュレーションソフト)を動かしてURSim上にWindowsからデプロイ
* WSL上に構築可能か確認