我是靠谱客的博主 雪白乐曲,最近开发中收集的这篇文章主要介绍control 学习笔记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.姿态控制:对于飞行器来说,我们首要的是控制他的姿态来保证稳定的飞行,那么在控制算法的设计中,姿态环选取的状态变量是什么?

虽然我们明确说的控制的是“姿态”,但是姿态的描述有很多种方式,我们应该选取哪一种方式去描述姿态?

实际上我们在算法里是以四元数作为状态变量,大家都知道四元数描述的是旋转,那么这个用于控制的四元数描述的是从哪个坐标系旋转到哪个坐标系呢?

我在这里需要定义几个坐标系:bodyheading坐标系(bodyheading这一词从开源飞控里学来的),直译的话就是机头坐标系、当前机体坐标系、目标机体坐标系

bodyheading坐标系:x为机头朝向(与地面平行),y为朝向机头左方(与地面平行),z为上方

那么要保证飞机不炸鸡的关键就是要控制好r_{body}^{bodyheading}这个旋转矩阵。

这个旋转矩阵的几何意义是Body系的各坐标轴在Bodyheading系下面的投影

只要我们能够实时控制这个矩阵达到我们的目标值,也就是让r_{body(now)}^{bodyheading} = r_{body(target)}^{bodyheading},就能控制住飞机的姿态(roll,pitch分量)

由于程序里面一般进行运算的是四元数,也就是q_{body}^{bodyheading},要想拿到q_{body}^{bodyheading}需要融合好陀螺仪和加速度计。

这个四元数的几何意义是Bodyheading系绕着某个轴转某个角度旋转到了Body系

我在控制算法框架里面输入的目标值就是q_{body(target)}^{bodyheading}​​,需要反馈过来的是q_{body(now)}^{bodyheading}​​​​。

q_{body(target)}^{bodyheading}是根据用户设定或者是位置控制器输出先得到目标角度,然后通过目标角度构造的。

q_{body(now)}^{bodyheading}是从估计器拿到的四元数。

这里插一条四元数的性质:如果left|qright|=1,则有q^{*}otimes q=1=qotimes q^{*}

OK,这里有两种可以表示姿态误差的方式

第一种是采用相对变换的方式:q_{body(now)}^{bodyheading}otimes q_{body(target)}^{body(now)}=q_{body(target)}^{bodyheading}

可得误差四元数:q_{body(target)}^{body(now)}=(q_{body(now)}^{bodyheading})^{*}otimes q_{body(target)}^{bodyheading}

q_{body(target)}^{body(now)}就是从当前机体坐标系旋转到目标机体坐标系的四元数,接着求q_{body(target)}^{body(now)}的旋转向量再转化为目标角速度,再与机体角速度进行作差。

第二种是采用绝对变换的方式:q_{error}^{bodyheading}otimes q_{body(now)}^{bodyheading}=q_{body(target)}^{bodyheading}

可得误差四元数:q_{error}^{bodyheading}=q_{body(target)}^{bodyheading}otimes (q_{body(now)}^{bodyheading})^{*}

这里涉及到左乘右乘的问题,对于矩阵和四元数,左乘是绝对变换,右乘是相对变换。

q_{error}^{bodyheading}是表示从bodyheading坐标系作一个小旋转,叠加到q_{body(now)}^{bodyheading}上可与目标机体坐标系重合。

q_{error}^{bodyheading}的旋转向量是在Bodyheading系的,转化为目标角速度也是在Bodyheading系的,需要转到Body系才能与机体角速度作差。

那是用绝对变换还是相对变换?从原理上是没区别的,只看怎么算方便

为什么acfly里用的是绝对变换?因为他要做前馈计算,前馈量是算在Bodyheading系的

2.姿态刚体动力学

dot{r}=r(w^{body})_{times}

jdot{w}^{body}=-w^{body}times jw^{body}+tau

3.widetilde{r}=(r^{*})^t r=(r_{b^{*}}^w)^t r_b^w = r_b^{b^{*}},控制目标是使得r_b^{b^{*}}rightarrow i_3,从而使得r_{b}^wrightarrow r_{b^{*}}^w

跟踪误差的微分方程:dot{widetilde{r}}=-w_{times}^{*}widetilde{r}+widetilde{r}w_{times}

最后

以上就是雪白乐曲为你收集整理的control 学习笔记的全部内容,希望文章能够帮你解决control 学习笔记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部