【现代机器人学】学习笔记十:机器人控制

news2024/11/26 1:31:33

这节的内容主要讲述在关节空间和任务空间中的运动控制中的反馈控制,力控制,运动-力混合控制以及阻抗控制、导纳控制,pid控制等内容。

在之前的内容当中,往往不涉及到实际对机器人的操纵,即我们计算出一个结果,就默认机器人可以执行这个期望的指令,而没有考虑到机器实际上是存在误差的,它实际执行的结果很可能不是我们所期望的命令,因此引入了本章的控制部分内容。

为了避免简单的抄书,本节我只整理一些我认为的重点内容。这节的内容也是较多的,但也是日常机器人工程中非常经典的一些理论内容。


误差动力学

  • 稳态误差:令θ为期望的位置与实际位置的差值,即“误差”,稳态误差为当时间t趋近于无穷时的误差。

  • 超调:即误差的最低点到稳态误差的距离,除以0时刻到稳态误差的距离,求绝对值并用百分比表示。

  • %2调节时间:实时误差到稳态误差的距离,在第一次到达初始时刻的%2这一条件的时间。

  • 稳态响应:通过稳态误差表征。

  • 瞬态响应:通过超调和%2调节时间来表征。

线性误差动力学

用p阶微分方程来表示误差:

这里采用高等数学上册微分方程一节的内容,求解特征多项式:

求s这个复数。如果这个方程的每个根s都有负实部,则误差动力学稳定。反之如果有任何一个根存在正实部,误差动力学不稳定,误差会随着时间趋近于无穷,无限制的增长。

一阶误差动力学和二阶误差动力学

质量-弹簧 -阻尼系统,其中阻尼相当于“避震”,作用于速度项,可以与弹簧配合使用,从而避免弹簧来回震荡。弹簧会发生形变,而阻尼则阻碍物体向某一方向施加运动。

上文则为质量块的运动方程,k是弹簧常数(即刚度),b为阻尼,m为质量,f为外力。

如果质量块趋近于0,则二阶动力学降阶为一阶动力学,并认为外力产生速度而非加速度。

这部分的内容比较考验读者对高等数学的回忆,呵呵,对很多学生而言,当时学高等数学的时候,许多概念不知道有什么用。但是现在知道有什么用了,却忘记当时怎么讲的了!这里只写结论了:

一阶误差动力学:

当外力为0的时候:

注意,两个t是不一样的,斜体t表示时间,正体t=b/k,称为“时间常数”,表示一阶指数衰减到初始值37%大小所对应的时间。而2%调节时间约为4t左右。

弹簧常数k增大,阻尼常数b减小,响应变快。

二阶误差动力学:

首先把质量除以到后两项上:

然后依旧是求解特征多项式:

w为自然频率,

作为阻尼比,

特征多项式的结果是:

如之前所说,为了使该方程误差稳定,两个根要有负实部。即k和b都要大于0才能做到。

接下来就引入了控制学科非常重要的概念:

根s1和s2是:
不等的两个实数, ,称为过阻尼。
相同的两个实数, ,称为临界阻尼。
共轭复数, ,称为欠阻尼。

对于过阻尼(Overdamped ),方程的解为:

即送入时间,就可以得到此时的误差。因为它是实数,所以不存在虚部,它的根在实轴和虚轴上分布为:

这两个解,越往左走,调节时间越短。时间常数t为1/s1。

临界阻尼(critically damped )的时候,两个根s重合了:

这时候方程的解为:

其实这种情况下误差减小是最好的,既快,又没有超调。

时间常数t为:

对于临界阻尼(Underdamped)而言,它是一对共轭复数,越往虚部两边走,超调和振荡增大。

时间常数t为

即三种阻尼比的表现结果:

1.不管哪种情况,只要误差动力学稳定,%2时间常数为4t。
2.对于欠阻尼的超调情况,这里记录一下:阻尼比 =0.1,超调为73%,阻尼比为0.5时,超调为16%,阻尼比为0.1时,超调为1.5%。
3.记忆各种阻尼情况,只需要理解阻尼是起到阻碍作用,如果是过阻尼,就相当于阻力太大了,因此误差下降的慢。而欠阻尼则是缺少阻尼,因此误差存在来回振荡的情况。

