ROS2 Tutorialsをやってみた ~Openspliceのインストール~
今回は以下を実施します。
- ROS 2 Tutorials (気になるところをメモします)
- Working with multiple RMW implementations
- Opensplice のインストール
- rmw_opensplice_cppでTalker, Listenerを起動した (ただし、エラー出力あり)
- 起動中のノードがどのRMWを使っているのかわからない
※とりあえず動いた程度の記事です
前回までのあらすじ
前回はTutorialsを少し進めた後、Launchファイルを作成しました。
ROS 2 Tutorials
このページを実施します。
Tutorials · ros2/ros2 Wiki · GitHub
Working with multiple RMW implementations
- 先にここを読むべし(ROS2を始めたときに読んでます。)
- DDS and ROS middleware implementations · ros2/ros2 Wiki · GitHub
- RMWはROS Middleware interface の略
Default RMW implementation
- 複数のRMWがインストールされてるときアルファベット順にRMWが選択される
rmw_opensplice_cpp
とrmw_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
- 別のRMWをインストールするには、ワークスペースのリビルドが必要
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からやっていきます。