本日は、以下のデモに従って、実際にROS 1とROS 2のブリッジ通信を試していきます。

https://github.com/ros2/ros1_bridge/blob/master/README.md

ROSインストール

OSはUbuntu 16.04を用います。まずはROS 1と2をインストールしてください。

  • ROS 1インストール

ROS kineticをインストールしてください。チュートリアルのパッケージが動けばいいので、最低限のパッケージでも動くかもしれませんが、迷ったら全部入りのros-kinetic-desktop-fullが簡単です。

http://wiki.ros.org/kinetic/Installation/Ubuntu

  • ROS 2インストール

下記の「Linux Install Binaryを使う」を参照して、バイナリイメージをインストールしてください。 ブリッジ通信のパッケージもインストールされます。

http://ros.youtalk.jp/post/161037507746/ros2-install

インストールディレクトリは~/ros2_wsとします。

文字列のブリッジ通信

一番簡単な文字列メッセージをPub/Sub通信するチュートリアルのtalker/listenerをそれぞれROS 1とROS 2で実行し、ブリッジ通信させます。

はじめに、ROS 1のPublisherからROS 2のSubscriberに通信する実行方法です。 ブリッジ通信を行うdynamic_bridgeノードの実行には、ROS 1/2の両方の環境変数が必要になります。

ターミナルA(ROS 1 Master)

$ . /opt/ros/kinetic/setup.bash
$ roscore

ターミナルB(ブリッジ通信ノード)

$ . /opt/ros/kinetic/setup.bash
$ . ~/ros2_ws/install/share/ros1_bridge/local_setup.bash
$ dynamic_bridge

ターミナルC(ROS 1ノード)

$ . /opt/ros/kinetic/setup.bash
$ rosrun rospy_tutorials talker

ターミナルD(ROS 2ノード)

$ . ~/ros2_ws/install/local_setup.bash
$ listener

逆にROS 2のPublisherからROS 1のSubscriberに通信する実行方法です。まず、ターミナルC、DのプロセスをCtrl+CでKillしてください。

ターミナルD(ROS 2ノード)

$ talker

ターミナルC(ROS 1ノード)

$ rosrun rospy_tutorials listener

画像のブリッジ通信

よりサイズが大きく内容も複雑なメッセージのブリッジ通信も試すため、画像のストリーミングを実行してみましょう。 ROS 2ノードでカメラ画像をPublishし、ROS 2ノードでその画像をウィンドウに表示します。 前回と同じように、まず、ターミナルC、DのプロセスをCtrl+CでKillしてください。

ターミナルC(ROS 1ノード)

$ rqt_image_view /image

ターミナルD(ROS 2ノード)

$ cam2image

サービスのブリッジ通信

トピックのPub/Sub通信だけでなく、サービスのブリッジ通信も行うことができます。

ターミナルC(ROS 1ノード)

$ rosrun roscpp_tutorials add_two_ints_server

ターミナルD(ROS 2ノード)

$ add_two_ints_client