SLAM+语音机器人DIY系列:(三)感知与大脑——3.轮式里程计与运动控制

摘要                                              

在个人想象中机器人首先应该能自由的走来走去,而后应该能流利的与主人对话。朝着这个理想,我准备设计一个能自由行走,而且能够与人语音对话的机器人。实现的关键是让机器人能经过传感器感知周围环境,并经过机器人大脑处理并输出反馈和执行动做。本章节涉及到的传感器有激光雷达、IMU、轮式里程计、麦克风、音响、摄像头,和用于处理信息的嵌入式主板。关于传感器的ROS驱动程序开发和在机器人上的使用在后面的章节会展开,本章节重点对机器人传感器和嵌入式主板进行讲解,主要内容:html

1.ydlidar-x4激光雷达python

2.带自校准九轴数据融合IMU惯性传感器nginx

3.轮式里程计与运动控制算法

4.音响麦克风与摄像头django

5.机器人大脑嵌入式主板性能对比ubuntu

6.作一个能走路和对话的机器人centos



3.轮式里程计与运动控制             

底盘提供轮式里程计与运动控制,是机器人SLAM建图与避障导航的基础。因此对底盘进行了解,和熟悉轮式里程计与运动控制的底层原理是颇有益处的。这里以咱们的miiboo机器人的底盘为例,对底盘上的轮式里程计和运动控制的原理进行分析。网络

3.1.硬件概述                  

20miiboo机器人底盘架构

底盘主要由电机控制板和带编码器的减速电机构成,如图20。电机控制板经过串口与机器人的大脑(如树莓派3)相链接,经过接收大脑下发的控制指令,利用PID算法对电机进行控制;同时,采集电机上的编码器数据发送给大脑,利用航迹推演算法获得底盘的里程计信息。并发

3.2.轮式里程计与运动控制          

21)轮式里程计与运动控制

如图21,为轮式里程计与运动控制的系统框图。首先是机器人大脑发送控制命令,其实就是指望左、右电机达到的目标转速,咱们都知道在一个控制系统中,被控对象很难彻底按照指望目标来运行,这就须要引入反馈对被控对象进行实时的闭环控制,让被控对象尽可能逼近指望目标,电机控制板主要就是用来实现这个过程。同时,电机控制板还负责对电机编码信号进行采样,将单位采样时间(通常为10ms)内的编码脉冲累计值做为里程数据发送给机器人大脑,机器人大脑利用航迹推演算法求解出里程计信息。

通讯协议:

电机控制板与机器人大脑之间采用串口通讯。电机左、右轮指望转速被封装到串口的字符串中,做为控制命令发送给电机控制板;单位时间(通常10ms)内采样到的电机编码脉冲累计值(等效为实际电机速度)做为里程数据,以一样的方式被封装到串口的字符串中发送给机器人大脑。能够看出,控制命令与里程数据遵循同样的封装协议,协议具体形式如图22

(图22)通讯协议

电机控制:

