Ubuntu 下用 udev 固定 PX4 飞控 USB 设备名 1. 为什么要固定设备名PX4 飞控通过 Type-C 连接电脑后Ubuntu 一般会识别成/dev/ttyACM0但是如果拔插顺序变化或者电脑上接了多个 USB 设备它可能变成/dev/ttyACM1 /dev/ttyACM2这样 MAVROS 的启动命令就容易失效。所以可以用udev规则把飞控固定成一个自定义名字例如/dev/px4_fcu以后 MAVROS 里就固定使用serial:///dev/px4_fcu:576002. 建议统一创建一个规则文件我建议机器人相关设备统一写到一个文件里sudo nano /etc/udev/rules.d/99-robot-devices.rules这个文件名可以自己取只要放在/etc/udev/rules.d/并且以.rules结尾即可。例如下面这些名字都可以99-robot-devices.rules 99-px4.rules 99-usb-devices.rules如果以后要添加相机、雷达、其他串口设备也可以继续往99-robot-devices.rules里面加规则不一定每个设备都新建一个文件。3. 查询 PX4 当前设备插上 PX4 飞控 Type-C 线后执行ls /dev/ttyACM*一般会看到/dev/ttyACM0然后查询这个设备的 USB 物理路径udevadm info -q property -n /dev/ttyACM0 | grep ID_PATH会得到类似ID_PATHpci-0000:00:14.0-usb-0:3:1.0复制ID_PATH后面的内容例如pci-0000:00:14.0-usb-0:3:1.04. 编写 udev 规则打开统一规则文件sudo nano /etc/udev/rules.d/99-robot-devices.rules添加下面这一行SUBSYSTEMtty, KERNELttyACM*, ENV{ID_PATH}pci-0000:00:14.0-usb-0:3:1.0, SYMLINKpx4_fcu, GROUPdialout, MODE0660注意这里的pci-0000:00:14.0-usb-0:3:1.0要替换成自己电脑实际查到的ID_PATH。如果你想把设备名改成别的例如/dev/fcu那就把SYMLINKpx4_fcu改成SYMLINKfcu5. 添加串口权限执行sudo usermod -aG dialout $USER然后重启电脑或者退出当前用户重新登录。6. 重新加载 udev 规则执行sudo udevadm control --reload-rules sudo udevadm trigger然后拔掉飞控 Type-C 线再重新插上。7. 检查是否绑定成功执行ls -l /dev/px4_fcu如果成功会看到类似/dev/px4_fcu - ttyACM0这说明/dev/px4_fcu已经指向了当前 PX4 飞控设备。8. 在 MAVROS 中使用固定设备名原来可能使用serial:///dev/ttyACM0:57600现在改成serial:///dev/px4_fcu:57600例如ros2 run mavros mavros_node --ros-args \ -p fcu_url:serial:///dev/px4_fcu:57600如果是 launch 文件也可以写成default_valueserial:///dev/px4_fcu:576009. 如果以后添加其他设备可以继续打开同一个文件sudo nano /etc/udev/rules.d/99-robot-devices.rules然后在下面继续添加新规则。例如另一个串口设备可以写成SUBSYSTEMtty, KERNELttyUSB*, ENV{ID_PATH}另一个设备的ID_PATH, SYMLINKmy_serial, GROUPdialout, MODE0660如果是相机/dev/video0可以先查询udevadm info -q property -n /dev/video0 | grep ID_PATH然后规则大致类似SUBSYSTEMvideo4linux, KERNELvideo*, ENV{ID_PATH}相机的ID_PATH, SYMLINKcamera_front, MODE066610. 总结最终 MAVROS 使用serial:///dev/px4_fcu:57600不再使用不稳定的/dev/ttyACM0只要 PX4 飞控插在同一个 USB 口上设备名就会固定为/dev/px4_fcu