适用场景:Ubuntu、ROS 2、机器人开发、工控机、双网卡、静态 IP 配置

在机器人开发过程中,我们经常会遇到这样的网络需求:

  • 无线网卡(WiFi):连接实验室或公司的无线网络,与上位机、大模型服务或局域网设备通信。

  • 有线网卡(Ethernet):连接机器人底盘、运动控制器或下位机,进行实时控制。

看似简单,但真正配置时却容易遇到各种问题,例如:

  • 网卡名称为什么不是 wlan0

  • DHCP 自动分配了错误的 IP。

  • /23 子网掩码到底是什么意思?

  • 修改 WiFi 后,有线网络还能正常通信吗?

本文将结合一次真实的配置过程,详细介绍如何在 Ubuntu 中使用 NetworkManager(nmcli) 配置 WiFi 静态 IP,同时保证 有线网络正常连接机器人下位机


一、需求背景

本次网络拓扑如下:

                 WiFi
           192.168.17.3/23
                  │
                  │
        ┌───────────────────┐
        │   无线路由器       │
        │ 192.168.16.1       │
        └───────────────────┘
                  │
──────────────────────────────────
        Ubuntu 工控机
──────────────────────────────────
                  │
          Ethernet
        192.168.26.12/24
                  │
          机器人下位机
        192.168.26.1

目标如下:

网络 配置
WiFi 固定 IP:192.168.17.3/23
网关 192.168.16.1
有线网 保持 192.168.26.12/24 不变
下位机 192.168.26.1 正常通信

也就是说:

  • WiFi 用于访问局域网。

  • 有线网专门用于机器人通信。

  • 两个网络互不影响。


二、踩坑记录

真正配置时,遇到了几个比较典型的问题。

坑一:网卡名称为什么和教程不一样?

很多教程都是:

wlan0

而我的电脑显示的是:

wlo1

甚至还能看到:

altname wlp0s20f3

刚开始还以为系统识别错了。

其实并不是。

这是 Ubuntu 新版本采用的 Predictable Network Interface Names(可预测网络接口命名)

也就是说:

  • wlan0

  • wlo1

  • wlp0s20f3

本质上都可能表示同一块无线网卡,只是命名规则不同。

因此,不要照着教程死敲网卡名称,而应该先查看自己的设备:

ip addr show

找到真正的无线网卡名称即可。


坑二:DHCP 获取到了错误的 IP

连接 WiFi 后:

192.168.16.215

这是 DHCP 自动分配的地址。

但是设备要求固定使用:

192.168.17.3

因此必须关闭 DHCP,改为静态 IP。


坑三:一直误解了 /23 子网掩码

这是本次配置中最容易忽略的问题。

很多人看到:

192.168.17.3/23

第一反应会认为:

网关是不是也应该是 192.168.17.x?

其实不是。

/23 实际表示什么?

CIDR 表示法中的:

/23

对应子网掩码:

255.255.254.0

它覆盖两个连续的 C 类网段。

也就是说:

192.168.16.0/23

包含:

192.168.16.1
~
192.168.16.255

以及

192.168.17.1
~
192.168.17.255

因此:

IP:
192.168.17.3

网关:
192.168.16.1

完全属于同一个网络。

理解这一点后,很多网络配置问题都会迎刃而解。


三、开始正式配置

1. 查看当前网络状态

首先查看系统中的网络接口:

ip addr show

查看当前可连接的 WiFi:

nmcli device wifi list

如果没有扫描到目标无线网络,可以重新扫描:

sudo nmcli device wifi rescan

查看当前已经建立的连接:

nmcli connection show --active

这一步主要是确认:

  • 当前连接的是哪个 WiFi

  • NetworkManager 创建的连接名称是什么

后续修改静态 IP 都需要使用该连接名称。


2. 连接目标 WiFi

如果尚未连接无线网络:

sudo nmcli device wifi connect "RXJQR" password "rxjqrshyxgs" ifname wlo1

连接成功后,再继续配置静态 IP。


3. 修改为静态 IP

这是整个配置过程中最关键的一步。

sudo nmcli connection modify "RXJQR" \
    ipv4.method manual \
    ipv4.addresses 192.168.17.3/23 \
    ipv4.gateway 192.168.16.1 \
    ipv4.dns 192.168.16.1,8.8.8.8

下面分别解释每个参数:

ipv4.method manual

关闭 DHCP。

告诉 NetworkManager:

不再自动获取 IP,由用户手动指定。


ipv4.addresses

指定固定 IP:

192.168.17.3/23

ipv4.gateway

指定默认网关:

192.168.16.1

虽然网关属于 16 网段,但由于 /23 覆盖了 16 和 17 两个网段,因此完全合法。


ipv4.dns

指定 DNS:

192.168.16.1

同时增加公共 DNS:

8.8.8.8

防止部分域名解析失败。


四、让配置立即生效

修改完成后,需要重新启动网络连接:

sudo nmcli connection down "RXJQR"
sudo nmcli connection up "RXJQR"

无需重启电脑。


五、验证配置是否成功

首先确认 IP:

ip addr show wlo1

应看到:

inet 192.168.17.3/23

然后测试网关:

ping 192.168.16.1

如果能够正常收到回复,说明 WiFi 网络已经配置成功。

最后确认机器人网络没有受到影响:

ping 192.168.26.1

如果能够正常通信,说明双网卡已经可以同时工作。


六、最终配置结果

项目 配置 状态
WiFi IP 192.168.17.3/23
网关 192.168.16.1
DNS 192.168.16.1、8.8.8.8
有线 IP 192.168.26.12/24 ✅ 保持不变
下位机通信 192.168.26.1 ✅ 正常

七、总结

这次配置虽然最终只用了几条 nmcli 命令,但真正花时间的是理解网络原理,而不是输入命令。

整个排查过程中,有三个经验值得总结:

  1. 不要照搬教程中的网卡名称。 不同 Ubuntu 版本的命名方式不同,先通过 ip addr show 确认自己的无线网卡。

  2. 理解子网掩码比记命令更重要。 /23 并不是只包含 192.168.17.x,而是覆盖 192.168.16.x192.168.17.x 两个网段,因此 192.168.17.3192.168.16.1 可以正常通信。

  3. 双网卡可以长期共存。 WiFi 用于访问局域网和互联网,有线网用于机器人控制,只要地址规划合理,二者不会互相影响。

对于机器人开发而言,网络配置几乎是所有调试工作的基础。掌握 nmcli 的使用方法以及子网划分的基本原理,能够帮助我们在部署 ROS 2、连接底盘控制器、调试传感器时少走很多弯路。

如果你正在搭建机器人开发环境,希望这篇文章能为你提供一些参考,也欢迎交流更多关于 Ubuntu、ROS 2 和机器人网络配置的实践经验。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