ros2在wsl内如何把话题发布到局域网内?
·
ros2在wsl2内,如何把话题发布到局域网内?
- win11上的操作:设置wsl的镜像网络
最好用管理员权限的pwsh执行:
# 定义配置文件路径(自动获取当前用户目录)
$wslConfigPath = Join-Path $env:USERPROFILE ".wslconfig"
# 定义配置内容
$configContent = @"
[experimental]
networkingMode=mirrored
autoMemoryReclaim=gradual
dnsTunneling=true
autoProxy=true
"@
# 将配置写入文件(如果文件已存在则覆盖,编码使用 UTF8)
$configContent | Out-File -FilePath $wslConfigPath -Encoding UTF8
# 在WSL2下开启镜网络模式,ROS2的话题依然无法被同局域网内的其他设备发现和订阅,使用下面的命令开启开启入站流量即可:
Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow
# 提示写入成功并重启 WSL 使配置生效
Write-Host "✅ .wslconfig 已成功写入: $wslConfigPath" -ForegroundColor Green
Write-Host "🎉 配置已应用!下次打开 WSL 时将自动生效。" -ForegroundColor Green
- WSL2内的操作:首先把 ros2的daemon 启动起来, 放在bashrc即可,这样每次打开终端都可以维持。
cat << 'EOF' >> ~/.bashrc
# --- ROS2 & Custom Workspace (通用配置) ---
# 动态加载当前系统默认的 ROS2 版本环境
source /opt/ros/$ROS_DISTRO/setup.bash
# 启动 ROS2 守护进程,避免 WSL2 下 ros2 topic list 阻塞无响应
ros2 daemon start
# 加载自定义工作区环境(请确保路径正确)< 可选,根据自己的工作环境,适当添加>
# source /home/sincerely/ros2_px4_offboard_example_ws/install/setup.bash
alias sb='source ~/.bashrc'
EOF
- 经过上述操作即可在wsl2中实现和外部机器的话题/服务的发现/通信。
更多推荐
所有评论(0)