mc_att_control基础知识:向量运算和罗德里格斯旋转

2023-05-16

向量的叉乘和点乘

在我们的mc_att_control中有我们的向量的点乘和叉乘,一般遇到的都是三维的运算( SO(3) S O ( 3 ) 李群).
向量点乘:假设向量 a⃗ =[a1,a2,a3] a → = [ a 1 , a 2 , a 3 ] b⃗ =[b1,b2,b3] b → = [ b 1 , b 2 , b 3 ] ,则有: a⃗ b⃗ =a1b1+a2b2+a3b3=|a⃗ ||b⃗ |cosθ a → ⋅ b → = a 1 b 1 + a 2 b 2 + a 3 b 3 = | a → | | b → | c o s θ
向量叉乘:假设向量 a⃗ =[a1,a2,a3] a → = [ a 1 , a 2 , a 3 ] b⃗ =[b1,b2,b3] b → = [ b 1 , b 2 , b 3 ] ,则有: a⃗ ×b⃗ =(a2b3a3b2)i+(a3b1a1b3)j+(a1b2a2b1)k=|a⃗ ||b⃗ |sinθ a → × b → = ( a 2 b 3 − a 3 b 2 ) i + ( a 3 b 1 − a 1 b 3 ) j + ( a 1 b 2 − a 2 b 1 ) k = | a → | | b → | s i n θ
从上面的定义式也可以理解为什么我们常用向量的叉乘表示偏差,假设两个向量没有偏差,则其夹角为0,那么其正弦也就为0.三维向量叉乘也可由下面的图计算:
这里写图片描述


Throttle PID Attenuation(TPA)

简单的来说,相对于全油门,TPA应用PID值降低。当达到全油门时,它用于应用PID值的衰减,以此消除振荡。其有两个最重要的参数:tpa和tpa_breakpoint,其中tpa是缩放系数,tpa_breakpoint是开始缩放的阈值.
举个例子,tpa=50(%),tpa_breakpoint=1500(我们知道飞机的PWM在1000-2000之间),如下图所示:

  1. 当油门>1500时开始衰减
  2. 当油门到达1750时,PID衰减25%
  3. 当油门到达2000(全油门)时,PID衰减50%
    这里写图片描述
    对于TPA能消除振荡,简单的写个matlab就可以直观的看出来,运行结果如下:
    这里写图片描述
    这里写图片描述
    程序如下:
        %设一被控对象G(s)=50/(0.125s^2+7s),  
    %用增量式PID控制算法编写仿真程序  
    %(输入分别为单位阶跃、正弦信号,采样时间为1ms,控制器输出限幅:[-5,5],  
    %  仿真曲线包括系统输出及误差曲线,并加上注释、图例)。  

    clear all;  
    close all; 
    tpa=0.5,tpa_breakpoint=0,25;

    kp_cst=100;ki_cst=0.1;kd_cst=10; 
    kpp=kp_cst;kii=ki_cst;kdd=kd_cst;
    ts=0.001;                 %采样时间  
    sys=tf(50,[0.125,7, 0]); %tf是传递函数  即被控对象函数G();  
    dsys=c2d(sys,ts,'z');    %把控制函数离散化  
    [num,den]=tfdata(dsys,'v');% 离散化后提取分子、分母    
    u_1=0.0;  
    u_2=0.0;  
    y_1=0.0;  
    y_2=0.0;  
    x=[0,0,0]';  
    error_1=0;  
    error_2=0;  
    for k=1:1:1000  
    time(k)=k*ts;                        %采样次数  
    S=2;  
    if S==1  
        kp=50;ki=0.1;kd=15;             %初始化PID    
        rin(k)=1;                       %Step Signal   
    elseif S==2  
        kp=kpp;ki=kii;kd=kdd;               
        rin(k)=0.5*sin(2*pi*k*ts);       %Sine Signal     即实际输入      
    end   
    du(k)=kp*x(1)+kd*x(2)+ki*x(3);      %PID Controller   控制系数    
    u(k)=u_1+du(k);                     %Restricting the output of controller  
    if u(k)>=5         
       u(k)=5;  
    end  
    if u(k)<=-5  
       u(k)=-5;  
    end  
    %Linear model  
    yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;          %实际输出  
    error(k)=rin(k)-yout(k);    %Return of parameters 误差  
    if yout(k)>0.25
         %kpp=kp_cst;kii=ki_cst;kdd=kd_cst;
      kpp=kp_cst-2*kp_cst*(yout(k)-0.25);kii=ki_cst ;kdd=kd_cst ;
    else
       kpp=kp_cst;kii=ki_cst;kdd=kd_cst;
    end
    u_2=u_1;                                                       %保存上上次输入   为下次计算  
    u_1=u(k);                                                      %保存上一次控制系数   为下次计算  
    y_2=y_1;                                                       %保存上上次次输出   为下次计算  
    y_1=yout(k);                                                   %保存上一次输出   为下次计算  
    x(1)=error(k)-error_1;                                         %Calculating P  
    x(2)=error(k)-2*error_1+error_2;                               %Calculating D  
    x(3)=error(k);                                                 %Calculating I   
    error_2=error_1;                      
    error_1=error(k);                      
    end  
    figure(1);  
    plot(time,rin,'b',time,yout,'r');                        %输入 和实际控制输出  
    xlabel('time(s)'),ylabel('rin,yout');   

