ROS Group 产品服务
Product Service 开源代码库
Github 官网
Official website 技术交流
Technological exchanges 激光雷达
LIDAR ROS教程
ROS Tourials 深度学习
Deep Learning 机器视觉
Computer Vision
ubuntu中用udev规则绑定usb串口和映射别称的办法
-
1、为什么要把usb串口号映射绑定到usb口
usb转串口设备是常用的外设,用来扩展主机的串口功能。在实操过程中,一个机器人底盘往往会外接多个usb转串口设备,如果不对这些串口设备利用udev规则加以区分,则每次系统上电时这些串口设备的设备号是随机分配的。比如超声波模块的串口第一次开机分配成ttyUSB0, 自动充电模块串口则分配了ttyUSB1这个串口号,然后你重新断电开机后会发现ttyUSB1竟然被系统分配给了超生波模块的串口号,导致超生波和充电模块的ros驱动都工作异常。
解决办法就是把usb口和串口设备进行绑定,同时给这个串口设备映射一个新的名字,比如第一个usb口和超声波串口进行绑定,绑定后超声波串口映射成一个新的名字bwSensors,超生波
的ros驱动程序通过新名字bwSensors对串口进行操作,这样无论系统如何断电重启,都不会串台了。因为usb口的系统编号在关机重启后不会变化,绑定了usb口也就等价获取了静态分配的串口号。2、如何把usb串口设备绑定到usb口同时映射一个新名字
2.1确定要绑定的usb口在系统中的名字
#执行下列指令 dmesg --follow
将usb串口设备插在你要绑定的usb口上,观察上面指令的输出信息,确定系统这次分配的串口号是什么,一般是ttyUSB0、ttyUSB1之类,如下图中attached to ttyUSB1表示给新插入的设备分配了ttyUSB1这个编号。
再通过系统分配的串口号确定当前usb口的编号,下列指令输出信息中找到下图蓝色方框所在位置,红色方框内的2-2.3:1.0就是我们要获取的信息。#ttyUSB1要换成你上面实际获取的串口号 udevadm info /dev/ttyUSB1
2.2建立udev规则文件
在/etc/udev/rules.d/路径下新建95-persistent-serial.rules,如果文件之前存在,不用新建直接修改内容。
sudo nano /etc/udev/rules.d/95-persistent-serial.rules
文件内容如下
ACTION!="add", GOTO="persistent_serial_end" SUBSYSTEM!="tty", GOTO="persistent_serial_end" KERNEL!="ttyUSB[0-9]*", GOTO="persistent_serial_end" KERNELS=="2-2.3:1.0" ,SYMLINK="bwSensors" ,OWNER="xiaoqiang", MODE="0666" KERNELS=="2-2.4:1.0" ,SYMLINK="bwIMU" ,OWNER="xiaoqiang", MODE="0666" LABEL="persistent_serial_end"
KERNELS==“2-2.3:1.0” 中的"2-2.3:1.0"换成上面获取的usb口信息。
SYMLINK=“bwSensors” 中的"bwSensors"就是我们要设置的别称,你可以修改成自己想要的名字。
OWNER="xiaoqiang"中的"xiaoqiang"是系统当前用户名,要改成你自己的用户名。上面实列是把2-2.3:1.0这个usb口上的usb转串口设备绑定映射成bwSensors,把2-2.4:1.0这个usb口上的usb转串口设备绑定映射成bwIMU, 一行代表一个端口的映射,理论上几十个usb转串口设备都可以通过这种方式进行绑定区分,你只要添加对应内容就行。
Ctrl + s保存后, Ctrl + x退出。
2.3主机重启生效
重启后用ls /dev指令,一切正常的话会看到自己映射成功的设备号
ls /dev
-
上面的方法是使用udev规则来绑定USB串口和映射别称,这可以解决在多台设备同时使用USB转串口设备时,每次系统重启后串口分配不一致的问题。这样我们就可以通过固定的名字来访问对应的串口设备了。
需要注意的是,在创建udev规则文件时,要确保内容的正确性,并且在写完规则文件之后需要重启计算机以使新规则生效。另外,在编写udev规则文件时要注意权限问题,一般情况下需要使用root用户身份进行操作。