【ROS小车7】_ROS主控与STM32主控通信的设置方法

一、背景资料

  • ROS 主控的 USB 接口连接 STM32 的 microUSB 接口,但是 STM32 上的microUSB 并非真正的 USB,而是一个 USB 转串口芯片。
  • 面腾讯的机器人部门 Robotics X 的时候曾被问 ROS 主控是如何与 STM32 通信的,当时没实践过,没答上来,这里要好好做个记录。
  • 笔者 STM32 主控板上的 USB 转串口芯片使用的是 CP2102。常见的 USB 转串口芯片还有 CH340,笔者没验证过 CH340,但道理应该是一样的。

二、更改 CP2102 的 serial

原因:
① 有两个串口,一个串口用于妙算2c 与 stm32 通信,另一个用于激光雷达和妙算2c 通信。CP2102 芯片默认的 serial 是 0001。
② 笔者是通过编写 Linux 脚本,以 serial 来区别两个 USB 串口设备并固定设备名的。

方法:
需使用 Windows 下的软件CP21xx Customization Utility.exe 来修改 CP2102 芯片的 serial。
① 首先在 Windows 双击安装 CP2102 驱动(不然下一步 ② 不识别)
② 将串口连接到 Windows 电脑的 USB 接口
③ 打开软件,点击 Refresh,得到如下图(下图是 stm32 控制板上的串口)
【ROS小车7】_ROS主控与STM32主控通信的设置方法_第1张图片

约定:激光雷达的 serial 是0001,stm32 通信的 serial 设置为0002。

三、ROS 主控中创建设备别名

原因:
ROS 主控通过串口收发数据时需要开发人员给 ROS 程序提供串口的设备名,以便程序能够使用该串口。但是串口设备名会因插拔顺序而改变,具体改变规则如下:
① 先插入激光雷达的串口,设备名为 /dev/ttyUSB0,后插入STM32的串口,设备名为 /dev/ttyUSB1
② 拔掉 /dev/ttyUSB0,剩下STM32串口的设备名依然是 /dev/ttyUSB1
③ 再插入激光雷达串口,这时激光雷达串口被赋设备名 /dev/ttyUSB0。(并不是 /dev/ttyUSB2
④ 先插入STM32的串口,设备名为 /dev/ttyUSB0,后插入激光雷达的串口,设备名为 /dev/ttyUSB1。(与 ① 刚好相反,可见如果能记住插入顺序,其实这也不算个问题,但谁没事记这个啊,一切都要自动化!)
因此使用设备时,不用系统自动分配的设备名/dev/ttyUSBx来操作设备。

1、相关 Linux 命令行

列出所有 USB 设备:

lsusb

下图执行三次lsusb,执行时机分别为 没插串口——插上stm32的串口——插上激光雷达的串口
【ROS小车7】_ROS主控与STM32主控通信的设置方法_第2张图片

列出所有串口设备:

ls  /dev/ttyUSB*

图

2、跟据串口 serial 创建设备别名的脚本

echo  'KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60",ATTRS{serial}=="0002", MODE:="0777", GROUP:="dialout", SYMLINK+="wheeltec_controller"' >/etc/udev/rules.d/wheeltec_controller.rules
echo  'KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60",ATTRS{serial}=="0001", MODE:="0777", GROUP:="dialout", SYMLINK+="wheeltec_lidar"' >/etc/udev/rules.d/wheeltec_lidar.rules

service udev reload
sleep 2
service udev restart

各个标签释义:

  • KERNEL==“ttyUSB*” : 设备在内核的名称(由于是串口芯片,总线名称为ttyUSB*)
  • ATTRS{idVendor}==“10c4” : 可在命令行使用lsusb查到的 ID 号(这个号码所有串口都一样)
  • ATTRS{idProduct}==“ea60” : 可在命令行使用lsusb查到的 ID 号(这个号码所有串口都一样)
  • ATTRS{serial}==“0002” : 内置在串口硬件中的设备序列号
  • MODE:==“0777”
  • GROUP:=“dialout”
  • SYMLINK+=“wheeltec_controller” : 符号链接又称软链接(Linux中对应的概念还有硬链接)

无论内核分配的设备名是 ttyUSB 几,上述脚本都根据串口的内置 serial 将设备别名为wheeltec_controller

3、运行脚本

权限更改,使脚本具有可执行权限:

sudo  chmod  777  wheeltec_udev.sh

在脚本所在路径运行该脚本:

sudo  ./wheeltec_udev.sh

最后重启电脑使上述更改生效。(这里也卡了我有一会儿呢,改完之后查不到软连接,后来经百度,发现需要重启之后生效)

4、查看别名效果

精准查找:

ll  /dev  |  grep  ttyUSB*

在这里插入图片描述
软链接高亮的查找:

ll  /dev  

在这里插入图片描述

你可能感兴趣的:(ROS小车,usb串口)