RoboTry

ROSを使ってロボットを動かすぞ

ROS2 Tutorialsをやってみた ~Openspliceのインストール~

今回は以下を実施します。

  • ROS 2 Tutorials (気になるところをメモします)
    • Working with multiple RMW implementations
  • Opensplice のインストール
    • rmw_opensplice_cppでTalker, Listenerを起動した (ただし、エラー出力あり)
    • 起動中のノードがどのRMWを使っているのかわからない

※とりあえず動いた程度の記事です

前回までのあらすじ

前回はTutorialsを少し進めた後、Launchファイルを作成しました。

robotry.hatenablog.com

ROS 2 Tutorials

このページを実施します。

Tutorials · ros2/ros2 Wiki · GitHub

Working with multiple RMW implementations

Default RMW implementation

  • 複数のRMWがインストールされてるときアルファベット順にRMWが選択される
    • rmw_opensplice_cpprmw_connext_cppがインストールされてたらrmw_connext_cppがデフォルトになる
    • rmw_fastrtps_cppがインストールされてたら、これがデフォルトになる

Specifying RMW implementations

  • 環境変数RMW_IMPLEMENTATIONをセットすることで、RMWを選択できる

Connextをインストールしてない状態で試してみます

$ RMW_IMPLEMENTATION=rmw_connext_cpp ros2 run demo_nodes_cpp talker

[ERROR] [rcl]: Error getting RMW implementation identifier / RMW implementation not installed (expected identifier of 'rmw_connext_cpp'), exiting with 1.

エラーが出ます。デフォルトのFast RTPSをセットしてみると、問題なく起動します。

$ RMW_IMPLEMENTATION=rmw_fastrtps_cpp ros2 run demo_nodes_cpp talker

[INFO] [talker]: Publishing: 'Hello World: 1'
[INFO] [talker]: Publishing: 'Hello World: 2'
[INFO] [talker]: Publishing: 'Hello World: 3'
~~~以下略~~~

Adding RMW implementations to your workspace

Openspliceのインストール

Fast RTPS以外のRMWをインストールします。

上に記載したDDS and ROS middleware implementationsを読めば、 どんなRMWが使えるかが分かります。

ここでは、openspliceをインストールします。

※RTI Connextはライセンスが必要なので断念

インストール方法はここに記載されてます。

Linux Development Setup · ros2/ros2 Wiki · GitHub

# パッケージのインストール
$ sudo apt install libopensplice67  # from repo.ros2.org

# 設定ファイルの場所を.zshrc(.bashrc)に追加
$ echo export OSPL_URI=file:///usr/etc/opensplice/config/ospl.xml >> ~/.zshrc

# ワークスペースのリビルド
$ cd ~/ros2_ws/
$ colcon build --symlink-install

# Talkerの実行
$ . ~/ros2_ws/install/setup.zsh
# OSPL_URIが上書きされてるよって警告が出る
#(どっちの設定ファイルでも動いたので気にしない)
[opensplice_cmake_module] Warning: OSPL_URI was already set to [[file:///usr/etc/opensplice/config/ospl.xml]]. This will not override it to the ROS default [[file:///home/******/ros2_ws/install/opensplice_cmake_module/share/opensplice_cmake_module/config/ros_ospl.xml]]. Please make sure this is the config that you want.


$ RMW_IMPLEMENTATION=rmw_opensplice_cpp ros2 run demo_nodes_cpp talker
========================================================================================
Report      : WARNING
Date        : Tue Sep 11 20:26:16 JST 2018
Description : malformed packet received from vendor 1.15 state parse:heartbeat <52545053 0201010f 070b0f01 0000542e 00000000 0e010c00 203e452c 000001de @0x24 07011c00 04370000 03010000 00000000 02000000 00000000 00000000 1d000000> (note: maybe partially bswap'd) {{7,1,28},3704,103,2,0}

Node        : (ここにhostnameが表示される)
Process     : talker <30327>
Thread      : recv 7f4bd9ecc700
Internals   : 6.7.180404OSS///ddsi2/q_receive.c/2939/0/1536665176.514459602/0
========================================================================================
Report      : WARNING
Date        : Tue Sep 11 20:26:16 JST 2018
Description : malformed packet received from vendor 1.15 state parse:heartbeat <52545053 0201010f 070b0f01 0000542e 00000000 0e010c00 203e452c 000001de @0x24 07011c00 04370000 03010000 00000000 02000000 00000000 00000000 1d000000> (note: maybe partially bswap'd) {{7,1,28},3704,103,2,0}

Node        :  (ここにhostnameが表示される)
Process     : talker <30327>
Thread      : recv 7f4bd9ecc700
Internals   : 6.7.180404OSS///ddsi2/q_receive.c/2939/0/1536665176.514579323/0
[INFO] [talker]: Publishing: 'Hello World: 1'
[INFO] [talker]: Publishing: 'Hello World: 2'
[INFO] [talker]: Publishing: 'Hello World: 3'
~~~省略~~~


# 別のターミナルでListenerの実行
$ . ~/ros2_ws/install/setup.zsh
$ RMW_IMPLEMENTATION=rmw_opensplice_cpp ros2 run demo_nodes_py listener
~~~省略~~~
[INFO] [listener]: I heard: [Hello World: 9]
[INFO] [listener]: I heard: [Hello World: 10]
[INFO] [listener]: I heard: [Hello World: 11]

Talkerを起動したときに警告が出ましたが、その後通信できています。

試しにTalkerをFast RTPSで、ListenerをOpenspliceで起動してみる

$  RMW_IMPLEMENTATION=rmw_fastrtps_cpp ros2 run demo_nodes_cpp talker 
[INFO] [talker]: Publishing: 'Hello World: 1'
[INFO] [talker]: Publishing: 'Hello World: 2'
[INFO] [talker]: Publishing: 'Hello World: 3'


# 別のターミナルで
$  RMW_IMPLEMENTATION=rmw_opensplice_cpp ros2 run demo_nodes_py listener
========================================================================================
Report      : WARNING
~~~省略~~~
[INFO] [listener]: I heard: [Hello World: 11]
[INFO] [listener]: I heard: [Hello World: 12]
[INFO] [listener]: I heard: [Hello World: 13]

先程と同じエラーが出ましたが、通信できたように見えます。

起動中のノードがどのRMWで動いているのか、確認したいですね・・・ 

Fast RTPS以外のRMWが使いたくなったときに調べてみます。

次のステップ

次回はROS 2 TutorialsのComposing multiple nodes in a single processからやっていきます。