智能车|ROS主控与STM32建立通信软硬件全方位讲解

news/2024/11/28 8:49:18/

智能车|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建立通信软硬件全方位讲解》
文章链接


http://www.ppmy.cn/news/9358.html

相关文章

栈变量的作用域

C++自学精简教程 目录(必读) 栈变量的作用域就是栈变量的可见范围。 变量的作用域主要有下面几种常见的情况: 1 for循环作用域 变量只在for循环内部可见。 intmain(){//这里i不可见 for(inti=0;i<10;++i)//for循环内部可见 {cout<<

linux下常用调试技巧

1 linux下如何查看静态库和动态库都链接了那些库 1.1 静态库.a是没有指令可以看到其在生成过程中链接了那些库的 1.2 动态库.so可以通过ldd指令查看其在生成过程中链接了那些库 还有一种简单直观的方法,我们可以在编译过程中看到所生成的二进制文件,链接了那些库: 平时编译…

C++静态变量的使用训练

李太白年龄:80 加入列表后,最小的年龄现在是:80赵四天年龄:70 加入列表后,最小的年龄现在是:70王天霸年龄:90 加入列表后,最小的年龄现在是:70毛强年龄:20 加入列表后,最小的年龄现在是:20周瑜年龄:30 加入列表后,最小的年龄现在是:20万茜年龄:40 加入列表后,最小的年龄现在是:…

【 java 集合】List接口常用实现类对比以及ArrayList和LinkedList源码分析

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

【机器学习】线性回归损失函数为什么要用平方形式

问题 线性回归损失函数为什么要用平方形式&#xff1f; 问题背景 这是在阿里一面中遇到的问题&#xff0c;当时我的回答是损失函数是是模型预测值与真实值之间的一种距离度量&#xff0c;我们可以计算出每个样本的预测值与真实值之间的距离&#xff0c;全部加起来就得到了所…

【MySQL】-【索引】

目录为什么使用索引InnoDB中索引的推演索引前的查找设计索引简单的索引设计方案InnoDB中的索引方案为什么使用索引 一、hashmap底层使用红黑树 二、索引时在存储引擎中实现的&#xff0c;因此不同存储引擎的索引可能不同 索引的优点&#xff1a; 类似大学图书馆建书目索引&am…

景联文科技:探究人工智能在智慧医疗中的应用及作用|数据标注

智慧医疗中的人工智能具有难以想象的潜力。人工智能在智慧医疗中的未来从通过协助重复性工作到药物管理或药物创造的治疗计划设计开始&#xff0c;人工智能已经在多个医学领域发挥作用。更好地组织智慧医疗物流智慧医疗和医学领域的人工智能可以更好地组织患者路线或治疗计划&a…

机器学习实战教程(九):支持向量机实战篇

一、前言 上篇文章讲解的是线性SVM的推导过程以及简化版SMO算法的代码实现。本篇文章将讲解SMO算法的优化方法以及非线性SVM。 本文出现的所有代码&#xff0c;均可在我的github上下载&#xff0c;欢迎Follow、Star&#xff1a;点击查看 二、SMO算法优化 在几百个点组成的小规…