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
![](https://assets.st-note.com/img/1705581969996-rArgR5KXaG.png)
![](https://assets.st-note.com/img/1705582044402-ulmfhuXvmG.png?width=800)
![](https://assets.st-note.com/img/1705582116420-2Rho7cvEVL.png)
![](https://assets.st-note.com/img/1705582241122-RpSsy8Pf1d.png?width=800)
![](https://assets.st-note.com/img/1705706901628-eHhLAVHS6u.png?width=800)
eth0には独自のIPアドレスが割り振られている
![](https://assets.st-note.com/img/1705707093839-FmAg4Yf0ss.png?width=800)
eth0にはホストOSと同じIPアドレスが割り振られている
![](https://assets.st-note.com/img/1705707183584-9QpZ1ZyhhG.png?width=800)
Windows Defenderファイアウォールを設定する
![](https://assets.st-note.com/img/1705582553919-srNV6mEFk2.png)
![](https://assets.st-note.com/img/1705582241122-RpSsy8Pf1d.png?width=800)
Docker向けの設定も必要?
ここを見ると、Docker用にさらにignorePortという設定が必要?
[wsl2]
networkingMode=mirrored
ignoredPorts=8888
![](https://assets.st-note.com/img/1705583045147-FBzzpqmlRe.png)
DockerDesktopを実行することで新しい設定で起動する
![](https://assets.st-note.com/img/1705583104038-NCBJZsvBIK.png?width=800)
Dockerで実行されているエージェントはどのアドレスで動いている?
![](https://assets.st-note.com/img/1705583257215-0g0Ca1cRNr.png)
なんか3つくらい出てきてる・・・
![](https://assets.st-note.com/img/1705584039370-WyrLi5BMmB.png?width=800)
このうちのどれかを使えばいいということ?
![](https://assets.st-note.com/img/1705584207964-tUQ1bYx5ka.png?width=800)
![](https://assets.st-note.com/img/1705584265413-LgG5EcH1EV.png?width=800)
![](https://assets.st-note.com/img/1705584319765-78K8xdTXhy.png?width=800)
![](https://assets.st-note.com/img/1705584347284-eWNpJHwgmS.png?width=800)
![](https://assets.st-note.com/img/1705584445314-9xi18KSqFu.png?width=800)
![](https://assets.st-note.com/img/1705584347284-eWNpJHwgmS.png?width=800)
DockerじゃなくてWSL上でエージェントを動かしてみてはどうか?
WSL上にROS2とmicro-ROSエージェントを導入する
![](https://assets.st-note.com/img/1716379852670-XFhRq2wkqS.png?width=800)
だけどerrorの行が気になる・・・
![](https://assets.st-note.com/img/1716723812967-h4eawHixVy.png)
![](https://assets.st-note.com/img/1716723892449-241gAbaGlI.png?width=800)
![](https://assets.st-note.com/img/1716723932578-5wsNmAeHDI.png?width=800)
![](https://assets.st-note.com/img/1716724042983-AtC37UstOc.png?width=800)
3936=0xF60
3952=0xF70
3968=0xF80
確かに0x10ごとにカウントアップして送ってきている
![](https://assets.st-note.com/img/1716724194658-vFSfZ0JdqL.png?width=800)
サブスクライバーが1になっていた。
まとめ
Dockerだと駄目だが、micro-ROS-agentをWSL上で直接動かせることが分かった。
エージェントでのエラーメッセージが気にはなるが、目的は達成できたと思う
この記事が気に入ったらサポートをしてみませんか?