冷知识 当一台机器运行着多个WSL,上面运行着多个ROS
一直在用WSL(Windows Subsystem for Linux)来跑ROS,
WSL分为WSL1和WSL2 ,虽然微软只更新WSL2了 但是这两个各有优缺点 谁也无法取代谁
对我来说缺点主要有
WSL1:没法使用CUDA
WSL2:IP是一个虚拟IP,且每次重启都会重置
无法和Windows外部通信 USB的串口通信也好,ip端口TCP/UDP通信也好(有不少人折腾端口转发,但是我从来还没弄成功)
吃内存
为了同时享受到两者的优点,前一阵装了多个镜像 分别是不同的WSL版本 不同的Ubuntu版本 不同的ROS版本,这样也方便一些在新版本Ubuntu或者ROS上死活编译不出的包 丢去老版本编译和运行
通信也很简单,就是照着ROS多机通讯的设置弄一下 看roscore运行在哪就各自指定一下ROS_MASTER,效果拔群(电脑能负担得起开多个镜像的情况下)
但是接下来的就比较神奇,偶尔忘记用export ROS_MASTER= 还是能进行通讯
当WSL2上开着roscore,WSL1无需任何指定 就能从默认的localhost:1131里找到core
当WSL1上开着roscore,WSL2无法直接找到,需要export ROS_MASTER=本机IP
当WSL1或者WSL2上开着roscore,windows侧(通过rosbridge)直接连localhost是连不上,需要详细指定IP
WSL1和WSL2能同时开着两个roscore
感觉很合理又感觉有点不对,不过总而言之当同时开着多个WSL的时候 把roscore放在WSL2上面会方便很多

