【乾貨】淺析APM姿態控制中兩個常用的函數

2021-02-20 無人機頻道

文 / zinghd

【作者簡介】

作者還沒有想好怎麼描述自己

APM的姿態控制部分有大量的用於變換的函數,最近分析了兩個常用的函數,以前看代碼只看框架,覺得不就是姿態嗎,不就是歐拉角,四元數,旋轉矩陣嗎?現在看過算法細節才知道每個算法的實現背後都是嚴謹的物理假設和數學推導,基礎知識太重要,還有太多需要學習。

函數名:AC_PosControl::accel_to_lean_angles

位置:

libraries\AC_AttitudeControl\AC_PosControl.cpp

用途:將NED坐標系下的期望加速度轉換成機體坐標系下的傾斜角度(pitch,roll)

源程序:

void AC_PosControl::accel_to_lean_angles(float accel_x_cmss, float accel_y_cmss, float& roll_target, float& pitch_target) const
{
    float accel_right, accel_forward;

    
    accel_forward = accel_x_cmss*_ahrs.cos_yaw() + accel_y_cmss*_ahrs.sin_yaw();
    accel_right = -accel_x_cmss*_ahrs.sin_yaw() + accel_y_cmss*_ahrs.cos_yaw();

    
    pitch_target = atanf(-accel_forward/(GRAVITY_MSS * 100.0f))*(18000.0f/M_PI);
    float cos_pitch_target = cosf(pitch_target*M_PI/18000.0f);
    roll_target = atanf(accel_right*cos_pitch_target/(GRAVITY_MSS * 100.0f))*(18000.0f/M_PI);
}

數學推導:

假設飛行器z軸受力平衡,即在z軸上保持靜止。

已知NED坐標系下期望加速度accel_x_cmss,accel_y_cmss(融合之後的加速度數據為NED坐標系下)和遙控輸入的yaw,求機體坐標系下pitch角和roll角。

1.需要先將yaw角進行補償,即只剩下傾斜角。

將NED坐標系下的水平加速度做繞z旋轉,得到沒有旋轉只有傾斜的中間狀態,該狀態下的x軸方向加速度為accel_forward,y軸加速度為accel_righ

NED坐標系轉機體坐標系繞z軸旋轉矩陣為:

2.通過accel_forward,accel_righ,計算pitch,roll。

應為飛機在z軸上受力平衡,所以機體坐標系下飛機受到的合外力將在z軸方向上產生一個-G的力才能使飛機在z軸受力平衡。

如圖

支持飛機在NED坐標系z軸保持靜止需要-G,而且需要x軸上產生accel_forward,y軸上產生accel_righ,這些都是由機體坐標系下的合外力-F提供的。

所以有:


其中NED坐標系轉到機體坐標系的旋轉矩陣(之前已經進行過yaw方向的旋轉了所以這個矩陣裡的yaw為0)。


可得:


所以有:


所以:

函數名:void Quaternion::to_axis_angle

位置:libraries\AP_Math\quaternion.cpp
功能:將四元數轉換成軸角形式
原函數:

void Quaternion::to_axis_angle(Vector3f &v)
{
    float l = sqrtf(sq(q2)+sq(q3)+sq(q4));
    v = Vector3f(q2,q3,q4);
    if (!is_zero(l)) {
        v /= l;
        v *= wrap_PI(2.0f * atan2f(l,q1));
    }
}

單位四元素可以表示為:


單位四元數有:


又因為:


可以得到:


所以:


但是函數裡的四元素不是單位四元素所以要進行單位化


令:


所以:

以上兩個函數反覆運用在姿態控制部分,深入理解能夠幫助你了解姿態的本質,和姿態控制的思想。

附上我畫的姿態控制流程圖可以幫助理解:

關注微信公眾號,回復【姿態】即可獲取結構圖Visio文件,同時歡迎加作者微信進行交流。

微信號:auscor

專注於觀察分析行業應用無人機領域,有深度、有爭議、有真話、有乾貨

