ROS2でNAT越えするのって何かいい手段無いかなぁと探していた際に見つけたものです。
よくある*MQ系の何かと思いきや、もうちょっと融通が利いていろいろとできそうな雰囲気が伝わってきます。ROS2のPluginもあり、Rust, C, Python, Javaと言語Bindingも揃っているようです。
今回は、クラウド上にZenohのRouter(サーバ)を立てて、2PC間でROS2通信させてみます。
サーバ
zenohのインストールを行います。aptでも入るのですが、zenoh-bridge-ddsのバージョンと整合しないため、ソースからビルドしていきます。
Rustのビルド環境が必要となります。以下コマンドで入ります(Rustのインストールってこんな簡単でしたっけ・・めっちゃ楽です。参照:https://www.rust-lang.org/ja/tools/install )
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
また、ビルドにはClangが必要となるため、apt等でインストールしておいてください。
sudo apt install -y clang
zenohのgithubリポジトリから最新のReleaseのタグを指定してをソースを取得します。この際、後述のzenoh-bridge-ddsとバージョンを揃えるようにしてください。
git clone https://github.com/eclipse-zenoh/zenoh.git -b 0.6.0-dev
ビルドには結構時間が掛かります。ゆっくりお待ちください。
cargo build --release --all-targets
./target/release/ 以下に一通り成果物が生成されます。
./target/release/zenohd
サーバの設定は以上です。なおポートは7447を通す必要があるので、適宜開けてください。
クライアント
こちらもRust環境、clangが必要です。上記と同様にインストールしてください。
git clone https://github.com/eclipse-zenoh/zenoh-plugin-dds.git -b 0.6.0-dev
cargo build --release -p zenoh-bridge-dds
./target/release/zenoh-bridge-dds -e tcp/サーバのIPアドレス:7447
この状態でもう一枚ターミナルを開き、ROSアプリを動かします。
ros2 run domo_nodes_cpp talker
上記の設定を別PCでも行い、同様にListenerを動かします。
ros2 run domo_nodes_cpp listener
以上で本当に何の苦労もなくNAT越えROS2通信が行えてしまいます。
今回はROS2のbridgeに絞ってしまいましたが、Zenohは様々な機能を持っているようです。また、組込み向けの軽量実装もあるようです。
今後もいろいろ試してみたいと思います。