问题描述
当在Linux系统中基于ROS2进行传感器驱动开发或者使用传感器进行串口数据读取的时候,总会遇到一个问题:当只有一个传感器连接的时候,很容易找出来对应的串口号比如"/dev/ttyACM0",但是当再接入另一个传感器的时候就会出现混乱了,之前的ACM0变成了ACM1 or ACM2。那么这时每次连接传感器的时候都要在代码中修改串口的名称,这是很麻烦的事情。因此,在进行一番查找后,找到了解决问题的方法。通过linux中的udev子系统给设备设置固定名字。
实现流程
- 1. 接入传感器(这里以作者实际开发为例,AWR2944毫米波雷达与IMU两个传感器);
- 2. 查找设备的VID、PID以及serial;
- 3. 创建udev规则
- 4. 重新接入传感器
具体步骤
1.使用传感器配备的USB数据线接入
2.查找
这里打开终端使用命令:
lsusb
可以看到终端会打印出我们连接的设备信息:
其中有一个Texas Instruments的就是TI公司的AWR2944对应的信息,这里 VID=0451, PID=bef3。那么我们还差一个serial信息,下面终端使用命令:
lsusb -v -d 0451:bef3 | grep -i serial
结果如下图所示,

serial = RA290126。
3.创建udev规则
创建udev规则就可以通过终端命令:
sudo nano /etc/udev/rules.d/xxx.rules
这里xxx你可以根据传感器的名字来设置,小编这里就是用AWR2944_radar来代替。
然后就要填写内容了,大家可以根据查找的VID、PID和serial来写,这里小编给出模板:
KERNEL=="ttyACM*", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="bef3", ATTRS{serial}=="RA290126", MODE:="0666", GROUP:="dialout", SYMLINK+="AWR2944_radar"
写入上面内容后,终端执行以下:
sudo udevadm control --reload-rules
sudo udevadm trigger
最后,断开传感器,然后再接入。结果如下图,这样每次接入AWR2944后就会把串口名设置为"/dev/AWR2944_radar"了,也便于后续多传感器使用。

744

被折叠的 条评论
为什么被折叠?