轴角法和罗德里格斯旋转推导

轴角法:简单的来说,用单位向量表示旋转方向,用向量的模长代表旋转的角度 θ θ ,举个例子:
假设你站在地面上,并选择重力方向作为负z方向。然后,如果转向左侧,则会围绕z轴旋转 π2 π 2 弧度(或90°)。将轴角表示看作有序对,这将是:

(axis,angle)=exeyez,θ=001,π2=00π2 ( a x i s , a n g l e ) = ( [ e x e y e z ] , θ ) = ( [ 0 0 1 ] , π 2 ) = [ 0 0 π 2 ]

实际上,轴角法就是利用旋转向量表示旋转,而这与旋转矩阵有很大的关系
罗德里格斯旋转
关于罗德里格斯公式的推导,我曾在一篇博客中做过: 罗德里格斯旋转推导,我们看一下罗德里格斯公式的定义就明白二者的关系了:
已知单位向量 ω=(wx,wy,wz)R3 ω = ( w x , w y , w z ) ∈ R 3 ,将其旋转角度 θ θ 得到 Rω^(θ) R ω ^ ( θ ) ,则有:
Rω^(θ)=eω^θ=I+ω^sinθ+ω^2(1cosθ) R ω ^ ( θ ) = e ω ^ θ = I + ω ^ s i n θ + ω ^ 2 ( 1 − c o s θ )

其中 ω^ ω ^ 是一个反对称矩阵:
0wzwywz0wxwywx0 [ 0 − w z w y w z 0 − w x − w y w x 0 ]

从这也就很好的揭示了旋转向量和旋转矩阵的关系了,这里的 ω ω 就是旋转轴, θ θ 就是我们的旋转角度.一般而言,轴角法和罗德里格斯旋转的转换如下:

  1. 旋转角度 θ=r.length() θ = r . l e n g t h ( ) ,其中 length() l e n g t h ( ) 函数为求向量的模长
  2. 单位向量 (rx,ry,rz)=r/θ ( r x , r y , r z ) = r / θ ;
  3. 反对称矩阵 0rzryrz0rxryrx0 [ 0 − r z r y r z 0 − r x − r y r x 0 ]
  4. 罗德里格斯旋转公式: Vtarget=RV V t a r g e t = R V

李群李代数基础知识介绍

此部分主要参考高翔博士的slam数学基础博客,可以直接看大佬的博客,来理解反对称矩阵的导数性和正切空间,以及李代数的性质,此处不做过多介绍,直接上链接:高博士对李群李代数的介绍


特技模式的几个曲线

在mc_att_control中,有几个在特技模式下对油门曲线的调整,原理暂时不清楚,用python把图画出来了.
exp:
exp
supexp:
这里写图片描述


