智能车|ROS主控与STM32建立通信软硬件全方位讲解
- 前言
- 智能车控制器功能
- 通信内容
- 硬件连接
- 软件设置
- 更新电平转换芯片的serial
- 创建设备别名
- 使用设备别名
- ROS与STM32串口通信代码
- ROS主控读取stm32发送的数据
- ROS主控向stm32发送数据
前言
通常复杂的机器人会存在多个控制器,不会是一个控制器完成所有的任务,这样会造成计算资源的过度集中,并且无法实现模块化的调试。
以简单的智能车为例,一般会存在两个控制器,一个是运行ROS的主控,另一个是运行电机控制和传感器信息采集的单片机比如STM32。
由于存在多个控制器,完成一个机器人的具体任务,那么这多个控制器间则需要建立通信,本篇博客主要讲解:
- 如何实现ROS主控和STM32之间的通信
- ROS主控对STM32发送过来的数据做哪些处理
以智能车的应用例程展开
智能车控制器功能
在智能车里存在两个控制器:
- ROS主控
- STM32控制器
只要能将ROS跑起来就可以作为ROS主控,ROS主控可以是:
- jetson 系列,例如 nano、tx、nx
- 树莓派
- 工控机
在智能车里,ROS主控主要实现的功能有:
- 雷达信息采集
- 摄像头信息采集
- 路径规划
- 定位
STM32 控制器主要实现的功能有:
- 里程计信息采集
- 陀螺仪信息采集
- 电机控制
通信内容
ROS主控负责接收stm32发送过来的传感器数据
数据有里程计、imu、电池电压。其中里程计就是电机的转速,通过编码器采集到。
STM32负责接收ROS主控发送过来的运动底盘的目标速度,STM32再完成电机转速的控制,最终实现小车的移动任务
ROS主控与STM32之间需要做到一个双向的数据传输,这里就涉及到了两个控制器之间的通信问题,下面则介绍如何实现两者之间的通信
硬件连接
ROS主控通过usb线连接到一个TTL电平转换芯片,再由这个电平转换芯片连接STM32芯片
电平转换芯片可以通过PCB设计在STM32芯片的电路板上,也可以使用一个USB转TTL的模块。
为什么两个控制器之间需要电平转换芯片?
因为两个控制器之间通信层次逻辑是不同的,所有需要电平转换芯片。相当于两个主控是两种不同语言的人,电平转换芯片相当于一个翻译。
电平转换芯片可以是:
- cp2102
- ch340
- PL2303
- FT232RL
软件设置
硬件连接上之后,需要一个软件设置
需要软件设置原因:
ROS主控可能接入多个USB设备,或者接入两个型号一样的电平转换芯片。
不同USB设备占用的ROS主控的端口号在每次上电时可能会不一致,这样需要手动修改代码中的配置参数,比较麻烦,也无法做到自启动。
如果存在多个USB设备,但是每种USB设备的电平转换芯片不一样,那么我们可以根据芯片名称来知道端口 号,但是如果有两个芯片一样的电平转换芯片,则无法区分,这时候想做自启动那么必须要进行下面步骤的软件设置
软件设置分为两步
第一步是更改电平转换芯片的serial,
第二步是创建设备别名
更新电平转换芯片的serial
首先在win环境下安装更改芯片serial的软件
CP21xx Customization Utility.exe
这个软件在网上下载就可以
这里提供一个百度网盘的链接:链接: http://pan.baidu.com/s/1bni1WtT 密码: 75bs
打开这个软件,然后将芯片连接电脑的USB
然后将圆圈位置改为0002
然后点击Program Device
点完之后要等下,在Status Logging窗口中出现下面信息,才说明修改好了
创建设备别名
使用设备别名
ROS与STM32串口通信代码
ROS主控读取stm32发送的数据
ROS主控向stm32发送数据
标题里隐藏内容,可移步古月居这篇文章观看《古月居:智能车|ROS主控与STM32建立通信软硬件全方位讲解》
文章链接