c语言树莓派串口通信_你要的ROS和STM32通信方案来啦

本文提供了一种STM32和ROS之间的串口通信方案,详细介绍了从原理到实现的全过程。通过使用C语言和共用体,实现了STM32向ROS发送传感器数据,以及ROS向STM32发送控制指令的功能。文章还涵盖了硬件连接、串口设备识别、权限设置以及代码部署和测试的步骤。
摘要由CSDN通过智能技术生成

ROS机器人:全网最实用的STM32和ROS的串口通信方案

解释

<1> 前言

之前有不少小伙伴,因为不知道如何使用这里分享的代码、或者是对系统结构不太清楚等等,导致调用不成功的,这里我深表歉意。下面我会对整个通信方案的部署进行详细的说明,确保每一个看到这篇文章的小伙伴,都能解决自己的问题。

<2> 本方案解决的问题

解决以STM32做ROS机器人底层驱动的串口通信问题、其他需要stm32和ros通信的小伙伴也可以使用。

介绍

<1> 最终协议的样子

我这里实现的STM32和ROS的串口通信协议如下图:9bc640f39835d0c0f74820e716a61694.pngSTM32端和ROS端都有一个数据发送函数和一个数据接收函数,发送和接收的内容就是如上图所示的数据包,该数据包含有数据头(55aa)、数据尾(0d0a)、校验(crc8),保证数据正确安全。通信协议也容易自行扩展更改。

<2> 本方案提供的API实现的功能

STM32向ROS发送左轮实时轮速、右轮实时轮速、航向角、预留控制位(一个字节可灵活使用)。

ROS向STM32发送左轮设定速度、右轮设定速度、预留控制位(一个字节可灵活使用)。

原理

<1> 简要叙述

首先明确:串口发送数据是一个字节一个字节的数据发送,串口接收数据同样是这样。一个字节最大表示的数据只是255,往往我们需要传递的传感器数据,都需要使用short\int\float数据类型的变量进行存储。

传统串口通信方法采用数据分离技术,比较复杂。如下图所示,这里将淘汰该种方法。

数据合成:将接收到的几个字节合成(short\int\float类型的)数据。 

数据分离:将(short\int\float类型的)数据分解成一个个字节发送出去。cba8e4de88b1dda589e72ccd6956ef33.png于是,这里发送大于一个字节的数据,就需要采用共用体的方法。

关于共用体,你只需要知道以下几点:

(1) C语言的一种机制,结构体内不同成员共享内存的机制,(即内存地址一致)

(2) 同一时刻,只能访问其中的一个成员 

(3) 不同成员,按照成员类型的性质进行内存访问,这个访问机制就是咱们使用的特性

<2> 这里是如何使用共用体的?

关于该协议中发送\接收数据的原理介绍,这里利用c语言中的共用体特性,通信的两端都定义同样数据结构的共用体,该共用体中包含一个short\int\float类型的变量和一个unsigned char类型的数组,该数组的大小和short\int\float字节大小对应。这样发送和接收数据时,就只发送或者接收共用体中的unsigned char数组的元素。

// 发送数据(左轮速、右轮速、航向角)共用体(-32767 - +32768)union sendDat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值