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

news2024/9/20 20:49:25

智能车|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.coloradmin.cn/o/138984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

吴恩达《机器学习》——神经网络与反向传播

神经网络与反向传播1. 神经网络1.1 神经网络的前馈传播1.2 利用反向传播求梯度1.2.1 正则化梯度2. 目标函数(损失函数)2.1 PyTorch官方文档版本2.2 吴恩达讲解版本2.3 两种版本的区别在哪?2.4 正则化目标函数3. Python实现3.1 梯度校验3.2 封…

hcie-路由引入与控制

关于本实验:本实验主要介绍了路由选择工具ACL和IP-Prefix的配置,路由引入的配置以及路由策略的配置方法及注意事项。 实验目的:掌握路由选择工具的配置方法,路由策略与策略路由的配置与注意事项。 实验组网介绍: 实验…

美颜sdk人脸美妆代码分析、算法流程

美颜sdk人像美妆是非常重要的一个功能,目前深受广大用户喜爱,本篇文章小编将为大家讲解一下美颜sdk人像美妆功能的代码以及算法实现流程。 1、人像美妆算法流程 首先进行妆容模板制作,主要由Photoshop等编辑软件制作,最终由设计…

解微信弹性布局--简单搭建一个页面

Flex布局简介布局的传统解决方案,基于盒状模型,依赖 display属性 position属性 float属性什么是flex布局?Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为Fle…

SpringBoot连接MySQL报错CommunicationsException: Communications link failure

情况说明 一个定时任务查询数据进行汇总,查询时间大约在20-30秒,应用链接报错。 CommunicationsException: Communications link failureThe last packet successfully received from the server was 10,026 milliseconds ago. 环境 MySQL8.0 mysql…

Java Eclipse如何调试代码

下面通过一个简单的例子来了解一下 Eclipse 调试程序的方法。上述代码完成的主要功能是如果 i 值满足小于或等于 5 的条件,就一直执行输出语句。可以看到 for 关键字后面的小括号中有三个表达式,第一个表达式int i0的作用是定义一个 int 类型的变量并赋初…

193:vue+openlayers 多边形的绘制,编辑feature,删除所选feature和清空功能

第193个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayer中使用select来选择feature元素,选中的元素可以编辑,也可以删除,同时可以删除整个图层的source内容。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,…

IOS技术分享| IOS快对讲调度场景实现

前言 “快对讲” 是基于 anyRTC 音视频技术 对讲业务的产品,为客户提供专业对讲、多媒体对讲和可视化调度功能。 主要功能包含: 频道与会话多频道对讲、监听、锁定、强拆音视频单人、多人呼叫、呼叫调度台图片、视频上报视频回传、监看位置回传即时消息…

【CUDA】C++实现warpaffine仿射变换及其逆变换

目录仿射变换矩阵工具类进行前向仿射变换:i->d进行仿射变换逆向变换d->i仿射变换矩阵工具类 假设有图片i,要将其仿射变换至图片d,使用下面的类计算仿射变换矩阵i2d及d2i: 在调用compute函数后,输入i及d的尺寸&a…

[3] Jenkins 系列:如何获取出发Jenkins Job的用户信息?

Jenkins提供两种方式的Script,一种是基于声明式的,一种是基于脚本式的。 Jenkins申明式的格式 Jenkins脚本式的格式 Jenkins 官方推荐使用申明式的方式定义Jenkins的Pipeline。 有的时候我们需要在Pipeline给开发团队发消息或者邮件,告知当…

MAC(m1)-VMWare Fusion安装CentOS7.9

下载安装VMWare Fusion,安装完成后打开 https://blog.csdn.net/ZHOU_VIP/article/details/128513824 centos7.9安装镜像拖过来: 打开自定义设置: 换文件夹: 问题出来了,点击install闪一下,就没了&#xff…

C进阶:结构体的内存对齐

目录 本篇文章注意讲解结构体的内存对齐。 🕊️🐲一.为什么存在内存对齐 🤖👻二.内存对齐规则 🐬🐱三.实例 🐇例1. 🦄 例2. 🐯例3. 😼例4. 一.为什么…

二十四节气-小寒。文案、海报分享,小寒料峭 年味渐浓。

小寒,是二十四节气中的第23个节气,冬季的第5个节气,正处在“二九”“三九”期间,可以说是一年中最冷的时段。 中国古代将“小寒”分为三候:“一候雁北乡,二候鹊始巢,三候雉始鸲。” 大雁开始向…

Java堆空间(Heap Space)

Java 堆空间(Heap Space)概述在Java程序中,堆是JVM内存空间中最大的一块,同时我们知道,每个线程都拥有一个虚拟机栈,但是堆不同,Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。在《Java虚拟机…

STM32——TIM输入捕获

文章目录一、TIM输入捕获输入捕获简介频率测量二、通用定时器的输入捕获通道通用定时器框图通道的输出部分三、主从触发模式主模式从模式四、输入捕获基本结构五、PWMI基本结构六、输入捕获模式测频率电路设计关键代码七、PWMI模式测频率占空比电路设计关键代码八、定时器库函数…

分而治之——图的连通性问题及板子

连通性的判断 两大算法:并查集 和 图的遍历(DFS BFS) 分而治之的题目与解答 在这道题的下面 3587. 连通图 - AcWing题库 连通性的判断 两种方法 1.这里连通性的判断是判断连通分支是否包含所有的点。 2.也可以不开cnt数组,直接…

【算法】贪心算法(第四章习题解答)

4 贪心算法 4.1 若在 0−10-10−1 背包问题中, 各物品依重量递增排列时, 其价值恰好依递减序排列. 对于这个特殊的 0−10-10−1 背包问题, 设计一个有效算法找出最优解, 并说明算法的正确性. 算法设计:由题目所给的信息可以知道这种特殊的背包问题可以通过贪心算法…

基于多保真方法来估计方差和全局敏感度指数分析(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 此代码实现了多保真方法来估计方差和全局敏感度指数。当模型具有不确定的输入时,模型输出也是不确定的。基于方差的…

C++与QML混合编程

一、前言 简单来说,混合编程就是通过Qml高效便捷的构建UI界面,而使用C 来实现业务逻辑和复杂算法。Qt集成了QML引擎和Qt元对象系统,使得QML很容易从C 中得到扩展,在一定的条件下,QML就可以访问QObject派生类的成员&am…

112.(leaflet之家)leaflet椭圆修改

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYPE html> <html>