無人機系列之飛控算法
https://blog.csdn.net/ad3600/article/details/54947073

圖1 無人機平臺構型
多軸飛行器multirotor是一種具有三個以上旋翼軸的特殊的直升機。
旋翼的總距固定而不像一般直升機那樣可變。
通過改變不同旋翼相對轉速可以改變單軸推進力的大小,從而控制飛行器的運行軌跡。

圖5 陀螺儀
??????????加速度傳感器

圖5 加速計
??????????氣壓計和超聲波

圖5 聲納與氣壓二合一
??????????GPS

圖6 GPS示意圖
??????光流

圖7 光流算法示意圖
??????????地磁傳感器
init函數(shù)初始化,建立3x3矩陣R。
磁力計修正,得到誤差corr:先計算得到誤差角度mag_er,再用_wrap_pi函數(shù)做約束,再計算corr值,相當于機體坐標系繞地理坐標系N軸(Z軸)轉動arctan(mag_earth(1), mag_earth(0))度。
加速度計修正更新誤差corr:將陀螺儀計算得到的矩陣第三行(即重力加速度部分)轉換到b系,再將加速度測得重力加速度(_accel - 機體加速度)的數(shù)據(jù)歸一化(本身屬于b系),將這兩個的值進行叉乘即測得誤差。
具體過程:歸一化的n系重力加速度通過旋轉矩陣R左乘旋轉到b系,即k為歸一化的旋轉矩陣R(b-e)的第三行,總的受到合力的方向(_accel)減去機體加速度方向(_pos_acc)得到g的方向,即總加速度(加速度獲?。p去機體運動加速度(第五部分)獲取重力加速度,然后姿態(tài)矩陣的不是行就是列來與純重力加速度來做叉積,算出誤差。
因為運動加速度是有害的干擾,必須減掉。
算法的理論基礎是[0,0,1]與姿態(tài)矩陣相乘。該差值獲取的重力加速度的方向是導航坐標系下的z軸,加上運動加速度之后,總加速度的方向就不是與導航坐標系的天或地平行了,所以要消除這個誤差,即“_accel-_pos_acc”。然后叉乘z軸向量得到誤差,進行校準 。
對誤差corr進行PI控制器中的I(積分),得到_gyro_bias,再對_gyro_bias做約束處理。
使用修正的數(shù)據(jù)更新四元數(shù),并把_rates和_gyro_bias置零便于下次調用時使用。
?獲取目標姿態(tài)target,并構建目標姿態(tài)旋轉矩陣。
?通過控制四元數(shù)獲取當前狀態(tài)的旋轉矩陣DCM。
?取兩個矩陣中的Z軸向量,即YAW-axis。
計算roll,pitch誤差,得到誤差值e_R:通過R_z%R_sp_z叉乘當前姿態(tài)的z軸和目標姿態(tài)的z軸的誤差大?。葱枰D的角度)并旋轉到b系(即先對齊Z軸)。
?計算yaw的權重。
?構造e_R_cp反對稱矩陣,通過羅德里格公式旋轉得到roll,pitch旋轉后的矩陣 R_rp。
?計算yaw的誤差,進一步更新誤差值e_R:roll_pitch旋轉后的矩陣的x軸
【2】計算e_R_d:
目標姿態(tài)旋轉矩陣獲取四元數(shù)。
對四元數(shù)的虛部取出賦值給e_R_d,再對其進行歸一化處理。
對四元數(shù)的實部取出。
計算e_R_d:通過虛部與實部的一系列計算得來。
【3】計算direct_w
【4】進一步更新誤差值e_R:通過e_R * ?(1 - direct_w) + e_R_d * direct_w。
【5】得到_rates_sp角速度變量:對e_R進行p控制,再進行約束