速度输入的运动控制

本部分开始逐步接触控制学中最经典的pid控制,并深入的讲解了各部分的作用,是一个比较好的入门资料。不过本部分的前提是,控制量为“速度”。

单关节的运动控制

本部分分为 前馈控制、反馈控制 以及 前馈+反馈控制。

前馈控制其实就是开环控制,直接发期望的速度,也不管机器人到底执行到位没有。

反馈控制的思路则是根据实时的反馈,进行一个弥补,差多少,补多少。即直接根据位置误差得到控制量,和前馈控制不同,并不在乎各个时刻的期望速度到底是多少。

p控制和一阶误差动力学

对于期望位置恒定,期望速度为0的情况,即最简单的控制问题,要求机器人保持在某个位置不动,称之为“设定点控制”,像这种控制问题,p控制则已经足够。误差越大,指令速度则越大,误差越小,指令速度则越小。这种情况下的时间常数t为1/Kp,同样2%调节时间为4t。kp越大,响应越快。也没有稳态误差,机器人总归能达到误差为0的地步。

对于期望位置非常数,期望速度为常数的情况,相当于机器人的期望位置以恒定的速度变化,,那么直观上感觉,基于反馈控制的p控制似乎有点跟不上。这个用求解的方式也可以证明,当时间无限大的情况下,解会收敛到c/Kp,c为速度。那么如果用p控制,为了减少这个c/Kp的稳态误差,我似乎可以一直增大Kp,这样分母增大,稳态误差就变小了。但这会导致两个问题:1.关节速度是有最大限制的,并不是你想给多大就给多大。2.控制器为离散时间,Kp较大可能导致控制不稳定,比如无法精确落在某点。

pi控制和二阶误差动力学

为了针对上面的问题,引入了pi控制,多了一个积分项。

积分项的引入恰恰就是为了解决这个稳态误差。当Ki,Kp都大于0时,这个二阶误差动力学是稳定的。Ki增大,响应也会变快,因为Ki考虑到了误差的累计值,并且进行及时的弥补。

在上文二阶误差动力学中提到的固有频率和阻尼比:

我们可以看到,增大Ki,阻尼比变小,响应变快。在临界阻尼的情况下,效果最好。继续增大,变成了欠阻尼,则系统开始振荡和超调。

所以PI控制的选择原则是,利用临界阻尼,得到,选择合适的Kp和Ki,并根据实际的机器人情况去增大它,从而生成任意的快速响应。

对于期望速度是常数的情况,PI控制可以消除稳态误差。

但是对于期望速度不是常数的情况下,Pi控制不能消除稳态误差。

对于前馈+反馈控制,则公式变为:

这玩意乍一看,似乎和前面的PI控制有些矛盾。不过这里其实已经换了一种思维了。即Kp和Ki两项之和,已经不再作为控制量。现实其实一般都是用的前馈+反馈控制。

也就是说:反馈控制是,位置误差为0,则控制它的速度为0。而前馈+反馈控制,位置误差为0,则直接用期望速度当作是控制速度。因此前馈+反馈的控制方法可以弥补反馈控制的滞后性(它必须基于一个误差才能开始控制环节,似乎永远慢一拍)。

多关节的运动控制

和单关节运动控制类似,只不过使用矩阵形式的Kp和KI罢了。

任务空间的运动控制

刚刚讲的都是控制的是关节空间的内容,即我就控制一个关节角度。但是对于控制任务空间,例如笛卡尔空间末端控制,它不再是控制关节角了,怎么办呢?

这其实就跟应用题一样,套入一个任务空间的控制量就可以了,我就不细说了,相信大家都能看懂。

唯一需要注意的是,有两种控制方式,一种是控制末端旋量:

其中d是期望的末端旋量,b是真正控制的末端旋量。利用旋量来控制,旋转和平移不是解耦的,即走出的是一条弧线:

但如果根据另一种方式进行解耦:

那要是这样的话,旋转和平移就成功实现了解耦:

力或力矩输入的运动控制

单个关节的运动控制

