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

摘要

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

1.ydlidar-x4激光雷达

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

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

4.音响麦克风与摄像头

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

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



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

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

3.1.硬件概述

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

(图20)miiboo机器人底盘

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

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

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

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

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

通信协议:

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

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

(图22)通信协议

电机控制:

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

(图23)PID算法流程

电机控制最常用的就是PID控制算法,如图23为PID算法流程。以电机转速控制为例,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。SLAM+语音机器人DIY系列:(三)感知与大脑——3.轮式里程计与运动控制

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

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

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

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

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

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

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

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

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

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

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

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

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

3.3.在机器人中使用底盘

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

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

(图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技术交流群,一起讨论学习^_^

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

上一篇:root权限NPM全局安装(-g)仍会权限不够,认识下参数 --unsafe-perm


下一篇:markdown基本使用