相關焦點

  • 姿態解算進階之加速度姿態解算
    本文姿態角的定義將採用飛控上常用的定義方法:繞 X 軸轉是橫滾角 Roll、繞 Y 軸轉是俯仰角 Pitch、繞 Z 軸轉是偏航角 Yaw。加速度計姿態解算進階在《姿態解算進階之理解旋轉矩陣(也稱方向餘弦矩陣)》中 Sugar 介紹了旋轉矩陣。既然用旋轉矩陣能對三維空間內的向量進行任意旋轉,那麼我們不難知道:加速度計在各個軸上的分量就是通過在「豎直的加速度向量」上施加旋轉而得到的。
  • 數學中常用函數
    1.冪函數冪函數的一般形式是2.指數函數是重要的基本初等函數之一。一般地,y=a^x函數(a為常數且以a>0,a≠1)叫做指數函數,函數的定義域是 R3.對數函數一般地,對數函數以冪(真數)為自變量,指數為因變量,底數為常量的函數。對數函數是6類基本初等函數之一。其中對數的定義:如果ax=N(a>0,且a≠1),那麼數x叫做以a為底N的對數,記作x=logaN,讀作以a為底N的對數,其中a叫做對數的底數,N叫做真數。
  • Pytorch_第九篇_神經網絡中常用的激活函數
    神經網絡中常用的激活函數Introduce理論上神經網絡能夠擬合任意線性函數,其中主要的一個因素是使用了非線性激活函數(因為如果每一層都是線性變換,那有啥用啊,始終能夠擬合的都是線性函數啊)。本文主要介紹神經網絡中各種常用的激活函數。以下均為個人學習筆記,若有錯誤望指出。
  • 工程中常用的無損檢測方法
    當前位置:首頁 > 技術文獻 > 工程中常用的無損檢測方法 2019-07-30 09:35:11 來源:中國檢測網 網絡轉載 閱讀: 次 【導讀】對己建成的混凝高層建築、高架道路、水壩的安全評估,解決傳統查找混凝土結構隱患的方法效率低
  • 機器學習中常用的5種回歸損失函數
    那你了解Huber損失、Log-Cosh損失、以及常用於計算預測區間的分位數損失麼?這些可都是機器學習大牛最常用的回歸損失函數哦!機器學習中所有的算法都需要最大化或最小化一個函數,這個函數被稱為「目標函數」。其中,我們一般把最小化的一類函數,稱為「損失函數」。它能根據預測結果,衡量出模型預測能力的好壞。
  • Matlab常用函數與常用指令大全
    >contourf 填充的等高線圖hidden 網格線消影meshc 連接網格/等高線mesh 具有參考軸的3D網格peaks 具有兩個變量的採樣函數surf 3D陰影表面圖su***ce 建立表面低層對象surfc 海浪和等高線的結合surfl 具有光照的3D陰影表面trimesh 三角網格圖
  • 淺析交流伺服電機的矢量控制
    但在IPM電機控制時,d軸和q軸都要利用,所以在速度環需要有兩個指令的輸出。    淺析了交流電機的矢量控制,實際利用變頻器的交流電機控制中,由於外亂,溫度,高頻等等因素的影響,使得電機控制算法越來越複雜,精度越來越高,但我們只要掌握了上述最基本的方法
  • 淺析飼料中雜質的來源及控制措施
    淺析飼料中雜質的來源及控制措施    飼料生產廠商和養殖戶對飼料中的雜質有著嚴格要求,如果飼料中含有較多的雜質,不僅會影響飼料的品質因此,在飼料生產中要特別注意飼料雜質的危害。以下就飼料中雜質的來源及其控制措施做一概述,旨在為飼料中雜質的處理提供理論參考。
  • MATLAB數組的常用函數
    3  進行數組運算的常用函數在MATLAB中有一些常用函數,這些函數在日常的編程計算過程中會經常遇到,一般是基本的數學概念在MATLAB
  • JavaScript中常用的4個輸入輸出函數
    作為剛踏進js大門的新手,首先必須掌握js中有哪些常用的輸入輸出函數,下面我為大家介紹我們常用的4種輸入輸出函數:警告窗函數alert(),輸出函數document.write(),提示對話函數prompt(),對話框confirm()函數。1.
  • 學好函數的性質,增強高中數學學習的品質
    函數的圖像和性質是歷年高考的重要內容,也是熱點之一,對圖像的考查主要有兩個方面:一是識圖,二是用圖,即利用函數的圖像,通過數形結合解決問題;對函數性質的考查,則主要是將單調性、奇偶性、周期性等知識綜合考查。常常涉及的函數是二次函數、指數函數、對數函數及分段函數。
  • NCL自帶常用統計學函數集錦
    NCL作為一門氣象專業語言,自帶了很多氣象屆常用的算法和命令
  • 寧波電腦程式設計備考:PASCAL中所有單元常用過程及函數列表
    下面是寧波奧數網小編整理的Pascal常用過程和函數列表,希望這些資料對大家有所幫助。   QUOTE:   SYSTEM TP的運行庫,包括常用的標準函數和過程,可以在程序中直接使用,不需USES語句說明。
  • 入門| 機器學習中常用的損失函數你知多少?
    選自towards data science作者:Ravindra Parmar機器之心編譯參與:李詩萌、王淑婷本文作者將常用的損失函數分為了兩大類:分類和回歸。然後又分別對這兩類進行了細分和講解,其中回歸中包含了一種不太常見的損失函數:平均偏差誤差,可以用來確定模型中存在正偏差還是負偏差。
  • SPSS中的常用函數
    在SPSS中計算新變量或選擇個案時,我們可能會用到內置函數。SPSS中有上百種內置函數,包括算術函數、統計函數、分布函數、邏輯函數、日期和時間運算與提取函數、缺失值函數、字符串函數、隨機函數,等等。那我們今天就一起來了解一下它們。
  • DB2常用函數與Oracle比較
    【IT168 技術文章】     1、類型轉化函數:decimal, double, Integer, smallint,real,Hex(arg),    date, time,timestamp,char, varchar    常用舉例:    --轉化為字符串類型
  • [青之巔VFX]Ae表達式-3:Ae表達式滑杆控制
    Ae表達式常用表達式菜單函數參數功能詳細介紹 在講解Ae表達式滑杆控制前,先給大家詳細講解下常用函數的功能介紹,後面的課程會在這個總綱中選取重要的的實用函數例子,具體如下(文本參數按順序對應圖中相關屬性)Global: 全局變量控制,對整體合成素材時間進行全局的改變調整Vector Math: 矢量數學函數,包括矢量加減法函數,點乘,叉乘等等Random
  • NCL專輯 | 自帶常用統計學函數集錦
    NCL作為一門氣象專業語言,自帶了很多氣象屆常用的算法和命令
  • 最常用日期函數匯總excel函數大全收藏篇
    在我們的實際工作中,經常需要用到日期函數。日期函數那麼多,你還只會用函數TODAY嗎?那你就OUT了。今天一起來看下常用日期函數的用法! 1、DATE 函數DATE:返回在日期時間代碼中代表日期的數字。
  • 淺析六種常用的單片機通信協議
    打開APP 淺析六種常用的單片機通信協議 佚名 發表於 2019-11-08 16:36:46 在單片機的應用中,通信協議是必不可少的一部分,上位機與下位機,單片機與單片機,單片機與外設模塊之間的通信都需要通信協議實現信息交換和資源共享。