ROS 1とROS 2のブリッジ通信を行う (2)
本日は、以下のデモに従って、実際に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
Comments powered by Disqus.