这里它放了一个图,想先分析单个刚体的动力学模型。

有的同学可能有些好奇这个公式是怎么得到的。

第一项呢,中文版书176页其实已经提到,,参见:【现代机器人学】学习笔记七:开链动力学(前向动力学Forward dynamics 与逆动力学Inverse dynamics),第二项则可以理解为 力 叉乘 力臂,因为r是从质心到转轴的距离。

旋转摩擦主要是由粘性摩擦引起(回顾:粘性摩擦的摩擦力矩随着速度的增加而增加),因此在公式中再增加一个摩擦的力矩:

那么这就变成了一个包含位置、速度、加速度的二阶动力学方程。

那么这节依旧是:前馈控制、反馈控制、前馈+反馈控制。

反馈控制:

PID控制简介:

可以看到,相比前述介绍的PI控制,这里新增了一个和误差的时间导数有关的微分项。

综合整理一下:比例增益Kp,试图减小位置误差的一个虚拟弹簧;而积分增益Ki,试图减少或消除稳态误差。而新增的这个微分增益Kd,类似一个试图减小速度误差的虚拟阻尼。

我们知道,Ki取得太大,会导致超调,而取小不能完全消除稳态误差。

Kd会对偏差变化提前预报,取大可以使得响应更快,减少超调。但Kd也不能太大,因为这会使得系统提前制动,从而延长了调节时间。

PD控制与二阶误差动力学

我们先假设不要Ki这一项,我们是希望能快速响应,因为积分项i可能会导致超调和不稳定。有时候我们不在乎一点点的误差,而是希望机器人比较稳定,这时候pd控制就派上了用场。(例如定点控制其实也不需要积分项,因为pi控制适用于那些位置变化、速度为常数的场合)

依旧是使用前面类似的方法,不过得到的阻尼比和固有自然频率为:

为了误差稳定,我们要求b+kd和kp必须为正。和上述pi控制类似,可以根据这个阻尼比,选择kd和kp,让它尽可能的满足临界阻尼。

PID控制与三阶误差动力学

这里发现一件很有趣的事情,就是刚刚的动力学方程:

如果仅使用pd控制,那么就只有的时候,才可以精准控制,因为这个时候等式右侧为0。

而等式右侧不为0的时候,即期望有一个角度,而左侧反馈控制又是根据误差θe来控制的,这就形成了一对矛盾,即控制的准,误差为0,则到不了右侧的期望θ,即误差也不可能是0。。。

那么这时候如果左侧加上一项积分项,那么就恰好满足了误差为0的时候等式左侧有一项非零项,刚好使得这个等式成立。

因此相比PD控制,误差稳定的条件为:

我们可以看到多了一个ki项的限制,而kd和kp则和pd控制一样。

所以设计策略为:先选择Kp和Kd,以获得良好的瞬态响应。然后再选择Ki,Ki要足够大从而减少或消除稳态误差,但是也不能太大,也要足够小,使其不会显著影响稳定性。

关于PID控制的流程,代码其实很简单,书里放了一个样例伪代码,一看就懂:

前馈控制:

根据机器人动力学模型主动产生力矩,而不是等待误差。

力的前馈控制其实比较依赖于动力学建模的稳定性。动力学建模我们一般采用rbdl等开源库来计算(当然不可能是完全手推造轮子了),参见:rbdl动力学库简单易用示例代码

但是如果建模不够精准,比如重力效应未建模,就是书中的图11.17所示的情况了,期望和相差会很远。实际上重力建模大家都能想到,动力学建模方面最难的就是对摩擦力进行建模,这个各个机器人都不一样,建模起来很麻烦。

前馈+反馈线性化

和上面一样,把前馈控制和反馈控制结合起来,就得到了这个公式。如果熟悉动力学公式和前面的PID控制的话,相信看这个公式会觉得很简单。

这个方程叫做“前馈加反馈线性化控制器”,“逆动力学控制器”,“计算力矩控制器”等名称。

“反馈线性化”是啥意思?即使用θ和θdot的反馈来生成线性误差动力学,而h消除了状态的非线性动力学部分。可以注意到上面的公式,其实本质上PID作用的是那个加速度项,而不是关节力矩。

