云台/稳定器/无人机姿态控制之欧拉角与四元数控制优缺点分析

本文主要是介绍云台/稳定器/无人机姿态控制之欧拉角与四元数控制优缺点分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于欧拉角的姿态控制简述:

        通过陀螺仪数据解算出姿态:pitch,roll,yaw(相对航向),根据目标 姿态:dst_pitch,dst_roll,dst_yaw计算出误差姿态pitch_err,roll_err,yaw_err。将误差姿态转换为目标速度e_pitch_rate,e_roll_rate,e_yaw_rate。然后再做坐标转换,变成基于机体坐标系的目标转速b_pitch_rate,b_roll_rate,b_yaw_rate。此后可以利用陀螺仪的角速度传感器做反馈控制了。

基于四元数的姿态控制简述:

        通过陀螺仪数据解算出姿态四元数:q(q0,q1,q2,q3), 根据目标姿态(dst_pitch,dst_roll,dst_yaw 转换为四元数dst_q)四元数计算出误差四元数err_q。把误差四元数转换成目标速度e_rate_x,e_rate_y,e_rate_z。之后的做法和基于欧拉角的姿态控制一样了。

基于欧拉角的姿态控制的优点:

        1.欧拉角容易理解,不论是开发者还是用户都能较为容易的理解,它们具有明确的物理意义,有于业务的实现和调试。

        2. 欧拉角的每个角度都是独立解耦的,控制实现逻辑相对简单,如:云台/稳定器的跟随操作,俯仰角度只需要考虑跟随当前的俯仰电机运动即可。

        3. 计算简单,不用牵涉矩阵/坐标旋转(业务逻辑),对MCU负担小,容易采用定点算法移植到低端MCU。

基于欧拉角的姿态控制的缺点

        1.欧拉角有角度限制,俯仰角度在90°附近整个系统是不可靠的,虽然网上很多论文讨论全角度欧拉角算法,但这些算法的前提都是需要知道前一刻的角度再推算当前时刻的角度,实际应用不一定稳定。

        2. 对于旋转类型的业务,如:非正交姿态(roll 不是 0° ,90°, 180°)情况的旋转实现较为复杂,如果:云台/稳定器的全跟随业务,要计算出目标姿态角比较麻烦。

基于四元数的姿态控制的优点:

        1. 没有角度限制,可以表示机器的任意姿态。

        2. 可以任意旋转目标姿态,对于各种旋转类型的业务实现非常简单,如:云台/稳定器的全跟随业务,只需要沿3个轴方向对目标姿态四元数进行旋转即可,实现起来简单快捷。

        3. 几乎所有的业务运算都是四元数旋转和矩阵旋转,程序代码高效简洁,便于维护。

基于四元数的姿态控制的缺点:

        1. 所有运算都是四元数旋转和矩阵计算,依赖于浮点运算,如果移植定点的话工作量巨大。所以对MCU有要求。不适合做低端产品。

        2. 四元数姿态从数据上看没有物理意义,不利于业务调试。

        3. 误差四元数一般取的是球面最短弧路径,对于无人机控制来说比较完美,但对于云台/稳定器来说,由于受限于电机限位(不可能3个电机都是360°无限位电机),需要做路径规划,这个就太麻烦了。

      

总结:

        无人机姿态控制业务相对简单,而且可以处于任意姿态(暂态),所以无人机采用四元数控制是比较理想的。对于云台/稳定器来说,采用四元数控制需要仔细斟酌了,优点和缺点都很明显,且云台的业务逻辑比无人机要复杂很多,各种工作模式与姿态相互掺杂,如果采用四元数需要对四元数的旋转理解比较透彻才行。

这篇关于云台/稳定器/无人机姿态控制之欧拉角与四元数控制优缺点分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/268760

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

关于MyISAM和InnoDB对比分析

《关于MyISAM和InnoDB对比分析》:本文主要介绍关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录开篇:从交通规则看存储引擎选择理解存储引擎的基本概念技术原理对比1. 事务支持:ACID的守护者2. 锁机制:并发控制的艺

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三