参考资料

PID Attenuation and scaling
轴角法-维基
罗德里格斯公式推导
视觉SLAM中的数学基础 第三篇 李群与李代数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mc_att_control基础知识:向量运算和罗德里格斯旋转 的相关文章

  • FreeRtos的笔记 (一)

    FreeRtos的笔记 一 一 前言 linux是分时系统 和 RTOS时实操作系统区别 RTOS时实操作系统 当外界事件或数据产生时 xff0c 能够接受并以足够快的速度予以处理 实时操作系统是保证在一定时间限制内完成特定功能的操作系统
  • UCOSII操作系统(一)--基础知识

    前言 比较主流的操作系统有UCOSII FREERTOS LINUX等 参考书籍 xff1a 嵌入式实时操作系统 COS II原理及应用 嵌入式实时操作系统uCOS II 邵贝贝 第二版 1 操作系统的作用 xff1a 操作系统是计算机硬件
  • ORB SLAM2 编译&运行

    1 依赖安装 xff1a 1 xff09 安装 GLEW xff1a sudo apt get install libglew dev 2 xff09 安装 libuvc xff1a git clone https github com k
  • SAP 一句话入门之SD

    SD是Sales and Distribution的简称 在SAP系统中 xff0c 销售与分销模块处在供应链下游 xff0c 关注从客户订单到向客户收款的全过程 SD模块中的Sales好理解 xff0c 而Distribution却容易被
  • realsense-ros安装

    一 realsense ros安装 1 Create a catkin workspace mkdir p realsense rosws src cd realsense rosws src catkin init workspace 2
  • thinkphp页面请求时间超过40S报404错误解决办法

    最近在写一个thinkphp项目的时候 xff0c 发现Ajax从后端请求数据时间比较长 xff0c 大概需要45秒左右 xff0c 但是一旦请求时间超过40s xff0c 页面就会超时404了 xff0c 一开始以为是ajax请求时间不能
  • C语言宏定义详解

    宏定义引入 源程序在编译之前 xff0c 会先进行预处理 预处理并不是C语言编译器的组成部分 xff0c 不能直接对它们进行编译 经过预处理后 xff0c 程序就不再包括预处理命令了 xff0c 最后再由编译程序对预处理之后的源程序进行编译
  • C语言枚举详解

    枚举的引入 枚举是C语言中的一种基本数据类型 xff0c 它可以让数据更简洁 xff0c 更易读 枚举语法定义格式为 xff1a enum 枚举名 枚举元素1 枚举元素2 注意 xff0c 各元素之间用逗号隔开 注意 xff0c 末尾有分号
  • STC-ISP使用指南

    该软件无需安装 xff0c 下载后打开直接用 本软件是专门给STC系列单片机下载烧录程序的 xff0c 并不能适用于ARM系列的单片机 界面介绍 xff1a 打开后的界面如下 xff1a 左边的部分一般是用来下载程序的 xff0c 右面一般
  • STM32前言知识总结

    目录 关于STM32 STM32F1 存储器 位带操作 三种启动模式 低功耗模式 复位 时钟系统 STM32库 仿真器和调试器 注 xff1a 本文大部分内容来自于STMCU官网以及STM32数据手册 STM32使用的是ARM公司的Cort
  • STM32的标准库及其使用

    单片机的开发工作量 xff0c 主要集中在两个地方 xff0c 一是调通各种外设 xff0c 二是实现产品功能 像较高级的语言 xff0c 比如c 43 43 java python等 因为将底层操作进行了封装 xff0c 所以只需要集中关
  • PADS(一)简介、安装与基本使用

    PADS是一款制作PCB板的软件 PADS包括PADS Logic PADS Layout和PADS Router PADSLayout xff08 PowerPCB xff09 提供了与其他PCB设计软件 CAM加工软件 机械设计软件的接
  • 电路中的常见符号总结

    嵌入式如何阅读原理图和数据手册 路溪非溪的博客 CSDN博客 硬件原理图常见缩写 EN xff1a Enable xff0c 使能 CS xff1a Chip Select xff0c 片选 RST xff1a Reset xff0c 重启
  • 嵌入式常见英文2500词总结

    目录 嵌入式硬件常见英文总结 嵌入式软件常见英文总结 电子技术专业英语 嵌入式硬件常见英文总结 block diagram xff0c 框图 figure xff0c 图形 xff0c 图标 processor xff0c 处理器 Mirr
  • 我的2013—弃金融IT,从SAP业务

    我的2013 xff0c 是动荡的一年 xff1b 这一年 xff0c 我跳巢了 xff1b 这一年 xff0c 我换行业了 xff1b 这一年 xff0c 我离开了生活5年的长春 xff0c 来到成都 xff1b 这一年 xff0c 我放
  • STM32实战总结:HAL之电机

    电机基础知识参考 xff1a 51单片机外设篇 xff1a 电机 路溪非溪的博客 CSDN博客 无刷电机和有刷电机 先详细了解有刷电机 xff1a 带你了解 xff08 有刷 xff09 电机工作原理 哔哩哔哩 bilibili 再详细了解
  • F407标准库之时钟系统

    主要参考正点原子数据手册和源码资料等 第19讲 STM32时钟系统精讲 哔哩哔哩 bilibili 此处记录较为重要或者较易出错的一些遗漏之处 xff0c 作为补充 一般而言 xff0c 时钟越高 xff0c 速度越快 xff0c 但同时抗
  • F407标准库之定时器

    主要参考正点原子数据手册和源码资料等 第31 通用定时器基本原理讲解 哔哩哔哩 bilibili 此处记录较为重要或者较易出错的一些遗漏之处 xff0c 作为补充 定时器中断 定时器相关的库函数主要集中在固件库文件 stm32f4xx ti
  • F407标准库之基础知识

    关于STM32的结构体封装 在STM32中 xff0c 有两种容易弄混的结构体封装 第一种是系统对底层寄存器的封装 结构体类型定义好之后 xff0c 是不会分配地址空间的 xff0c 此时只是个类型定义 xff0c 之后使用的时候 xff0
  • c++架构师需要掌握哪些知识

    目录 本文技术梳理主要针对于三类人群的技术需求 c c 43 43 Linux服务器端开发岗位分析 经常被问到的问题 xff1a 技术体系建立的好处 c c 43 43 Linux服务器开发技术学习路径 一 精进基石 二 高性能网络设计 三

