项目场景:
ubuntu22.04
问题描述
当你使用的传感器多了,会发现当串口插入的顺序不同,串口号会随之变化,如果每次都在程序中修改串口号又太麻烦,有没有一种好的解决方案呢?
原因分析:
因此重新给串口设置别名,本文利用串口起别名来避免这种问题!
解决方案一:
方案一我们根据这个传感器芯片的ID来固定串口号
使用下面命令查询串口号
ls /dev | grep ttyUSB
查看USB端口详细信息
lsusb
以下是我的信息
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 004: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
这个就是镭神N10激光雷达的usb信息
Bus 002 Device 004: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
创建自定义rules
sudo gedit /etc/udev/rules.d/rplidar_port.rules
写入以下内容
KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", SYMLINK+="rplidar"
对上面的规则进行分析
KERNEL==”ttyUSB*” kernel代表设备在内核的名称,ttyUSB*代表ttyUSB开头的USB端口总称
ATTRS{idVendor}==”10c4” "10c4"对应激光雷达串口模块端口信息中ID 10c4:ea60中:前的地址
ATTRS{idProduct}==”ea60” "ea60"对应激光雷达串口模块端口信息中ID 10c4:ea60中:后的地址
MODE:=”0777” MODE代表赋予串口端口的权限,"0777"是具体的权限
SYMLINK+=”rplidar” SYMLINK代表别名,"rplidar"=是具体的别名
重新插拔一下激光雷达 并且刷新一下
service udev restart
ls -l /dev/ | grep ttyUSB
可以看到 rplidar 映射到了ttyUSB0上,到此说明你配置成功了!同样你也可以给你的USB相机设置别名!
解决方案二:
问题描述:
如果说是同款型号的雷达或者是同款型号的相机,这样他们的芯片是相同的这种情况怎么解决呢?
linux设备的每个USB口的(KERNELS)是不同的且固定的,我们通过传感器接在固定USB口也可以避免串口号总是变动。
udevadm info -a -n /dev/ttyUSB0
可以看到ttyUSB0的KERNELS值是:2-2.1:1.0
sudo gedit /etc/udev/rules.d/usb.rules
写入以下内容:
这里的得参考你的usb具体信息填写
# 第一个设备
KERNEL=="ttyUSB*", KERNELS=="2-2.1:1.0", MODE:="0777", SYMLINK+="mylaser01"
# 第二个设备
KERNEL=="ttyUSB*", KERNELS=="2-2.2:1.0", MODE:="0777", SYMLINK+="mylaser02"
重新加载一下udev
sudo service udev reload
sudo service udev restart