SLAM从入门到精通(ROS和底盘Stm32的关系)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        学过Ros的同学,一般对subscribe、publish、话题、服务这些内容都比较熟悉。如果再熟悉一点的话,还会知道slam、move_base、moveit这些框架。再了解多一点的呢,会对框架里面的算法,比如和hector slam、gmapping、amcl、迪杰斯特拉、a*算法比较熟悉。但是,对机器人底盘的知识,尤其是Ros和stm32怎么通信的,很多人却是不算太了解的。

1、Ros和Stm32的物理连接

        一般来说,Ros和Stm32会通过串口进行通信。就算两者通信的是usb,也会在stm32开发板上面通过芯片把usb信号转换成串口信号。

2、操作系统不同

        通常Ros都是运行在linux系统之上的,如果需要界面的话,还会搭载一个ubuntu系统。而stm32开发板上面一般不会安装操作系统,就算有操作系统,也会是一个简单的rtos,比如开源的freertos之类的。在这个板子上面,会根据不同的运动类型,实现不同的控制算法。简单的运动控制算法用pid实现就可以。

3、报文协议

        既然Ros和Stm32之间需要进行通信,那么不管是Ros读数据,还是Ros写数据,都需要按照一定的报文格式进行。通常会采用0x55 0xaa这样的报文头,还会有报文长度、报文内容、校验码,这些都是常规的报文协议格式。

4、Ros从底盘获取的数据

        Ros系统从底盘获取的数据主要有这么几种。第一,里程计数据。这个数据一般是底盘根据轮速和底盘模型计算出来的。第二,imu数据。imu这类传感器,一般也是直接由底盘负责处理的。好一点的底盘程序,会直接融合里程计和imu的数据。第三,避障、电量、电机转速这些原始数据。电量比较好理解,比如机器人没电了,就可以直接发命令让机器人去自动充电。电机转速这些很多情况不一定需要,但是如果机器人需要做功能安全的话,是需要的。

5、Ros发送给底盘的命令数据

        Ros发送给底盘的数据其实就比较简洁了,主要就是cmd_vel数据。这里面包含了x/y/z的线速度,还有围绕x/y/z的角速度。

6、底盘厂家提供的Ros包

        很多时候,底盘厂家会直接提供一个Ros包给Robot开发厂家。这样Robot开发企业就可以专注在算法领域和业务领域,不用关于底盘这些操作细节了。Ros包实现的内容就是上面提及的3、4、5中描述的工作。此外,Ros包还要把从底盘获得数据publish出去,当然对于需要发送给底盘的速度要求也要提前向roscore subscribe一下。

        最后还有一个要注意的就是,如果Ros包退出,相关的class对象在进行析构的时候,一定要让底盘停止,发送最后一次停止命令报文。这样整个工作环境才是安全的,这一点务必要牢记在心。做工业自动化、或者汽车自动驾驶的同学,这方面尤其要注意。

7、stm32开发板上的cmd_vel目标分解说明

        前面我们说过,对于差速轮来说,它的线速度公式是这样的,vl和vr分别是左右轮的速度,

v = (vr + vl) /2

        角速度公式是这样的,其中l是轮距,

w = (vr - vl) / l

        假设这个时候,底盘从ros获取了vx、vy和w的要求,此时应该如何转变成vl和vr呢?处理过程其实是一样的。首先计算一下v,

v = sqrt(vx * vx + vy * vy)

        接着就是利用数组计算,

vr + vl = 2 * v
vr - vl = w * l

        所以简单计算一下,

vr = v + w*l/2
vl = v - w*l/2

        进一步带入v和w,那么公式就变成,

vr = sqrt(vx*vx + vy*vy) + w*l/2
vl = sqrt(vx*vx + vy*vy) - w*l/2

        所以说,大家最好能够灵活掌握vr/vl和v/w之间的转换过程。至于vr、vl怎么达到,比较简单的办法就是pid了。注意这里的vx、vy其实是有正有负的,算下来角度就是theta角。

8、其他

        上面描述的都是正常情况。大家有没有想过,如果ros发送的cmd_vel,底盘做不了怎么办?比如,一些robot做不来原地旋转。那么这个时候改哪个程序呢?毫无疑问,就是publish cmd_vel的程序,local_planner。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/132032.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

macOS Sonoma 14.1beta3(23B5067a)发布

