ROS2 机器人开发:解决多 USB 设备名跳变(udev 固定别名)
ROS2 机器人开发:解决多 USB 设备名跳变(udev 固定别名)
nodaoli在 ROS2 开发中,我们经常会接入多个 USB 串口设备(如激光雷达、485 转换器、STM32 控制板等)。Linux 系统默认分配的 /dev/ttyUSB0、ttyUSB1 会因为重启或插拔顺序导致名称“漂移”。
本文记录如何通过 lsusb 排查硬件并使用 udev 规则永久固定设备名称。
1. 硬件信息排查
首先,通过“排除法”确定各设备的硬件 ID。
Bash
1 | # 1. 不插设备时运行一次 |
2. 创建 udev 规则文件
利用设备的唯一硬件 ID,为它们建立“永久别名(Symlink)”。
Bash
1 | # 创建并编辑规则文件 |
在文件中写入以下内容(根据实际查到的 ID 修改):
Plaintext
1 | # 激光雷达别名:rplidar |
MODE:="0666":自动解决串口权限问题,无需sudo。SYMLINK+=:创建指向原设备的软链接。
3. 激活规则
保存退出(Ctrl+O, Enter, Ctrl+X)后,刷新系统规则:
Bash
1 | sudo udevadm control --reload-all |
4. 验证与应用
检查 /dev 目录下是否生成了我们定义的别名:
Bash
1 | ls -l /dev/rplidar /dev/tty485 |
结果: 此时你会看到 /dev/rplidar 指向了某个 ttyUSBx。
在 ROS2 中使用:
在 Launch 文件或 YAML 配置文件中,直接将端口号写死为别名即可:
Python
1 | # 示例 |
总结
通过 lsusb 获取身份信息 + udev 规则绑定,我们可以确保机器人软件系统永远通过固定的名字访问硬件,不再受插拔顺序影响。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果


