RaspberryPi pico wでmicro-ROSを動かす(WiFi編 その2)

前回までのあらすじ

micro-ROSの転送をSerialからWi-Fiに変更して、エージェントとの接続を試みたが、picoから送信はできているものの、Docker内で動いているエージェントには届いていないようだった。
ホストOSとゲストOS、Dockerシステムなどにより生成される仮想ネットワークが複雑に絡み合っているように思える。

本日のテーマ

WSLに関する設定を行って、ホストOSとゲストOSの転送を行うことで、Docker内のエージェントにUDPパケットが届くように試みる四苦八苦する

※先に行っておきます。今日も失敗しています。💦💦💦
(2024/5/26追記) WSL上で直接エージェントを動かせばうまく行った

WSLに関するMicorsoftのページを見ると、WSL2になってNATベースのアーキテクチャになったが、最近WSLにはミラーモードなるものが追加されたようだ。ホストOSのネットワークインターフェイスをLinux側のOSにミラーリングするというもの。

自身のホームフォルダに.wslconfigというファイルを作成し、ここに以下の設定を入れておく

[wsl2]
networkingMode=mirrored
一旦WSLを終了する
一応WSLをアップデート
DockerDesktopを起動すると、自動的にWSLが起動している
変わらず・・・
mirrored設定前のifconfig結果
eth0には独自のIPアドレスが割り振られている
mirrored設定後のifconfig結果
eth0にはホストOSと同じIPアドレスが割り振られている
ホストOS側のipconfig結果

Windows Defenderファイアウォールを設定する

受信/送信ともに許可設定を追加する
やっぱり変わらず・・・

Docker向けの設定も必要?

ここを見ると、Docker用にさらにignorePortという設定が必要?

[wsl2]
networkingMode=mirrored
ignoredPorts=8888
WSLをいったんシャットダウンした後、
DockerDesktopを実行することで新しい設定で起動する
だめだ・・・

Dockerで実行されているエージェントはどのアドレスで動いている?

DockerDesktopでhostnameコマンドを実行してみる
なんか3つくらい出てきてる・・・
他のマシンから見たIPアドレスのようだ。
このうちのどれかを使えばいいということ?
片っ端からportproxyのコマンド実行したけどダメ・・・
WSLに割り当てられているアドレスはまた異なるようだ・・・
このアドレスにもportproxyやってみる・・・
あえなく惨敗・・・
これもやらないといけなかった?
やってもダメ・・・

DockerじゃなくてWSL上でエージェントを動かしてみてはどうか?

WSL上にROS2とmicro-ROSエージェントを導入する

行けた!!
だけどerrorの行が気になる・・・
別Windowでノード一覧とトピック一覧を確認
ノード情報
トピック情報
トピックをウォッチしてみる
3936=0xF60
3952=0xF70
3968=0xF80
確かに0x10ごとにカウントアップして送ってきている
この状態でトピック情報を出力すると
サブスクライバーが1になっていた。

まとめ

Dockerだと駄目だが、micro-ROS-agentをWSL上で直接動かせることが分かった。
エージェントでのエラーメッセージが気にはなるが、目的は達成できたと思う

いいなと思ったら応援しよう!