黑果魏叔10 月 11 日消息,苹果今日向 Mac 电脑用户推送了 macOS 14.1 开发者预览版 Beta 3 更新(内部版本号:23B5067a),本次更新距离上次发布隔了 7 天。 根据官方发布的macOS Sonoma 14.1beta3更新日志,此…

Ubuntu 18.04 OpenCV3.4.5 + OpenCV3.4.5 Contrib 编译

目录 1 依赖安装 2 下载opencv3.4.5及opencv3.4.5 contrib版本 3 编译opencv3.4.5 opencv3.4.5_contrib及遇到的问题 1 依赖安装 首先安装编译工具CMake,命令安装即可: sudo apt install cmake 安装Eigen: sudo apt-get install libeigen3-…

Flink---14、Flink SQL(SQL-Client准备、流处理中的表、时间属性、DDL)

星光下的赶路人star的个人主页 你生而真实,而非完美 文章目录 1、Flink SQL1.1 SQL-Client准备1.1.1 基于yarn-session模式1.1.2 常用配置 1.2 流处理中的表1.2.1 动态表和持续查询1.2.2 将流转换为动态表1.2.3 用SQL持续查询1.2.4 将动态表转换为流 1.3 时间属性1.…

[Python]图片转字符画——这就是我的表情!!!!!!

背景 偶尔看到一些视频,他们把图片转字符画,平常也没有去关注,今天来捣鼓一下。 研究了一下还超级简单的,都是调用别人写好的框架。 网上也有很多教学。 代码实现 from PIL import Image # 表示字符颜色,由深到浅&am…

QSS样式表的使用

QSS样式表的使用 Chapter1 【Qt】样式表的使用——设置样式的方法一、简述二、开始总结 Chapter1 【Qt】样式表的使用——设置样式的方法 原文链接:https://blog.csdn.net/weixin_41838721/article/details/123323206 一、简述 我们通常在使用Qt开发的过程中都会…

深入了解Python类与面向对象编程

更多资料获取 📚 个人网站:涛哥聊Python 在编程世界中,面向对象编程(OOP)是一种强大的编程范式,而Python是一门优雅而强大的编程语言。本文将带你深入探讨Python中的类与面向对象,为你揭示面向…

FHRP首跳冗余的解析

首跳冗余的解析 个人简介 HSRP hot standby router protocol 热备份路由协议 思科设备上 HSRP VRRP 华为设备上 VRRP HSRP v1 version 1 HSRP v2 version 2 虚拟一个HSRP虚拟IP地址 192.168.1.1 开启HSRP的抢占功能 通过其他参数 人为调整谁是主 谁是从 &a…

亚马逊,速卖通,敦煌产品测评补单攻略:低成本、高安全实操指南

随着电商平台的发展和消费者对产品质量的要求提升,测评补单成为了商家们提升销售和用户口碑的关键环节。然而,如何在保持成本低廉的同时确保操作安全,一直是卖家们面临的挑战。今天林哥分享一些实用的技巧和策略,帮助卖家们产品的…

阿里云ModelScope 是一个“模型即服务”(MaaS)平台

简介 项目地址:https://github.com/modelscope/modelscope/tree/master ModelScope 是一个“模型即服务”(MaaS)平台,旨在汇集来自AI社区的最先进的机器学习模型,并简化在实际应用中使用AI模型的流程。ModelScope库使开发人员能够通过丰富的…

uniapp上echarts地图钻取

1: 预期效果 通过切换地图 , 实现地图的钻取效果 2: 实现原理以及核心方法/参数 一开始是想利用更换地图数据的形式进行地图钻取 , 这就意味着我们需要准备全国30多个省份的地图数据 , 由于一开始考虑需要适配小程序端 , 如此多的地图文件增加了程序的体积 , 如果使用接口调…

MySQL数据生成工具mysql_random_data_load

在看MySQL文章的时候偶然发现生成数据的工具,此处直接将软件作者的文档贴了过来,说明了使用方式及下载地址 Random data generator for MySQL Many times in my job I need to generate random data for a specific table in order to reproduce an is…

Zookeeper-JavaApI操作

JavaApI操作 JavaApI操作1) Curator 介绍2) Curator API 常用操作a) 建立连接与CRUD基本操作b) Watch事件监听c) 分布式锁c.1) 介绍c.2) Zookeeper分布式锁原理c.3) 案例:模拟12306售票 JavaApI操作 1) Curator 介绍 Curator 是 Apache ZooKeeper 的Java客户端库。…