Jetson Xavierを使ってみる その4(ROS、Tailscaleを利用した画像データの送受信)
はじめに
今回はROSとTailscaleを利用して、インターネットを経由した画像データの送受信を試してみました。
前回の記事ではローカルネットワークで試していました。今回は自宅と大学の間で通信を行っています。ロボットの遠隔操作をするときに活用したいと思っています。
▼Jetson XavierでのROSの環境は以下の記事で構築済みです。
▼Tailscaleも以下の記事で導入済みです。
▼以前の記事はこちら
WSL2環境にTailscaleのインストール
前回の記事ではローカルネットワーク内で映像を確認できていたのですが、インターネットを経由すると確認できないことがありました。
WindowsのPCにはTailscaleをインストールしていたのですが、同じPCのWSL2の環境にはインストールしていなかったので、インストールしました。
▼TailscaleをWSL2の環境にインストールする方法は以下に書かれています。
https://tailscale.com/kb/1295/install-windows-wsl2
今回はWSL2のUbuntu 20.04の環境にTailscaleをインストールしました。
▼ROSの環境も構築済みの状態です。
インストール用のコマンドを実行するだけで済みました。
curl -fsSL https://tailscale.com/install.sh | sh▼インストール後、sudo tailscale upを実行して、アカウントでログインします。

ログイン後、tailscale ipを実行すると、TailscaleでのIPアドレスが表示されていました。
今回はROSのマスターをJetson Xavierにします。Jetson側とWSL2側の.bashrcを編集し、ROS_MASTER_URIをJetsonのTailscaleでのIPアドレス、ROS_IPをそれぞれのTailscaleでのIPアドレスに変更しました。
その後、source .bashrcを実行してからROSのコマンドを実行しました。
映像を確認する
以下のコマンドでカメラ映像をPublishできます。
rosrun usb_cam usb_cam_node _video_device:=/dev/video0 _pixel_format:=yuyv _image_width:=640 _image_height:=480 _framerate:=30自宅のJetson XavierにUSBカメラを接続し、電波時計を置いて大学からRVizで確認してみました。
▼映像を確認できました!

解像度によって送受信するデータ量が変わるので、コマンドを実行するときの解像度を変えてみました。
▼320×240の場合はこちら。特にラグなく秒針が動いているように見えます。
▼1920×1080の場合はこちら。偶に秒針が3秒ぐらい止まっていることがあります。
秒針が見づらいのですが、解像度が高いと若干ラグがあるように感じました。簡易的な確認だけ試すために行っていたのですが、この方法では部屋が暗いと時計を確認できないことに気づきました。
最後に
Tailscaleを利用して、インターネットを経由してカメラの映像を確認できました。ロボットの遠隔操作をするときに利用できそうです。
データを送受信する環境にそれぞれTailscaleを入れていないと、通信できないと思われます。以前VRゴーグルで見ようとしたときも確認できないことがあったのですが、Tailscaleが入っていなかったからではないかと考えています。
▼redditでMeta Quest 3でもTailscaleを使いたいという話がありました。試してみたいところです。
実際のデータ量や通信ラグについては数値で確認したいので、解析ツールで解析したいと考えています。Wire Sharkなどを使ってみようかなと思っています。

