0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ROS与移动底盘的通信试验内容

麦辣鸡腿堡 来源:CSDN博客 作者:白鸟无言 2023-11-16 16:36 次阅读

ROSSTM32通信流程如图所示

图片

主要包含两个方面:

  • 小车里程计数据的上传与接收
  • 控制指令的下发与接收

1.原始消息内容

在ROS中,里程计数据主要包括机器人的位姿(位置和姿态),以及机器人的速度(线速度和角速度)。对于本实验所用到的麦轮地面机器人,只需要知道机器人的x轴与y轴线速度、x轴与y轴位置、z轴角速度、偏航角即可。

由于对速度积分可以得到位置,对角速度积分可以得到角度,所以STM32端上传的里程计数据只需要包括机器人的 x轴与y轴线速度、z轴角速度 ,ROS端在接收到这些数据后,进行积分即可得到位置和角度。

另外,在本实验用到的STM32端集成了一个ICM20602姿态传感器,其中内置了姿态解算算法,可以获得准确的机器人姿态数据,因此本实验使用STM32端上传的偏航角来代替对角速度积分得到的航向角。

所以STM32上传的里程计数据包括机器人的x轴线速度、y轴线速度、z轴角速度、偏航角。

与里程计数据类似,对于麦轮地面机器人,控制指令只需要包括机器人的x轴速度、y轴速度、z轴角速度即可,机器人坐标系如图所示:

图片

2.转换为字节数组

知道了消息的原始数据,还需要将它转换成传输效率更高的字节数组,如图:

图片

在C/C++中,有很多种将原始数据转换为字节数组的方法,其中一种常用的方法是使用联合体(union)。

联合体的所有成员占用同一段内存,修改一个成员会影响其余成员,如果要实现一个float数据与字节数组的互相转换,我们可以定义如下的联合体:

typedef union{
  float data;
  uint8_t data8[4];
}data_u;

这个联合体中有两个成员,一个是32位的float数据data,另一个同样是占据了32位字长的字节数组data8,根据联合体的性质,这两个成员所在的内存位置是一样的,也就是说,改变其中任何一个成员的值,另一个也会被改变。

利用这个性质,我们就可以实现float与字节数据的互相转换。

3.添加帧头和校验码

本实验选择常用的0xAA 0x55作为帧头,同时对原始数据转换得到的字节数组进行求和,将结果保存在1字节数据中,作为校验码。

准备工作:

1.在ROS端安装serial功能包

sudo apt-get install ros-melodic-serial

2.在ROS端创建一个功能包,命名为xrobot,添加依赖项roscpp rospy tf serial

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    210

    文章

    28063

    浏览量

    205754
  • 通信
    +关注

    关注

    18

    文章

    5939

    浏览量

    135758
  • STM32
    +关注

    关注

    2264

    文章

    10852

    浏览量

    354148
  • ROS
    ROS
    +关注

    关注

    1

    文章

    276

    浏览量

    16931
收藏 人收藏

    评论

    相关推荐

    rosserial、ros_lib移植到STM32讲解 精选资料分享

    这边博客主要是对前面两篇博客的一个补充(ROS使用STM32F407ZGT6作为底盘控制器、ros下使用rosserial和STM32F1/STM32F4系列进行通信(MDK5工程))
    发表于 08-04 06:13

    小车底盘硬件开源自主导航小车MickX4

    开源自主导航小车MickX41 小车底盘1.1 底盘机械组装1.2 底盘硬件框图2 电气系统搭建本系列教程意在分享自己学习ROS自主导航小车时候的笔记,教程
    发表于 08-06 07:08

    ROS与STM32是如何进行通信

    ROS与STM32通信2020.8.1主要内容制作ROS包,将控制命令传给STM32,并将接收到的数据作为话题进行发布STM32接收数据并将姿态数据传回给
    发表于 08-11 07:25

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

    全网最实用的STM32和ROS机器人的串口通信方案小白学移动机器人同名公众号:小白学移动机器人创作声明:内容包含虚构创作
    发表于 08-20 06:33

    移动机器人底盘主要包含哪些设备

    移动机器人底盘主要包含电机,电机驱动器,底盘控制器和其它设备。底盘控制器与电脑通信,把电脑指令解析后发送给电机驱动器,同时控制器
    发表于 09-07 06:15

    ROS的serial是如何进行通信

    怎样去安装seria呢?ROS的serial是如何进行通信的?
    发表于 12-06 06:31

    如何完成ROS与STM32之间的串口通信

    如何去实现ROS与STM32串口通信测试功能?如何完成ROS与STM32之间的串口通信呢?
    发表于 12-10 06:54

    如何搭建实体机器人ros底盘

    目录介绍一、底盘主控板二、嵌入式开发板1. 与上位机pc的关系2. 与STM32主控板的关系介绍自下而上的分析实体机器人(差分轮速机器人)搭建中的关键过程。一、底盘主控板本部分搭建实体机器人ros
    发表于 01-20 07:36

    移动通信电源技术要求和试验方法

    主题内容与适用范围:本标准规定了移动通信电源的技术要求和试验方法。 本标准适用于供地面、内河或沿海作移动业务使用的,其额定输出电压为48V
    发表于 06-04 10:43 8次下载

    移动通信系统优化的范畴和内容

    移动通信系统优化的范畴和内容 关键字:移动通信,GSM,CDMA,交换子系统,基站子系统,CQT/DT综述  一个
    发表于 06-02 07:29 742次阅读

    ROS与STM32通信

    ROS与STM32通信2020.8.1主要内容制作ROS包,将控制命令传给STM32,并将接收到的数据作为话题进行发布STM32接收数据并将姿态数据传回给
    发表于 12-24 19:00 11次下载
    <b class='flag-5'>ROS</b>与STM32<b class='flag-5'>通信</b>

    ROS移动底盘通信教程

    本实验是实现机器人自主导航的重要步骤,对于轮式机器人,可以通过在底盘加装轮式里程计的方式来获得机器人的速度数据,这些数据可以用来辅助机器人实现自主定位,同时机器人还需要将控制指令发送给移动底盘,实现自主控制,本实验就将实现
    的头像 发表于 03-14 10:27 671次阅读

    ROS移动机器人的通信接口电路设计

      本文来聊聊ROS移动机器人中控制器与树莓派进行传输信号的通信接口电路设计。在此之前回顾下在本项目第一篇文章中提到的硬件框图。
    的头像 发表于 03-17 10:46 1420次阅读
    <b class='flag-5'>ROS</b><b class='flag-5'>移动</b>机器人的<b class='flag-5'>通信</b>接口电路设计

    ROS1的通信架构的基础通信方式及相关概念

    ROS通信架构是ROS的灵魂所在,它包括数据处理,进程运行,消息传递等** 。这篇文章主要介绍ROS1的通信架构的基础
    的头像 发表于 05-19 17:23 3334次阅读
    <b class='flag-5'>ROS</b>1的<b class='flag-5'>通信</b>架构的基础<b class='flag-5'>通信</b>方式及相关概念

    ROS通信接口机制介绍

    ROS通信接口 接口可以让程序之间的依赖降低,便于我们使用别人的代码,也方便别人使用我们的代码,这就是ROS的核心目标,减少重复造轮子。 ROS有三种常用的
    的头像 发表于 12-01 15:03 759次阅读
    <b class='flag-5'>ROS</b><b class='flag-5'>通信</b>接口机制介绍