第四天:SLAM智能小车DIY乐趣-小车控制ROS驱动包开发

小车控制ROS驱动包开发

####写在前面####

对于做纯SLAM算法和应用功能开发的朋友来说,其实不需要搞明白小车的底层硬件原理和软件实现等繁琐的细节,只需要通过上层API调用来实现小车的控制等操作就可以了。因此,本文开始讲解用于提供上层API调用的ROS驱动包,本文主要内容:

1) 通信协议简介(stm32与ROS驱动包通信)

2) ROS接口(topic订阅与发布)

3) ROS驱动包程序解析

4) 基于航迹推演的里程计解算

####正文####

1.通信协议简介(stm32与ROS驱动包通信)

    通信协议都基于串口通信,通信数据帧由串口通信的单个字节组合而成,stm32的串口2由“小车控制-ROS驱动包”驱动,stm32的串口1由“小车debug-ROS驱动包”驱动,两个串口都使用115200的波特率。下面分别介绍两个驱动包的通信协议:

stm32与小车控制ROS驱动包通信:

不难发现,其实“小车控制-ROS驱动包”发送和接收数据遵循同样的协议。

stm32与小车debug-ROS驱动包通信:

stm32发送过来的调试信息时纯字符串流,可以通过printf()直接来查看;

小车debug-ROS驱动发送给stm32的kp、ki、kd是一个扩大10000倍后的整数,除以10000后使用。

2. ROS接口(topic订阅与发布)

ROS接口为上层应用提供API调用,便于SLAM算法和应用功能开发。

订阅topic:

/cmd_vel  (geometry_msgs::Twist)

发布topic:

/enc_l    (msgs::Int16)

/enc_r    (msgs::Int16)

/odom    (nav_msgs::Odometry)

/tf        (odom->base_footprint)

3.ROS驱动包程序解析

了解了前面的通信协议和ROS接口后,接下来就来看看ROS程序是如何实现的。首先程序订阅/cmd_vel作为用户的控制输入,将控制输入的速度信息转换为通信协议中规定的格式,然后通过串口下发给stm32,实现对小车的运动控制。

下图是订阅/cmd_vel的回调函数:

下图是串口下发函数:

知道了怎么控制小车运动,接下来介绍获取小车反馈回来的码盘信息,并将反馈回来的码盘信息进行里程计解算。

如下图是串口读取和里程计解算函数:

如下图是里程计和相关topic发布:

4.基于航迹推演的里程计解算

首先通过下面的一张图来了解一下里程计解算的大致原理,下图包含两个坐标分别对应图A、图B,请看图:

在图A中,设定机器人初始位置与坐标系原点重合,机器人的正前方为坐标系x轴正方向,机器人方向角定义为由坐标系x轴正方向逆时针方向(即图中theta轴所示)。利用极限的思想,机器人在很短的时间delta_t内,由A位置运动到B位置,机器人绕p转动一个微小的角度,其中delta_d_l与delta_d_r分别为左轮和右轮的位移量,可以通过编码反馈值计算得;delta_theta是方向角变化量,由等腰三角形的关系可以得出delta_theta与图中各角的关系;L是两轮之间的轴距。有了这个理论基础,下面接着介绍如何解算出里程计。

在图B中,主要说明了如何通过迭代来计算机器人在坐标系中的姿态,从而得到我们需要的里程计。通过图A中介绍的原理,不难得出delta_d、delta_theta、delta_x、delta_y各变化量,然后通过过迭代的方法便可以求出里程计中的机器人位置(x,y,theta)和机器人的速度(v,w)。

有了里程计解算的理论基础后,接下来谈谈具体程序实现,如下图:

程序的输入是在采样周期内得到的左右轮编码值(delta_encode_left和delta_encode_right),这个编码值可以通过速度系数speed_ratio便可以换算成实际的位移量,速度系数speed_ratio可以通过后续的标定得到;两个轮子的轴距wheel_distance也是通过后续的标定得到,采样周期encode_sampling_time在程序中是一个可选的参数。有了delta_encode_left、delta_encode_right的值,便可以推算出delta_d、delta_theta,继而可以推算出delta_x、delta_y,继续往下使用迭代可以计算出最终的里程计值position_x、position_y、oriention、velocity_linear、velocity_angular。最后通过ROS将里程计发布出去就ok了。

原文地址:https://www.cnblogs.com/hiram-zhang/p/9676725.html

时间: 2024-11-05 15:54:24

第四天:SLAM智能小车DIY乐趣-小车控制ROS驱动包开发的相关文章

第二天:SLAM智能小车DIY乐趣-小车控制stm32软件基础

SLAM智能小车DIY乐趣-小车控制stm32软件基础 ####写在前面#### 前面介绍了小车控制stm32硬件基础,本文就来介绍配套的小车控制stm32软件基础.关于stm32开发相关的基础知识这里就不多说了,有需要的小伙伴可以查阅相关资料进行学习,这里重点从小车控制项目入手,直接进行跟实际需求相关的开发.本文主要内容: 1) 电机控制 2) 编码器数据读取 3) 串口数据收发 4) 电机速度PID控制 5) 周期性控制 6) 小车控制软件整体框图 ####正文#### 1.电机控制 电机控

