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:57600
2. 建议统一创建一个规则文件
我建议机器人相关设备统一写到一个文件里:
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_PATH=pci-0000:00:14.0-usb-0:3:1.0
复制 ID_PATH= 后面的内容,例如:
pci-0000:00:14.0-usb-0:3:1.0
4. 编写 udev 规则
打开统一规则文件:
sudo nano /etc/udev/rules.d/99-robot-devices.rules
添加下面这一行:
SUBSYSTEM=="tty", KERNEL=="ttyACM*", ENV{ID_PATH}=="pci-0000:00:14.0-usb-0:3:1.0", SYMLINK+="px4_fcu", GROUP="dialout", MODE="0660"
注意:这里的:
pci-0000:00:14.0-usb-0:3:1.0
要替换成自己电脑实际查到的 ID_PATH。
如果你想把设备名改成别的,例如:
/dev/fcu
那就把:
SYMLINK+="px4_fcu"
改成:
SYMLINK+="fcu"
5. 添加串口权限
执行:
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_value='serial:///dev/px4_fcu:57600'
9. 如果以后添加其他设备
可以继续打开同一个文件:
sudo nano /etc/udev/rules.d/99-robot-devices.rules
然后在下面继续添加新规则。
例如另一个串口设备可以写成:
SUBSYSTEM=="tty", KERNEL=="ttyUSB*", ENV{ID_PATH}=="另一个设备的ID_PATH", SYMLINK+="my_serial", GROUP="dialout", MODE="0660"
如果是相机 /dev/video0,可以先查询:
udevadm info -q property -n /dev/video0 | grep ID_PATH
然后规则大致类似:
SUBSYSTEM=="video4linux", KERNEL=="video*", ENV{ID_PATH}=="相机的ID_PATH", SYMLINK+="camera_front", MODE="0666"
10. 总结
最终 MAVROS 使用:
serial:///dev/px4_fcu:57600
不再使用不稳定的:
/dev/ttyACM0
只要 PX4 飞控插在同一个 USB 口上,设备名就会固定为:
/dev/px4_fcu
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)