(图23PID算法流程

电机控制最经常使用的就是PID控制算法,如图23PID算法流程。以电机转速控制为例,r(t)就是给定的目标转速,c(t)就是电机实际运行时的转速,经过闭环反馈能够求得r(t)c(t)的误差值e(t)PID控制算法中的比例(P)、积分(I)、微分(D)调节器利用e(t)生成新的控制量u(t)u(t)经过执行机构(电机驱动器)做用于被控对象(电机),电机的实际运行速度c(t)经过闭环反馈,进入下一次PID调节。就这样,不断的经过闭环反馈调节,使电机实际运行速度c(t)最终逼近给定的目标速度r(t)

在连续和离散时间域上PID会有不一样的表现形式,在连续时间域上积分、微分调节经过积分计算、微分计算实现,而在离散时间域上积分、微分调节经过累加和、差分计算实现。因为电机控制须要在程序上进行实现,因此须要采用离散域的PID。按照PID算法生成的调节量的形式,又能够分为位置式PID和增量式PID;位置式PID生成的u(t)为直接的控制量,增量式PID生成的Δu(t)是控制量的修正量,须要叠加上一次的u(t-1)才能做为控制量。离散形式的位置式与增量式PID数学表达如图24

(图24)离散形式的位置式与增量式PID数学表达

能够看出,利用位置PID的数学表达式通过简单的变形就能获得增量PID的数学表达式。增量算法不须要作累加,控制量增量的肯定仅与最近几回偏差采样值有关,计算偏差或计算精度问题,对控制量的计算影响较小。而位置算法要用到过去的偏差的累加值,容易产生大的累加偏差。增量式算法得出的是控制量的增量,例如阀门控制中、只输出阀门开度的变化部分,误动做影响小,必要时经过逻辑判断限制或禁止本次输出,不会严重影响系统的工做。而位置算法的输出是控制量的全量输出,误动做影响大。增量型PID的程序实现,如如图25。关于PID参数的整定,将放在后面的文章进行详细讲解。

(图25)增量型PID的程序实现

差动两轮底盘轮式里程计:

轮式里程计是机器人底盘的重要组成部分,采用航迹推演算法对机器人的位姿进行估计,并对机器人当前的速度、旋转速度、左右轮速度进行转换。不管是机器人的定位导航仍是普通的运动控制,都须要轮式里程计。

(图26)经过航迹推演计算里程计

如图26,为经过航迹推演计算里程计的过程。随时间推移机器人底盘的实时位姿p1p2p3...pn链接起来就造成了机器人的航迹,考虑很短的时间内两相邻机器人位姿p1p2,在已知机器人位姿p1和机器人当前左右轮速度vlvr的条件下,利用微积分的思想能够推算出机器人在下一个时刻的位姿p2,经过这样不断的推演,就能够计算出机器人当前的位姿以及速度、角速度等信息,这就是所谓的航迹推演。关于航迹推演的具体数学推导和程序实现,将在后面的文章中进行展开讲解。

底盘电机控制板软件框架:

(图27stm32电机控制板软件架构

如图27,为stm32电机控制板软件架构。底盘中的电机控制与里程数据采集的程序在stm32单片机上实现,TIM1定时器产生周期性的循环,循环中进行电机编码器数据采集、PID计算、电机速度pwm控制,剩下的就是usart1串口与usart2串口跟机器人大脑之间的通讯了,底盘debug接口是用于stm32程序开发阶段使用的,因此在机器人正常运行的过程当中只须要使用底盘控制接口。关于stm32部分的代码和对应机器人大脑中ROS驱动代码将在后面介绍。

3.3.在机器人中使用底盘           

经过前面的讲解,咱们已经对机器人底盘的用途及工做原理有了必定的了解,而且知道了电机控制和里程计的工做过程。这时候确定很想知道如何在机器人中把底盘使用起来呢?其实很简单,和激光雷达、IMU这些传感器同样,底盘也能够当作一个传感器来使用,只不过不一样之处是这个传感器与机器人大脑是双向交互的,机器人大脑向底盘发送控制命令,底盘反馈里程数据给机器人大脑。可是,不论交互的细节如何,只须要装上底盘的ROS驱动包,上层算法只须要发布和订阅相应的主题就能达到使用底盘的目的。

28在机器人中使用底盘

底盘经过串口与机器人相链接,机器人中经过运行底盘控制ROS驱动,来实现读取串口的速度反馈,利用航迹推演算法计算获得里程计并发布到/odom这个主题;底盘控制ROS驱动订阅/cmd_vel主题的运动控制数据,并转换为速度控制指令经过串口发送给底盘。这样机器人上的其它节点就能够经过发布/cmd_vel主题来对底盘进行控制,经过订阅/odom主题获取底盘的里程计。关于底盘控制ROS驱动、底盘里程计标定、底盘的debug,将在后面的章节中具体讲解。

后记                  

------SLAM+语音机器人DIY系列【目录】快速导览------

第1章:Linux基础

1.Linux简介

2.安装Linux发行版ubuntu系统

3.Linux命令行基础操做

第2章:ROS入门

1.ROS是什么

2.ROS系统总体架构

3.在ubuntu16.04中安装ROS kinetic

4.如何编写ROS的第一个程序hello_world

5.编写简单的消息发布器和订阅器

6.编写简单的service和client

7.理解tf的原理

8.理解roslaunch在大型项目中的做用

9.熟练使用rviz

10.在实际机器人上运行ROS高级功能预览

第3章:感知与大脑

1.ydlidar-x4激光雷达

2.带自校准九轴数据融合IMU惯性传感器

3.轮式里程计与运动控制

4.音响麦克风与摄像头

5.机器人大脑嵌入式主板性能对比

6.作一个能走路和对话的机器人

第4章:差分底盘设计

1.stm32主控硬件设计

2.stm32主控软件设计

3.底盘通讯协议

4.底盘ROS驱动开发

5.底盘PID控制参数整定

6.底盘里程计标

第5章:树莓派3开发环境搭建

1.安装系统ubuntu_mate_16.04

2.安装ros-kinetic

3.装机后一些实用软件安装和系统设置

4.PC端与robot端ROS网络通讯

5.Android手机端与robot端ROS网络通讯

6.树莓派USB与tty串口号绑定

7.开机自启动ROS节点

第6章:SLAM建图与自主避障导航

1.在机器人上使用传感器

2.google-cartographer机器人SLAM建图

3.ros-navigation机器人自主避障导航

4.多目标点导航及任务调度

5.机器人巡航与现场监控

第7章:语音交互与天然语言处理

1.语音交互相关技术

2.机器人语音交互实现

3.天然语言处理云计算引擎

第8章:高阶拓展

1.miiboo机器人安卓手机APP开发

2.centos7下部署Django(nginx+uwsgi+django+python3)

----------------文章将持续更新,敬请关注-----------------

 

若是你们对博文的相关类容感兴趣,或有什么技术疑问,欢迎加入下面的《SLAM+语音机器人DIY》QQ技术交流群,一块儿讨论学习^_^

关于咱们:

视频教程:

 

https://www.bilibili.com/video/av61448040

相关文章
相关标签/搜索