鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    wsl2下的通信如何实现

    已定时 已固定 已锁定 已移动
    FishBot二驱机器人
    wsl2 通信
    7
    14
    8.3k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 9
      木吉 @948947792
      最后由 编辑

      图片如下
      11111.png
      ros2 topic list 的结果
      22222.png

      9 1 条回复 最后回复 回复 引用 0
      • 9
        木吉 @948947792
        最后由 编辑

        @948947792 主要问题就是在wsl中使用ip -4 a | grep inet看电脑的ip地址时,输出入下
        333333.png
        不知道该选择哪个地址了,然后在宿主机中使用 ipconfig得到
        4444443.png

        1 条回复 最后回复 回复 引用 0
        • 9
          木吉 @948947792
          最后由 948947792 编辑

          @948947792 现在的网络是由电脑热点实现的,因为没有路由器,想着先拿电脑热点试试,小车采用usb线与电脑连接

          1 条回复 最后回复 回复 引用 0
          • 小鱼小
            小鱼 技术大佬 @948947792
            最后由 编辑

            @948947792 热点大概率穿不透到docker内部网络,两个ip不在一个网段

            新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

            1 条回复 最后回复 回复 引用 0
            • W
              wuhanros
              最后由 编辑

              请问有解决问题吗?我也发现ros2或者ros不能收到远端topic的问题,但是如果有rosbag包在本地播放的话就没问题。

              1 1 条回复 最后回复 回复 引用 0
              • 1
                1253024365 @wuhanros
                最后由 编辑

                @wuhanros 请问有解决吗?我最近也在使用wsl2安装ubuntu22.04+ros2和小车通讯,发现wsl2的ros2无法接收到小车节点发布的内容,但是换成ubunt22.04实体机可以。

                小鱼小 1 条回复 最后回复 回复 引用 0
                • 小鱼小
                  小鱼 技术大佬 @1253024365
                  最后由 编辑

                  @1253024365 把网络结构和ip搞出来看看,另外你用docker还是手动构建的

                  新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                  1 1 条回复 最后回复 回复 引用 0
                  • 1
                    1253024365 @小鱼
                    最后由 编辑

                    @小鱼 感谢您的回复,已解决。使用wsl2时需要与主机做一个镜像模式网络才行,结合wsl2官网的指示与sudo gedit ~/.bashrc
                    添加export ROS_HOSTNAME=192.168.xx.xxx
                    export ROS_MASTER_URI=http://192.168.xx.xxx:11311的方法解决了wsl2与ubuntu实体机无法通讯的问题。

                    Y 1 条回复 最后回复 回复 引用 0
                    • Y
                      yfj @1253024365
                      最后由 编辑

                      @1253024365 您好,能详细说下解决方案吗,wsl下和ubuntu主机下都要设置吗,ROS_HOSTNAME 设置的是wsl的ip还是宿主机的ip?

                      A 1 条回复 最后回复 回复 引用 0
                      • A
                        AR @yfj
                        最后由 编辑

                        @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给出的解决方案,实测可行,如果创建文件时没找到该文件就新建一个

                        1 条回复 最后回复 回复 引用 0
                        • 第一个帖子
                          最后一个帖子
                        皖ICP备16016415号-7
                        Powered by NodeBB | 鱼香ROS