WSL / 树莓派 Ubuntu 网络信息查看与 ROS2 分布式通信检查笔记
这份笔记用于记录:
如何在 WSL Ubuntu 和树莓派 Ubuntu 中查看 IP、网段、网关、网卡,以及之后如何检查两端是否可以用于 ROS2 分布式通信。
1. 常用命令
以后主要记住这两个命令:
ip -br addr
ip route也可以使用完整形式:
ip addr
ip route其中:
ip -br addr:简洁查看网卡状态和 IP 地址ip addr:详细查看网卡信息ip route:查看默认网关和路由信息
2. 查看 WSL 的 IP 和网卡
例如你之前执行 ip addr 后看到:
7: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
inet 192.168.154.239/24 brd 192.168.154.255 scope global noprefixroute eth4重点看这一行:
inet 192.168.154.239/24 brd 192.168.154.255 ... eth4可以得到:
| 信息 | 结果 |
|---|---|
| WSL IP | 192.168.154.239 |
| 子网前缀 | /24 |
| 广播地址 | 192.168.154.255 |
| 网卡名 | eth4 |
解释:
inet:IPv4 地址
192.168.154.239:当前 WSL 的 IP 地址
/24:子网前缀,表示网段范围
brd 192.168.154.255:广播地址
eth4:这个 IP 所在的网卡3. 怎么判断哪个网卡正在使用?
看网卡后面有没有这些标志:
UP
LOWER_UP例如:
eth4: <BROADCAST,MULTICAST,UP,LOWER_UP>说明 eth4 是正在工作的网卡。
而像下面这种:
eth0: <BROADCAST,MULTICAST> ... state DOWN
eth1: <BROADCAST,MULTICAST> ... state DOWN说明这些网卡目前没有启用,不用管。
简单判断:
有 UP、LOWER_UP,并且下面有 inet IP 的网卡,就是当前主要使用的网卡。4. 查看网关
执行:
ip route例如你之前看到:
default via 192.168.154.114 dev eth4 proto kernel metric 35
192.168.154.0/24 dev eth4 proto kernel scope link metric 291
192.168.154.114 dev eth4 proto kernel scope link metric 35重点看第一行:
default via 192.168.154.114 dev eth4含义:
| 字段 | 含义 |
|---|---|
default | 默认路由,访问外网时默认走这里 |
via 192.168.154.114 | 默认网关 |
dev eth4 | 通过 eth4 这个网卡出去 |
所以可以得到:
网关:192.168.154.114
默认网卡:eth45. 查看网段
你之前的 WSL IP 是:
192.168.154.239/24其中 /24 表示子网掩码是:
255.255.255.0所以网段是:
192.168.154.0/24这个网段中:
网络地址:192.168.154.0
可用地址:192.168.154.1 ~ 192.168.154.254
广播地址:192.168.154.255所以你当前的信息可以总结为:
| 项目 | 内容 |
|---|---|
| WSL IP | 192.168.154.239 |
| 网段 | 192.168.154.0/24 |
| 网关 | 192.168.154.114 |
| 网卡 | eth4 |
6. 为什么不能 ping 192.168.154.0?
因为:
192.168.154.0是网络地址,代表整个网段,不是一台具体设备。
所以不要用:
ping 192.168.154.07. 为什么之前 ping 192.168.154.1 失败?
很多教程中网关是:
192.168.1.1
192.168.0.1
192.168.31.1但你的实际网关不是 .1,而是:
192.168.154.114所以应该 ping:
ping -c 10 192.168.154.114而不是:
ping -c 10 192.168.154.18. 当前网络检查结果
你已经测试过:
ping -c 10 192.168.154.114
ping -c 5 8.8.8.8
ping -c 5 baidu.com
sudo apt update结果:
| 测试项目 | 结果 | 说明 |
|---|---|---|
ping 网关 192.168.154.114 | 成功,0% 丢包 | 局域网网关正常 |
ping 8.8.8.8 | 成功,0% 丢包 | 外网 IP 访问正常 |
ping baidu.com | 成功,0% 丢包 | DNS 域名解析正常 |
sudo apt update | 成功 | apt 软件源访问正常 |
结论:
WSL 的 mirrored 网络模式目前工作正常,不需要改回 NAT。9. WSL mirrored 模式当前状态
你现在的状态可以理解为:
WSL IP:192.168.154.239
网段:192.168.154.0/24
网关:192.168.154.114
网卡:eth4
网络模式:mirrored相比默认 NAT 模式:
默认 NAT 模式:常见 IP 是 172.xx.xx.xx
mirrored 模式:更接近真实局域网设备,更适合 ROS2 分布式通信10. 树莓派到了之后怎么检查?
树莓派 Ubuntu 上也执行:
ip -br addr
ip route假设树莓派显示:
wlan0 UP 192.168.154.88/24
default via 192.168.154.114 dev wlan0那么可以得到:
| 项目 | 内容 |
|---|---|
| 树莓派 IP | 192.168.154.88 |
| 树莓派网卡 | wlan0 |
| 树莓派网关 | 192.168.154.114 |
| 树莓派网段 | 192.168.154.0/24 |
如果 WSL 是:
192.168.154.239/24树莓派是:
192.168.154.88/24说明它们都在:
192.168.154.0/24也就是同一个局域网。
11. 两端互相 ping
WSL 里 ping 树莓派:
ping 192.168.154.88树莓派里 ping WSL:
ping 192.168.154.239判断:
两边都能 ping 通:网络基本没问题,可以继续测试 ROS2。
一边能 ping 通,另一边不行:可能是防火墙或网络隔离问题。
两边都 ping 不通:可能不在同一个局域网,或者网络被隔离。12. ROS2 分布式通信环境变量
WSL 和树莓派两端建议设置一致:
export ROS_DOMAIN_ID=30
export ROS_LOCALHOST_ONLY=0
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp可以写入 ~/.bashrc:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
echo "export ROS_DOMAIN_ID=30" >> ~/.bashrc
echo "export ROS_LOCALHOST_ONLY=0" >> ~/.bashrc
echo "export RMW_IMPLEMENTATION=rmw_fastrtps_cpp" >> ~/.bashrc
source ~/.bashrc注意:
WSL 和树莓派的 ROS_DOMAIN_ID 必须一致。
ROS_LOCALHOST_ONLY 不能是 1,否则只能本机通信。检查命令:
echo $ROS_DOMAIN_ID
echo $ROS_LOCALHOST_ONLY
echo $RMW_IMPLEMENTATION13. ROS2 本机测试
在 WSL 中打开第一个终端:
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp talker再打开第二个终端:
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp listener如果能看到类似:
I heard: [Hello World: 1]
I heard: [Hello World: 2]说明 ROS2 本机通信正常。
14. ROS2 跨设备测试
树莓派上运行发布者:
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp talkerWSL 上运行订阅者:
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp listener如果 WSL 能收到:
I heard: [Hello World: 1]
I heard: [Hello World: 2]说明树莓派到 WSL 的 ROS2 topic 通信成功。
然后反过来测试:
WSL 上运行:
ros2 run demo_nodes_cpp talker树莓派上运行:
ros2 run demo_nodes_cpp listener这样可以确认双向通信。
15. 以后换网络时的检查流程
每次换 WiFi、换路由器、换学校网络,都按这个流程检查:
第一步:查看 WSL 网络
ip -br addr
ip route记录:
WSL IP:
WSL 网卡:
WSL 网关:
WSL 网段:第二步:查看树莓派网络
ip -br addr
ip route记录:
树莓派 IP:
树莓派网卡:
树莓派网关:
树莓派网段:第三步:判断是不是同一个网段
例如:
WSL:192.168.154.239/24
树莓派:192.168.154.88/24都是:
192.168.154.0/24说明在同一个网段。
如果是:
WSL:192.168.154.239/24
树莓派:192.168.1.88/24那就不是同一个网段,可能无法直接发现 ROS2 节点。
第四步:互相 ping
WSL ping 树莓派:
ping 树莓派IP树莓派 ping WSL:
ping WSL_IP第五步:测试 ROS2 talker/listener
一端:
ros2 run demo_nodes_cpp talker另一端:
ros2 run demo_nodes_cpp listener16. 最简记忆版
以后只记这几条:
ip -br addr
ip route
ping 对方IP
echo $ROS_DOMAIN_ID
echo $ROS_LOCALHOST_ONLY
ros2 run demo_nodes_cpp talker
ros2 run demo_nodes_cpp listener判断逻辑:
1. ip -br addr 看 IP 和网卡
2. ip route 看网关
3. 两端 IP 是否在同一网段
4. 两端是否能互相 ping
5. ROS_DOMAIN_ID 是否一致
6. ROS_LOCALHOST_ONLY 是否为 0
7. talker/listener 是否能通信17. 当前你的记录
WSL IP:192.168.154.239
网段:192.168.154.0/24
网关:192.168.154.114
网卡:eth4
网络模式:mirrored目前网络测试结果:
网关 ping 通
外网 IP ping 通
域名 ping 通
apt update 正常结论:
当前 WSL 网络正常,可以保留 mirrored 模式,等待树莓派到货后继续测试跨设备 ROS2 通信。ssh gyh@192.168.3.211
ip -br addr
hostname -I