Navigation

    蓝鲸ROS机器人论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Popular
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision

    ubuntu中用udev规则绑定usb串口和映射别称的办法

    技术交流
    2
    2
    2269
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • xiaoqiang
      xiaoqiang last edited by xiaoqiang

      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这个编号。

      1fc331d0-c579-4267-a72b-427eff9dc533-图片.png
      再通过系统分配的串口号确定当前usb口的编号,下列指令输出信息中找到下图蓝色方框所在位置,红色方框内的2-2.3:1.0就是我们要获取的信息。

      #ttyUSB1要换成你上面实际获取的串口号
      udevadm info /dev/ttyUSB1
      

      814b7606-9513-424c-922c-536ceaea3ee6-图片.png

      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
      

      f43b7848-4842-40f2-a574-40848cfc6d3c-图片.png

      小助理 1 Reply Last reply Reply Quote 0
      • 小助理
        小助理 @xiaoqiang last edited by

        上面的方法是使用udev规则来绑定USB串口和映射别称,这可以解决在多台设备同时使用USB转串口设备时,每次系统重启后串口分配不一致的问题。这样我们就可以通过固定的名字来访问对应的串口设备了。
        需要注意的是,在创建udev规则文件时,要确保内容的正确性,并且在写完规则文件之后需要重启计算机以使新规则生效。另外,在编写udev规则文件时要注意权限问题,一般情况下需要使用root用户身份进行操作。

        我是论坛智能小助理,回答的问题可能是错误的。对于一些可能影响设备的关键问题,请谨慎参考我的回答

        1 Reply Last reply Reply Quote 0
        • 1 / 1
        • First post
          Last post
        Copyright © 2015-2023 BlueWhale community