Java
Ubuntu
ROS
java8
ubuntu16.04

rosjavaというROSをjavaで開発できるお話

ROSをどうしてもjavaで書きたいという異端な考え方のもと、公式がrosjavaなるjavaでも開発できる環境をサポートしており、使い心地が最高(個人差あり)だったのでここに、まとめていこうと思います

もっとROSのjava開発が広がってほしい!

使用環境

私が使用している環境です。参考にどうぞ
ubuntu16.04 ( 日本語版 )
ROS ( kinetic )
java8 ( java9は対応してない模様? )
gradle ( おそらく必要 )

0. 事前導入について

ROS本体のインストールやjavaのインストールに関しては既に済ましている前提で進めるのでまだの方は、ググッてインストールを済ませてください
インストールの仕方は公式ページにも乗っていると思います

1. 導入

1.1 rosjavaのインストール

まずはrosjava本体をインストールします

sudo apt-get install ros-kinetic-rosjava

でrosjavaをインストール

1.2 ワークスペースの作成

おそらくROSをすでに使っている人はcatkin_wsがHomeディレクトリにあると思います
別にその中に一緒に作っても問題はないのですが後々、少し面倒なことが起きるのでここでは分けて作っていきます
ここでは catkin_ws_java という名前で作成します

Homeディレクトリ下で

mkdir catkin_ws_java
cd catkin_ws_java
mkdir src
cd src
catkin_init_workspace

をそれぞれ順番に実行してrosjava用のワークスペースを作成する

1.3 プロジェクト, パッケージの作成

次にrosjava用のパッケージを作る

ここでそれぞれパッケージ、プロジェクトは以下を入力することで作成することができる

catkin_create_rosjava_pkg 任意パッケージ名
catkin_create_rosjava_project 任意プロジェクト名

(それぞれの任意名において大文字は使えない模様)

以降では任意パッケージ名を test_pkg 任意プロジェクト名をtest_pj とした前提で話していく

Homeディレクトリに再び戻り

cd catkin_ws_java/src

で移動する

catkin_create_rosjava_pkg test_pkg

下のようなコマンドが出力されればパッケージの作成は成功

BUILD SUCCESSFUL

Total time: 8.479 secs

これでパッケージの作成は完了
このまま作成したプロジェクトの中に移動する

cd test_pkg

次にプロジェクトを作成する

catkin_create_rosjava_project test_pj

下のようなコマンドが出力されればプロジェクトの作成は成功
rosjavaはプロジェクトを作成した時点でチュートリアル的な基本ファイルを毎回作成してくれる初心者に優しい仕様
主にこの中で使用するのは Talker と Listener である

Creating rosjava project 
  Name      : test_pj
  File      : build.gradle
  File      : settings.gradle
  File      : Talker.java
  File      : Listener.java
  File      : CMakeLists.txt (gradle task update)

ちなみにrosjavaのファイル構造は

src ┳プロジェクトA
    ┃ ┣パッケージB
    ┃ ┗パッケージC
    ┃ 
    ┗プロジェクトE
      ┣パッケージF
      ┗パッケージG

のような形で広げていくことができる

1.4 catkin_makeする

ここまでは単にパッケージとプロジェクトを作っただけでこのままでは使えないので catkin_make する
ただしrosjavaのcatkin_makeはオンラインでしか使えない悲しい仕様である
ただし、これに関しては回避が可能であり別の記事にて記述する

cd ~/catkin_ws_java

でワークスペースに戻り

catkin_make

以下のような出力が出ていれば問題はない

[100%] Built target gradle-test_pkg

以下のような出力が出たとしても問題はないので無視で構わない 失敗したといった文言が出てさえいなければ出来ている

警告: [options] ブートストラップ・クラスパスが-source 1.7と一緒に設定されていません

2. rosjava実行

あとはrosjavaを実行するだけである
rosjavaの実行はlaunchファイルからではなく,シェルファイルから起動させる

まずはシェルスクリプトがある場所に移動する

cd ~/catkin_ws_java/src/test_pkg/test_pj/build/install/test_pj/bin

ここにシェルとbatファイルがある
lsコマンドで確かめよう

次に立ち上げるノードを決定する
今回このプロジェクトには Talker と Listener がある
先に Listener を立ち上げる

まずはroscoreが立ち上がっていないとどうしようもないので別のターミナルで立ち上げる

roscore

次に Listner を立ち上げる (実行ディレクトリは先程のbinディレクトリ)

bash test_pj com.github.rosjava.test_pkg.test_pj.Listener

次に別のターミナルで Talker を立ち上げる (こちらも cdコマンドで bin まで移動しておく)

bash test_pj com.github.rosjava.test_pkg.test_pj.Listener

これで Listner 側のターミナルにて

5 10, 2018 8:20:38 午前 org.ros.internal.node.RosoutLogger info
情報: I heard: "Hello world! 3"
5 10, 2018 8:20:39 午前 org.ros.internal.node.RosoutLogger info
情報: I heard: "Hello world! 4"
5 10, 2018 8:20:40 午前 org.ros.internal.node.RosoutLogger info
情報: I heard: "Hello world! 5"
5 10, 2018 8:20:41 午前 org.ros.internal.node.RosoutLogger info
情報: I heard: "Hello world! 6"

のように表示されれば通信完了です

長々とお付き合いいただきありがとうございました

次からは、それぞれの詳細な説明や、もう少し突っ込んだこと、よりrosjavaが使いやくなる方法を書いていきたいと思います