LoginSignup
0
2

More than 1 year has passed since last update.

【OpenRTM】OpenRTM-aist 2.0 (ROS transport含む)のインストール (ソースからのビルド)

Last updated at Posted at 2021-08-31

はじめに

OpenRTM-aist 2.0は公式GitHubで開発中のOpenRTM-aistの最新版です。
自分でビルドしてインストールする必要があり、ちょっと苦戦したので残しておきます。

注意点 ・OpenRTM-aistの旧バージョンなどは何も入っていない環境で試しました。公式サイトと前提条件が違うかもしれません。この記事の通りに実行すれば何も入っていない環境でもインストールできると思います。 ・まだ公式HPのマニュアルなども整備中のようなので情報が変わるかもしれませんがご容赦ください。

OpenRTM-aistって何?

OpenRTM-aistが何か、ROS Transport機能が何かは公式HPなどを参照ください。
OpenRTM-aistについてひとことで言うと産総研が開発しているロボット用ミドルウェアです。
ROSとの通信機能がROSTransport機能になり、バージョン2.0から追加されました。

また、記事内でコンポーネントのことをRTCと言っている場合があります。

この記事でやること

  • ROS Transport機能含むOpenRTM-aist 2.0 C++版のインストール
  • OpenRTM-aist-2.0 Python版のインストール
  • rtshellのインストール

やらないこと

  • ROSのインストール

ROSがインストールしてある前提で話を進めます。

環境

Windows 10 Home上のWSL2

  • Ubuntu 18.04
  • ROS Melodic
  • OpenRTM-aist 2.0 (今回はこれをインストール)

OpenRTM-aist 2.0 (C++版)のインストール

ダウンロード&ビルド&インストール

参考:
①公式ページ(OpenRTM-aist2.0のインストール)
②公式ページ(ROS通信機能の利用)

①のUbuntu+omniORBの部分を参考にビルド&インストールを行います。
②にあるようにROS通信機能をできるようにしておきます。 (-DROS_ENABLE=ONの部分)
適当なディレクトリで作業をしてください。

最初と最後のコマンドは①にも②にもないので注意して下さい。 最初のコマンドを実行しなかった場合:cmakeでエラー 最後のコマンドを実行しなかった場合:コンポーネントを実行する際にエラーが出ました。

$ sudo apt-get install libomniorb4-dev omniidl
$ git clone https://github.com/OpenRTM/OpenRTM-aist
$ cd OpenRTM-aist/
$ mkdir build
$ cd build/
$ cmake -DCORBA=omniORB -DCMAKE_BUILD_TYPE=Release -DROS_ENABLE=ON ..
$ cmake --build . --config Release -- -j$(nproc)
$ sudo cmake --build . --target install
$ sudo ldconfig -v

cmakeのエラー内容

-- Checking for module 'omniORB4'
-- No package 'omniORB4' found
CMake Error at /usr/share/cmake-3.10/Modules/FindPkgConfig.cmake:419 (message):
A required package was not found
Call Stack (most recent call first):
/usr/share/cmake-3.10/Modules/FindPkgConfig.cmake:597 (_pkg_check_modules_internal)
CMakeLists.txt:25 (pkg_check_modules)
-- Configuring incomplete, errors occurred!
See also "/home/XXXX/temp/OpenRTM-aist/build/CMakeFiles/CMakeOutput.log".

これでインストールは完了です。サンプルコンポーネントを動かしてみましょう。

サンプルコンポーネントを実行する

まず、roscoreを起動してください。

rtc.confの作成

コンポーネントの動作に必要なrtc.confというファイルをコンポーネントを実行する場所で作成します。
ここでは、~/workspace/ros_transport_testというディレクトリを作成しています。OpenRTM-aistではLinux系なら ~/workspace、WindowsならCドライブ直下のworkspaceフォルダ(C:\workspace)で作業することが多いです。すくなくとも僕の周りでは。

$ cd ~/workspace
$ mkdir ros_transport_test
$ cd ros_transport_test
$ sudo nano rtc.conf

rtc.confの中身は以下です。入力後、エディタを終了してください。