随机推荐

  • cmake:使用execute_process调用shell命令或脚本

    CMake可以通过execute process调用shell命令或者脚本 xff0c 其原型如下 xff1a execute process COMMAND lt cmd1 gt args1 COMMAND lt cmd2 gt args
  • 树莓派3B+上安装ubutun mate 18.04.2

    1 准备16G以上储存卡 xff0c 读卡器 2 准备两个软件 xff1a SDCardFormatter Win32DiskImager分别用于储存卡格式化和写入系统文件 链接如下 xff1a 链接 xff1a https pan bai
  • linux应用编程--思维导图

    思维导图软件是xmind 下载源文件点击打开链接
  • 深度学习中Batch、Iteration、Epoch的概念与区别

    在神经网络训练中 xff0c 一般采用小批量梯度下降的方式 Batch Epoch Iteration 就是其中的重要的概念 我们要理解懂得它们都是什么以及它们之间的区别 1 Batch 每次迭代时使用的一批样本就叫做一个Batch xff
  • STM32使用CubeMAX配置的串口中断接收方法

    STM32使用CubeMAX配置的串口中断接收方法 目录 1 定位串口中断发生的地方 2 处理串口中断接收的流程是 xff1a xff08 1 xff09 初始化串口 xff08 2 xff09 在main中第一次调用接收中断函数 xff0
  • SAP 寻找增强点的方法

    SAP中寻找增强的实现方法 SAP 增强已经发展过几代了 xff0c 可参考 SAP 标准教材 BC425 和 BC427 简单的说SAP的用户出口总共有四 代 1 第一代 基于源代码的增强 SAP提供一个空代码的子过程 xff0c 在这个
  • SNMPV3的实现原理

    在snmp发展到V3版本后 xff0c 把snmp的安全性提升到一个新高度 xff0c 这同时也带来了实现上的复杂性 在02年 xff0c 03年我都曾经想进一步的了解它的实现 xff0c 但都没什么进展 这次在实现Csnmp的过程中 xf
  • ubuntu更新错误:dists/artful/main/binary-arm64/Packages 404 Not Found

    Failed to fetch http archive ubuntu com ubuntu dists artful main binary arm64 Packages 404 Not Found IP 91 189 88 162 80
  • 个人公众号开通啦!!!!

    已经开通了个人微信公众号 xff1a 编程时光机 以后会在公众号里和大家分享知识和生吞活 xff0c 欢迎大家关注 xff01 xff01
  • 小白学AI系列(一)-- AI简史

    经过一段时间的酝酿 xff0c 小白学AI系列也正是开始了 xff01 小编将从三个阶段和大家一起入门人工智能 xff0c 掌握常用机器学习算法和数据分析技巧 小编专业为数据融合方向 xff0c 也曾接触过机器学习 xff0c 但由于人工智
  • 小白学AI系列(二) -- Python模块和函数

    原文地址 xff1a 小白学AI系列 xff08 二 xff09 Python模块和函数 今天的内容是带大家学习解释性语言 Python 小编有学过一段时间的C 43 43 和Matlab 相对于二者而言 xff0c Python是作为学习
  • PX4固定翼调试校准流程及实验相关问题记录分析

    pixhawk固定翼调试流程 对于px4固件 xff0c 其对应选择的一般是qgroundcontrol地面站 xff08 APM一般使用Mission Planner xff09 本次调试的固件版本是1 6 5dev xff08 最新的固
  • Ubuntu16.04下PX4环境快速搭建及uORB通信机制

    Ubuntu16 04下的环境搭建 之前搭建PX4环境常常编译不通 xff0c cmake gcc 以及交叉编译器gcc arm none eabi的版本问题导致make固件报错 xff0c 好不容易编译通过了 xff0c 在进行安装jMA
  • PX4固件通过UART连接串口读取超声波,和树莓派3通信

    添加串口读取程序 首先在Firmware msg文件夹下添加rw uart msg span class hljs keyword char span span class hljs number 5 span datastr span c
  • PX4自主飞行相关问题

    调试入坑 赶在回去之前把10月1日新校区试飞相关问题记录一下 首先是调试相关问题 调试具体流程 在校准遥控器时经常出现校准一半就停止的问题 xff0c 期初认为是固件问题 xff0c 换了1 6 5 1 6 3 xff0c 1 5 5三个固
  • PID控制器及其C++实现

    PID控制器原理 PID控制器实际上是对偏差的控制 其原理图如下 其数学的表达如下 u x 61 K p e r r t 43 1 T e r r t d t 43 T D d e r r t d t u x
  • Oracle Systimestamp 函数

    在Oracle PLSQL中 xff0c Systimestamp 函数返回本机数据库上当前系统日期和时间 包括微秒和时区 Systimestamp 函数的语法是 xff1a systimestamp 应用于 xff1a Oracle 9i
  • px4源码解读之fw_att_control

    目录 程序和控制流程源码解读总结 程序和控制流程 个人简单的总结了一下整个程序的流程如下 整个的控制流程图可以在官网中找到 源码解读 在解读源码之前 需要提几个公式 第一个就是协调转弯中的偏航控制 也就是流程图中为什么输入是空速 p 61
  • 安装Mavlink generator出现UnicodeEncodeError错误

    最近在看mavlink 在执行官网的操作时出现了问题 问题如下 span class hljs constant Exception span span class hljs keyword in span span class hljs
  • mc_att_control基础知识:向量运算和罗德里格斯旋转

    向量的叉乘和点乘 在我们的mc att control中有我们的向量的点乘和叉乘 一般遇到的都是三维的运算 S O 3 S O 3 李群 向量点乘 假设向量 a 61 a 1 a 2 a 3