wsl2下的通信如何实现
-
@小鱼 谢谢大佬解答,我现在在wsl里面使用docker拉取了配置助手,并都配置好了,但是ros2 topic list里面仅仅出现了/parameter_events,/rosout这两个话题,不知道这算不算已经弄好了

-
图片如下

ros2 topic list 的结果

-
@948947792 主要问题就是在wsl中使用ip -4 a | grep inet看电脑的ip地址时,输出入下

不知道该选择哪个地址了,然后在宿主机中使用 ipconfig得到

-
@948947792 现在的网络是由电脑热点实现的,因为没有路由器,想着先拿电脑热点试试,小车采用usb线与电脑连接
-
@948947792 热点大概率穿不透到docker内部网络,两个ip不在一个网段
-
请问有解决问题吗?我也发现ros2或者ros不能收到远端topic的问题,但是如果有rosbag包在本地播放的话就没问题。
-
@wuhanros 请问有解决吗?我最近也在使用wsl2安装ubuntu22.04+ros2和小车通讯,发现wsl2的ros2无法接收到小车节点发布的内容,但是换成ubunt22.04实体机可以。
-
@1253024365 把网络结构和ip搞出来看看,另外你用docker还是手动构建的
-
@小鱼 感谢您的回复,已解决。使用wsl2时需要与主机做一个镜像模式网络才行,结合wsl2官网的指示与sudo gedit ~/.bashrc
添加export ROS_HOSTNAME=192.168.xx.xxx
export ROS_MASTER_URI=http://192.168.xx.xxx:11311的方法解决了wsl2与ubuntu实体机无法通讯的问题。 -
@1253024365 您好,能详细说下解决方案吗,wsl下和ubuntu主机下都要设置吗,ROS_HOSTNAME 设置的是wsl的ip还是宿主机的ip?
-
@yfj 为了让您的**小车(外部设备)**和 WSL 2 虚拟机处于同一个网段,您需要改变 WSL 2 的默认网络模式。
WSL 2 默认使用的是 NAT(网络地址转换)模式,它将 WSL 2 实例隐藏在一个私有虚拟网络后面。要实现外部设备(如您的小车)可以直接访问 WSL 2,您需要配置 桥接(Bridged)网络模式,也被称为 “镜像网络”(Mirrored Networking Mode)。
推荐的配置方式:启用镜像网络模式
在较新的 Windows 11 和 WSL 版本中,Microsoft 引入了名为**“镜像网络”(镜像网络模式)的功能,它通过配置 Hyper-V 虚拟交换机来模拟桥接网络,使得 WSL 2 虚拟机可以直接获得与 Windows 主机同网段**的 IP 地址。步骤 1:确保您的 WSL 版本支持
此功能通常需要较新的 Windows 和 WSL 版本(Windows 11 22H2+)。
步骤 2:编辑 .wslconfig 文件
您需要在 Windows 主机上修改或创建 %UserProfile%.wslconfig 文件。
在 Windows 命令行或 PowerShell 中运行以下命令,打开该文件进行编辑:
猛击
notepad $env:USERPROFILE.wslconfig
在文件中添加或修改以下配置:伊尼,TOML
[wsl2]
启用镜像网络模式
networkingMode=mirrored
步骤 3:重启 WSL 实例保存 文件后,您需要完全关闭并重启 WSL 实例,以应用新的网络配置:.wslconfig
在 PowerShell 或命令提示符中运行:
猛击
wsl --shutdown
然后重新启动您的 WSL 实例(例如,通过打开您的 Linux 发行版)。gemini给出的解决方案,实测可行,如果创建文件时没找到该文件就新建一个