问题描述:
在树莓派上接入了GPS、IMU等设备后,ROS节点需要访问这些设备所连接的USB端口。然而,当设备插入不同的USB端口时,设备的端口名称(如ttyUSB0或ttyUSB1)可能会发生变化,导致每次更换端口后都需要修改程序中的端口名称。这种手动更改既麻烦又容易出错。
为了解决这个问题,可以通过设置Udev规则为这些设备分配固定的设备名称。这样,无论设备连接到哪个USB端口,树莓派都会为它们分配一个固定的名称。例如,无论GPS设备连接到ttyUSB0还是ttyUSB1,系统都会自动将其命名为USB_GPS。这样,程序中只需使用这个固定的设备名称,无需每次更换端口后修改程序。
1、获取设备信息
插入你的 USB 设备,然后使用以下命令获取设备idVendor,idProduct信息
udevadm info -a -n /dev/ttyUSB0
这个命令会显示该设备的所有属性。你需要找到自己设备idVendor
、idProduct属性,如果两个设备连上树莓派后,idVendor
、idProduct都相同的话,自己可以加个ATTRS{属性}不同的条件,格式一样。
注意:他输出的可能会有多个idVendor,idProduct这些信息,一般是第一个,自己可以看下product,driver是不是自己设备的相关信息,选一个自己觉得最像的,要是不确定就一个一个试呗。
2、创建 udev 规则文件
在 /etc/udev/rules.d/ 目录下创建一个新的 udev 规则文件,例如 99-usb-serial.rules:
sudo nano /etc/udev/rules.d/99-usb-serial.rules
然后在里面写入下面的指令,idVendor,idProduct换成自己设备信息,SYMLINK是你想给这个设备连接端口的命名
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="wit_imu_usb"
写完之后,ctr+X,然后Y保存,回车退出。
3、应用 udev 规则
sudo udevadm control --reload-rules
sudo udevadm trigger
4、检查设备
拔掉并重新插入你的 USB 设备,然后使用以下命令检查是否成功创建了符号链接
ls -l /dev/wit_imu_usb
然后,你IMU随便接哪个端口,树莓派都会自动给他连接的端口命名为wit_imu_usb了。