• 如果在 Ubuntu 系统中两个设备出现两个相同的端口号解决方案


    问题描述: 

    自己的移动机器人在为激光雷达和IMU配置动态指定的端口时,发现激光雷达和深度相机配置的 idVendor 和 idProduct 相同,但是两个设备都具有不同的ttyUSB号,如下图所示

    • idVendor:代表着设备的生产商ID,由USB设备生产商向USB-IF官方来统一管理和申请。
    • idProduct:代表着该生产商生产的产品编号,同一厂商下的不同idProduct代表着该公司不同的产品系列。

     f3d91bc0cc4649d9abf7742cb066fb43.png91682c192766437691166c1a9b38c79a.png


    解决方法:

    出现此问题的原因是两个串口芯片都是CP2102……芯片ID号都一致。但是可以通过查询USB口的具体信息,发现一个地方可以区分开,那就是端口路径!!(这个端口就是我们字面的意思,不同的USB的插口!)

    1、使用如下

     使用如下的指令分别查询ttyUSB0和ttyUSB1的端口具体信息

     1)查询 USB0的具体信息,其中主要关注 ATTR{devpath} 

    1. # 查询 USB0 的信息
    2. udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)

     b5ac46903f004639a0e15692bbfd6c4f.png

     查询 USB1 的具体信息,其中主要关注 ATTR{devpath}

    1. # 查询 USB1 的信息
    2. udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB1)

     f9c26e8f0ebb4b0ea09604e5a3099a97.png

    可以看出,在Ubuntuh中可以通过 ATTR{devpath} 的不同来对两个设备进行区别。需要记住这两个端口路径号,在下面的规则设定中需要使用这个编号。

    2、修改IMU和激光雷达的端口配置规则

    1)激光雷达的规则修改:

    # 这里的 ATTRS{devpath}=="2" 对应于刚刚上面查询 ttyUSB1 的信息,因为查询时激光雷达对应 ttyUSB1 端口

    KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60",ATTRS{devpath}=="2", MODE:="0777", SYMLINK+="laser"
    

    2)IMU的规则修改:

    # 这里的 ATTRS{devpath}=="3" 对应于刚刚上面查询 ttyUSB0 的信息,因为查询时激光雷达对应 ttyUSB0 端口

    KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60",ATTRS{devpath}=="3", MODE:="0777", SYMLINK+="IMU"
    

     3、验证配置结果

    将上述的两个配置完成后,重新执行上述修改的规则,然后将Ubuntu系统重启或者重新拔插后,使用如下指令即可查询到配置结果即可看到设备分别指向其所在的ttyUSB端口。

    ll /dev/ | grep ttyUSB*

    1)把两个设备插在刚开始查询的端口,可以看到如下效果

    697963afab28416bb60f11fe665a7d7c.png

    2)我再调转下插接先后顺序,把两个设备调换接口

    7fa5ba1025524b98a943e04aa7985f9c.png

    此时便可以不管两个设备插入到主机上的先后顺序了,规则都会映射到对应的端口上。

    只是此处需要注意的是,两个设备的端口相当于刚刚在配置时已经锁定,便不能插接其他端口,插接其他端口就不能找到此设备了。

    参考博客

     【ROS学习】修改串口的别名_ros的串口号会变-CSDN博客

     

  • 相关阅读:
    备战蓝桥杯Day18 - 双链表
    剑指 Offer 19. 正则表达式匹配
    安卓玩机----解锁system分区 可读写系统分区 magisk面具模块
    Linux系统中Makefile的基本实现
    GAN生成手写数字(TensorFlow,Mnist数据集)
    Springboot操作mongodb的两种方法:MongoTemplate和MongoRepository
    没有几十年功力,写不出这一行“看似无用”的代码!!
    【VSCode】对比两个文件差异
    如何在linux定时备份opengauss数据库(linux核心至少在GLIBC_2.34及以上)
    【校招VIP】前端专业课考点之CSMA/CD协议
  • 原文地址:https://blog.csdn.net/qq_57061492/article/details/137276611