rtc.conf
manager.modules.load_path: /usr/local/lib/openrtm-2.0/transport/
manager.modules.preload: ROSTransport.so
manager.components.preconnect: ConsoleOut0.in?interface_type=ros&marshaling_type=ros:std_msgs/Float32&ros.topic=chatter&ros.node.name=ConsoleOut0, ConsoleIn0.out?interface_type=ros&marshaling_type=ros:std_msgs/Float32&ros.topic=chatter&ros.node.name=ConsoleIn0
manager.components.preactivation: ConsoleOut0, ConsoleIn0

サンプルコンポーネントの実行①

そのままこのディレクトリでコンポーネントを実行します。サンプルコンポーネントは以下にたくさん入っています。
/usr/local/share/openrtm-2.0/components/c++/examples/

$ /usr/local/share/openrtm-2.0/components/c++/examples/ConsoleInComp

以下のような記述が出たら成功です。

Creating a component: "ConsoleIn"....succeed.
=================================================
 Component Profile
-------------------------------------------------
InstanceID:     ConsoleIn0
Implementation: ConsoleIn
Description:    Console input component
Version:        2.0.0
Maker:          AIST
Category:       example
  Other properties
implementation_id: ConsoleIn
type_name: ConsoleIn
description: Console input component

僕の場合では、ここでエラーが発生しました。 上記のインストールの最後のコマンドを実行していれば大丈夫でした。

エラー内容と解決策

/usr/local/share/openrtm-2.0/components/c++/examples/ConsoleInComp: error while loading shared libraries: libRTC.so.2.0: cannot open shared object file: No such file or directory

公式のGitHubで言及されていました。

サンプルコンポーネントの実行②

rtc.confを作成したディレクトリで以下を実行してください。

$ /usr/local/share/openrtm-2.0/components/c++/examples/ConsoleOutComp

これも、先ほど実行したコンポーネントと同じような表示が出ていれば成功です。

動作確認

①の画面

------------------------------
Please input number:

②の画面

------------------------------

のようになっていると思います。①の画面に何か数字を入れると②の画面に出てきます。
また、この時にROS関係のコマンドを打っても動作を確認することができます。

$ rosnode list
/ConsoleIn0
/ConsoleOut0
/rosout
$ rostopic list
/chatter
/rosout
/rosout_agg

以下のコマンドで、①に入力した数字を見ることができます。

$ rostopic echo /chatter

ここまでできたら、一度コンポーネントを終了してください。

RTCの要素どこいった?

OpenRTM-aistを触ったことがある方なら気付くと思うのですが、このサンプルコンポーネント、ROSで通信しているんですよね。rtc.confのおかげみたいなのですが。

rtshellでコンポーネントの様子見るか~と思ったらインストールされていない。もはやrtm-namingも実行していない。
と、いうことでOpenRTM-aist 2.0 Python版とrtshellをダウンロードします。

OpenRTM-aist 2.0 (Python版)のインストール

ダウンロード&ビルド&インストール

正直に言うとPython版の方が苦労しました。前提条件が違うのかな?

参考:公式ページ(OpenRTM2.0 Pythonのインストール)

上記ページにも書いてありますが、インストールには、以下のものが必要です。

  • Python: ビルドツールを利用するために必要
  • omniORBpy: OpenRTM-aist のビルド (IDL コンパイル) に必要

OpenRTM-aist 2.0 Python版およびrtshellは最終的にPython3で動作を確認しました。 参考ページと少しコマンドが異なるので注意してください。

まずは、omniORB関係を以下のコマンドで取得します。

$ sudo apt-get install python3-omniorb-omg omniidl-python3
$ sudo apt-get install omniorb-nameserver

次に、OpenRTM-aist本体をダウンロード&ビルド&インストールします。

$ git clone https://github.com/OpenRTM/OpenRTM-aist-Python
$ cd OpenRTM-aist-Python
$ mkdir build
$ python3 setup.py build
$ sudo python3 setup.py install

これで完了です。以下のコマンドでエラーが出なければ正常に動作しています。

$ python3 -c "import RTC"

これでrtm-namingは立ち上がるな~と思い実行してみましたが、rtshellがないのでコンポーネントの様子を把握できません。

rtm-naming自体は以下のコマンドで起動できました。Pythonのバージョンは環境によって変わるかと思います。

$  python3 /usr/local/lib/python3.6/dist-packages/OpenRTM_aist/utils/rtm-naming/rtm-naming.py

