IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【ROS小车7】_ROS主控与STM32主控通信的设置方法 -> 正文阅读

[嵌入式]【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 控制板上的串口)
在这里插入图片描述

约定:激光雷达的 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的串口——插上激光雷达的串口
在这里插入图片描述

列出所有串口设备:

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  

在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:39:38  更:2022-07-17 16:41:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:26:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码