27
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Eclipse ZenohでNAT越えROS2通信

Last updated at Posted at 2022-05-17

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

Rust環境構築
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"

また、ビルドにはClangが必要となるため、apt等でインストールしておいてください。

clang インストール
sudo apt install -y clang

zenohのgithubリポジトリから最新のReleaseのタグを指定してをソースを取得します。この際、後述のzenoh-bridge-ddsとバージョンを揃えるようにしてください。

githubからソースを取得
git clone https://github.com/eclipse-zenoh/zenoh.git -b 0.6.0-dev

ビルドには結構時間が掛かります。ゆっくりお待ちください。

ビルド
cargo build --release --all-targets

./target/release/ 以下に一通り成果物が生成されます。

Routerの起動
./target/release/zenohd

サーバの設定は以上です。なおポートは7447を通す必要があるので、適宜開けてください。

クライアント

こちらもRust環境、clangが必要です。上記と同様にインストールしてください。

githubからソースを取得
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アプリを動かします。

Talker
ros2 run domo_nodes_cpp talker

上記の設定を別PCでも行い、同様にListenerを動かします。

Listener
ros2 run domo_nodes_cpp listener

以上で本当に何の苦労もなくNAT越えROS2通信が行えてしまいます。

今回はROS2のbridgeに絞ってしまいましたが、Zenohは様々な機能を持っているようです。また、組込み向けの軽量実装もあるようです。
今後もいろいろ試してみたいと思います。

27
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?