我们看一看三种控制方式的不同:

前馈+反馈比纯粹的前馈跟踪效果要好,而比纯粹的反馈控制更省力。

多关节的机器人运动控制

这一节主要掌握概念:即分散控制和集中控制。

分散控制其实指各个关节使用独立的控制器。这种情况适用于机器人各个关节的动力学解耦的时候(或者近似解耦),采用分散控制比较合适。如动力学一节所述,当各个关节的加速度仅仅取决于该关节的扭矩,位置和速度的时候,就是动力学解耦。(这种情况下,质量矩阵是对角阵)

集中控制:指集中式多关节控制。当重力和力矩比较显著和耦合的时候,或者质量矩阵无法用对角阵近似,则不得不使用集中控制。所以这种情况下,是类似前面速度输入的运动控制部分,从单关节扩展到多关节的时候,使用了对角阵来设定各个关节的pid系数,并且用整个误差向量来耦合到一起:

这个方程表面上和单关节部分的一致,实际上是不同的。主要是两点,第一,θe是误差向量;第二,Kp,Ki,Kd是增益矩阵,而不是一个单个的pid系数。

任务空间中的运动控制

既然是任务空间,实际上就是常见的笛卡尔空间末端控制了。有两种可能选项:

  1. 第一种选项,根据逆运动学,把末端的位姿转换为关节位置,从而直接转为关节空间的运动控制。

  1. 第二种选项,在任务空间表达机器人的动力学。即给定关节角,速度、末端执行器旋量,然后求末端执行器的力旋量 ,这是动力学那章的内容:

通过静力学公式,

我们代入到之前得到的计算力矩控制律中,

从而得到任务空间中的pid运动控制方法。

力控制

剩下的内容晚点再做补充,要睡觉了。。后续更新。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【5】KubeSphere部署应用 | MySQL

目录 1、部署的架构 2、KubeSphere几个主要的模块 3、部署MySQL 【1】先创建MySQL的配置文件 【2】创建存储卷 【3】部署有状态服务 【4】查看创建的服务 【5】创建一个服务可以在集群外可以访问 1、部署的架构 2、KubeSphere几个主要的模块 KubeSphere的工作负载相当于k8s里…

算法之常见字符串题目