僕の場合では、ここでエラーが発生しました。 上記のインストールの最後のコマンドを実行していれば大丈夫でした。

エラー内容

Starting omniORB omniNames: LAPTOP-83EDG5N9 : 2809
Not found omniNames.

rtshellのインストール

参考:公式HP(rtshell)

以下のコマンドを実行してください。
僕は上記でPython3を使用していたのでpip3にしています。

$ pip3 install rtshell-aist
$ sudo rtshell_post_install

以下のコマンドでコマンドが見つかりませんのエラーが出なければ大丈夫です。

$ rtfind localhost

全体の動作確認

サンプルコンポーネントを使用して、全体の動作確認をします。
どうやらこのrtc.confを使用したサンプルコンポーネントはROSノードとしてもRTCとしても動作しているみたいです。

roscore、ネーミングサービスの起動

$ roscore
$ python3 /usr/local/lib/python3.6/dist-packages/OpenRTM_aist/utils/rtm-naming/rtm-naming.py

コンポーネントの起動

rtc.confがあるディレクトリに移動してください。

①数字を入力して出力するコンポーネント

$ /usr/local/share/openrtm-2.0/components/c++/examples/ConsoleInComp

②数字を受け取って表示するコンポーネント

$ /usr/local/share/openrtm-2.0/components/c++/examples/ConsoleOutComp

rtshellで確認

ROS系のコマンドで確認できるのは先ほど説明しました。
rtshellで動作を確認してみましょう。
XXXXXXXXXXの部分は環境によって変わります。

$ rtfind localhost
/localhost
/localhost/XXXXXXXXXX.host_cxt
/localhost/XXXXXXXXXX.host_cxt/ConsoleIn0.rtc
/localhost/XXXXXXXXXX.host_cxt/ConsoleOut0.rtc

以下のコマンドで①のコンポーネントで入力した数字が表示されます。

$ rtprint /localhost/XXXXXXXXXX.host_cxt/ConsoleIn0.rtc:out

123と入力した場合

rtctree.rtc.RTC.TimedLong(tm=rtctree.rtc.RTC.Time(sec=0, nsec=0), data=123)

おわりに

まとめとして、

  • OpenRTM-aist 2.0をインストールしました。
  • rtshellをインストールしました。
  • この記事にあるようなrtc.confを参照させてコンポーネントを実行するとROSノードとしてもRTCとしても動作しました。

試したかったので試しました!以上

参考

その他

rtc.confについて

rtc.conf
manager.modules.load_path: /usr/local/lib/openrtm-2.0/transport/
manager.modules.preload: ROSTransport.so
manager.components.preconnect: ConsoleOut0.in?interface_type=ros&marshaling_type=ros:std_msgs/Float32&ros.topic=chatter&ros.node.name=ConsoleOut0, ConsoleIn0.out?interface_type=ros&marshaling_type=ros:std_msgs/Float32&ros.topic=chatter&ros.node.name=ConsoleIn0
manager.components.preactivation: ConsoleOut0, ConsoleIn0

以下のような意味があるそうです。(参考)

manager.modules.load_path
シリアライザーモジュール(ROSTransport.so)を置く場所を指定します。
manager.modules.preload
ROS通信のためのシリアライザーモジュールのの指定をします。Ubuntuの場合にはROSTransport.soを指定します。
manager.components.preconnect
コネクタ生成に関する設定をしています。interface_type(インターフェース型)にros、marshaling_type(マーシャリング型)に対応シリアライザの名前、ros.topic(トピック名)に適当な任意の名前を設定します。

OpenRTM-aistのシリアライザーモジュール(ROSTransport.so)が対応しているメッセージ型は以下のようになります。

シリアライザ名とROS/ROS2メッセージ型

rtc.confがない場所で起動したらどうなるか

普通のRTCとして動作する。
状態遷移もするためrtactコマンドでアクティベートをする必要がある。

バージョン 1.Xはどうやってインストールできるか

1.1系と1.2系があります。
公式サイトのダウンロードタブからWindowsだとインストーラー、Linuxだと一括インストールスクリプトをダウンロードできます!そこからのインストールは簡単です。

例:1.2.2のダウンロードページ

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2