第三天:SLAM智能小车DIY乐趣-小车控制PID参数整定

PID参数整定教程 1.数字PID控制算法介绍------位置型&增量型 由于是面向计算机编程实现为目的,这里就直接从数字PID切入正题,如果想要了解更多PID方面的基本知识请参阅相关理论资料. 增量型算法的优点: a. 增量算法不需要做累加,控制量增量的确定仅与最近几次误差采样值有关,计算误差或计算精度问题,对控制量的计算影响较小.而位置算法要用到过去的误差的累加值,容易产生大的累加误差. b. 增量式算法得出的是控制量的增量,例如阀门控制中.只输出阀门开度的变化部分,误动作影响小,必要时通过

SLAM+语音机器人DIY系列:(四)差分底盘设计——5.底盘PID控制参数整定

摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为底盘包含软硬件整套解决方案,是很多机器人公司的核心技术,一般不会随便公开.出于强烈的求知欲与学习热情,我想自己DIY一整套两轮差分底盘,并且将完整的设计过程公开出去供大家学习.说干就干,本章节主要内容: 1.stm32主控硬件设计 2.stm32主控软件设计 3.底盘通信协议 4.底盘ROS驱动开发

SLAM+语音机器人DIY系列:(四)差分底盘设计——2.stm32主控软件设计

摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为底盘包含软硬件整套解决方案,是很多机器人公司的核心技术,一般不会随便公开.出于强烈的求知欲与学习热情,我想自己DIY一整套两轮差分底盘,并且将完整的设计过程公开出去供大家学习.说干就干,本章节主要内容: 1.stm32主控硬件设计 2.stm32主控软件设计 3.底盘通信协议 4.底盘ROS驱动开发

智能家居DIY

最近智能家居比较火,将房子简单改造下,也算体验智能家居. 本文讲解的是用无线的方式,优点是:不用改造现有线路,直接安装模块即可实现想要的功能,花的钱也较少,共六百左右 =======================正文开始分割线======================== 一.最终要实现的效果: 用智能手机可以控制家中的电视.空调.灯光.窗帘.热水器.电饭煲 实现上述功能,大概费用几百块钱左右 二.具体的实现过程 整体流程:A------>B------>C 1.这里A表示手机,需要是智能

SLAM+语音机器人DIY系列:(七)语音交互与自然语言处理——2.机器人语音交互实现

摘要 这一章将进入机器人语音交互的学习,让机器人能跟人进行语音对话交流.这是一件很酷的事情,本章将涉及到语音识别.语音合成.自然语言处理方面的知识.本章内容: 1.语音交互相关技术 2.机器人语音交互实现 3.自然语言处理云计算引擎 2.机器人语音交互实现 其实要自己做一款语音对话机器人还是很容易的,我们只需要选择好语音识别.语音合成.自然语言处理的技术,就可以在一款树莓派3开发板上实现了.由于语音交互系统的核心技术是云端自然语言处理技术,所以我们可以选择网上免费提供的语音识别.语音合成等现有方

SLAM+语音机器人DIY系列:(八)高阶拓展——1.miiboo机器人安卓手机APP开发

android要与ROS通讯,一种是基于rosbridge,另一种是基于rosjava库. 相关参考例子工程 rosbridge例子: https://github.com/hibernate2011/RosClient rosbridge(rosbridge_suite)是ros官方为开发者提供的一个用于非ros系统和ros系统进行交互通信的功能包.包括话题的订阅,消息的发布,服务的调用,参数的设置和获取,图片信息的传递等等,都是JSON格式的字符串.获取JSON字符串并将命令发送到ros,反

UI标签库专题四:JEECG智能开发平台 Upload(上传标签)

?? 1. Upload(上传标签) 1.1.  参数 属性名 类型 描述 是否必须 默认值 id string 上传控件唯一标示 是 null name string 控件name 是 null formData string 上传文件提交后台的其他表单参数取ID 否 null uploader string 上传提交路径 是 null extend string 上传文件扩展名(可选类型组1,pic[*.jpg;*,jpeg;*.png;*.gif;*.bmp;*.ico;*.tif],2,

公益课程:《Android智能手表DIY》

不"智能"非"手表" ,智能手表我们主张diy "智能硬件时代来了!" 苹果智能手表Apple Watch上市,再次引发了人们对智能硬件追逐的狂热.智能硬件领域已经从可穿戴设备延伸到智能电视.智能家居.智能汽车.医疗健康.智能玩具.机器人等领域,而涉足智能硬件的公司从苹果.谷歌.亚马逊.BAT.小米.360等国际国内互联网巨头,也包括众多的传统硬件公司. 2014年至今,中国智能硬件市场融资金额超过7亿美元,超过90家公司获得融资.目前智能硬件市