leedcode344. 反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1: 输入:s […

进程学习笔记

进程 定义 一个程序程序在一个数据集合上的动态执行过程 与程序区别 动静,暂时的过程和永久的存在,进程由程序、数据、进程控制块(PCB)组成 特性 动态并发(进程)独立(分页有力支持&#x…

Linux:C/C++文件操作

回忆C语言文件操作 fopen()的使用:   答:打开文件流指针。 param2 “w”,当前没有文件就先创建,再写入。 “r”,只读。 “b”,可与w、b组合。 只写的例子: 只读的例子: 依靠fg…

《Linux性能优化实战》学习笔记 Day01

学习目标 系统优化的旅程上,对操作系统相关的优化是绕不开的,主动出击,将零星的知识体系化。今后遇到问题,能够加入自己的体系树中,即使专栏中没有提到,自己也能够想办法深入。 希望在这次课程后&#xf…

黑马Redis | 基础篇

目录 一、SQL和NoSQL的区别 结构化与非结构化 关联和非关联 查询方式 事务 总结 二、Redis数据类型和命令 1、通用命令 2、数据类型 3、String类型 String的常见命令 Key结构 4、Hash类型 常见命令 5、List类型 6、Set类型 Set的常见命令 7、SortedSet类型 …

科研快报|PacBio全长扩增子测序破解蚊子肠道微生态与耐药性差异

论文题目:Differences in the intestinal microbiota between insecticide-resistant and -sensitive Aedes albopictus based on full-length 16S rRNA sequencing.期刊:Microbiologyopen影响因子:3.139发表时间:2021年1月研究背…

一个非常好用的中奖概率控制器

本文首发于微信公众号: 小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料,每天学点儿游戏开发知识。嗨!大家好,我是小蚂蚁。今天分享一个非常好用的概率控制器,可以用于游戏中两种行为出现的概率控制。这个…

PHP MySQL 插入数据

使用 MySQLi 和 PDO 向 MySQL 插入数据 在创建完数据库和表后,我们可以向表中添加数据。 以下为一些语法规则: PHP 中 SQL 查询语句必须使用引号在 SQL 查询语句中的字符串值必须加引号数值的值不需要引号NULL 值不需要引号 INSERT INTO 语句通常用于…

《Linux Shell脚本攻略》学习笔记-第十三章

13.1 简介 现代Linux应用可以部署在专门的硬件、容器、虚拟机或是云端。 容器的缺点在于它以来于主机的系统内核。 虚拟机的防在于要占用大量的磁盘空间。 如果你想同时运行多个虚拟机,必须要有足够的内存来支撑各个虚拟机。否则,主机就不得不开始交换页…

SLS:基于 OTel 的移动端全链路 Trace 建设思考和实践

作者:高玉龙 (元泊)首先,我们了解一下移动端全链路 Trace 的背景:从移动端的视角来看,一个 App 产品从概念产生,到最终的成熟稳定,产品研发过程中涉及到的研发人员、工程中的代码行数、工程架构规模、产品发…

探索VGG网络与LeNet网络对精度的影响

1 问题在学习不同网络模型对实验精度的影响过程中,对我们的实验结果,各种参数数值的改变有何变化,有何不同。VGG-11网络与LeNet-5网络对精度和损失的影响研究。训练周期20其他参数都相同的方式来探索最终的精度。2 方法对于VGG-11网络&#x…

QTreeWidget 设置任意行背景色

设置任意某行,网上这类示例少,一般都是选中行、交替行、高亮行等设置。 比如我要将顶层节点的背景色修改一下。 方法1,先继承QTreeWidget,更改它的 drawBranches函数,在里面添加条件判断,然后根据需要设置颜色。 #i…

【计算机体系结构-01】指令集体系结构、微体系结构简介

1. “虚拟” to “现实” 首先可以看这张图片,下面的 Physics 所指的是我们的物理世界中看得见摸得到或者是客观存在的事物,而人类希望将自己的工作内容或者需求以某种方式映射到物理层面上,用物理变化带来的影响来完成人类工作内容。例如早期…

Python【r e】模块正则表达式[中]实战

正则表达式相关函数和符号用法:#正则表达式""".匹配任意某个字符[.]与转义字符的作用一致,表示匹配.,配合 ,[.],即匹配一次或则多次. text . 或则 text ...2.从头匹配或者从左往右匹配re.match()"""import …

IDEA整合Docker,一键打包服务镜像与启动容器

尝试了IDEA整合Docker,坑有些多,但经过查阅资料都一一解决了,写了个案例,感觉这种方式确实要方便很多。下面来整理下步骤: 一、安装Docker 准备一台Linux,我这里用的是centos 7 mini 版,然后安…

内网穿透的概念及解决方案

1.什么是内网穿透 在外网的web请求可以转发到内网的本地服务 2.什么是内网?什么是外网? 内网(也叫局域网(Local Area Network,LAN))是在一个局部的地理范围内,一般可以是是几米内(比如家庭内网),也可以是方圆几千米…

2023 年 10 大最佳 GIS 软件

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。 生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少。 GIS 是一个分析地理相关性…

【算法】拓扑排序

目录1.概述2.代码实现3.应用本文参考&#xff1a; LABULADONG 的算法网站 1.概述 &#xff08;1&#xff09;拓扑排序 (Topological Sort) 是指将有向无环图 G (V, E) 中所有顶点排成一个线性序列&#xff0c;使得图中任意一对顶点 u 和 v&#xff0c;若边<u, v> ∈ E(…

esp32 使用u8g2图形库 IIC驱动OLED

简介&#xff1a;使用U8g2库进行OLED的显示十分简单&#xff0c;首先要包含两个库&#xff0c;U8g2lib和Wire&#xff0c;后者是IIC通信需要用。对于IIC接口的OLED&#xff0c;需要在程序中指定一下引脚的接口定义&#xff0c;如果是SPI接口&#xff0c;可以参考U8g2库自带例程…