拿四旋翼無人機為例,四個槳葉旋轉是的無人機產生了公升力,但是這個公升力要怎麼匹配才能使得無人機能夠平穩的飛行呢,這個就是無人機姿態控制的關鍵。
如圖四個電機1、2、3、4,水平位置x,y。要想使無人機平穩的飛行則水平位置xy的公升力必須達到平衡。這是姿態控制就要發揮它的作用了。
本次我使用的姿態控制演算法也是傳統的串級pid,首先我們需要先了解一下姿態控制需要用到哪些資料:
1、輸入型資料:尤拉角(水平位置的反饋資訊)、陀螺儀資料(可以理解為尤拉角的微分,這個資料可以實時檢測到飛機的xy方向的角速度)
2、輸出型資料:輸出有三個軸的資訊需要輸出,x軸、y軸、z軸。x軸控制左右方向,比如檢測到飛機往右邊傾斜了x軸資料的資料會加大34電機的pwm,從而是的飛機恢復水平,反之檢測到飛機往左邊傾斜則x軸資料會加大12電機的pwm是的飛機恢復平衡。y軸同理x軸。剩下就是z軸也稱yaw軸,無人機槳葉在旋轉的時候同時會帶動飛機往反方向旋轉,所以yaw控制13電機24電機的平衡。
原理寫完了直接上**:
void
extern_pid
(_pid_extern* par,
float tar,
float cur,
float ratio_p,
float ratio_i,
float ratio_d)
//先上乙個pid的框架,後面就直接呼叫這個pid函式了
//各個引數的意義熟悉pid的同學應該很快就能看出來,下面就是串級pid的精髓了:
//position control
extern_pid
((_pid_extern*
)&pitch_angle,eulerpitchdesired,eulerpitchactual,
angle_pitchroll_kp,angle_pitchroll_ki,angle_pitchroll_kd)
;extern_pid
((_pid_extern*
)&roll_angle,eulerrolldesired,eulerrollactual,
angle_pitchroll_kp,angle_pitchroll_ki,angle_pitchroll_kd)
;extern_pid
((_pid_extern*
)&yaw_angle,euleryawdesired,
flight_yaw
(euleryawactual,euleryawdesired)
, angle_yaw_kp,angle_yaw_ki,angle_yaw_kd)
;//eulerpitchactual,eulerrollactual,flight_yaw(euleryawactual,euleryawdesired)這三個引數就是姿態解算出來的尤拉角,尤拉角作為串級pid的外環。
//angular velocity control
extern_pid
((_pid_extern*
)&pitch_gyro,pitch_angle.results,gyro_x,
vel_pitchroll_kp,vel_pitchroll_ki,vel_pitchroll_kd)
;extern_pid
((_pid_extern*
)&roll_gyro,roll_angle.results,gyro_y,
vel_pitchroll_kp,vel_pitchroll_ki,vel_pitchroll_kd)
;extern_pid
((_pid_extern*
)&yaw_gyro,yaw_angle.results,gyro_z,
vel_yaw_kp,vel_yaw_ki,vel_yaw_kd)
;//這個內環也解釋一下,用外環pid的運算值加入到內環pid的期望值,這個思想等同於模糊pid即外環誤差越大內環誤差成倍數增大,類似於內環動態的kp,ki,kd值。內環主要是角速度環,在整個串級pid來說內環相當於單極pid的d值,只是這個d值反應很迅速,所以這個演算法在無人機姿態控制效果很好。
motorvalue[0]
=(int16)
(limit
(thr_out+pitch_filter_control+roll_filter_control+yaw_filter_control,0,
960));
motorvalue[1]
=(int16)
(limit
(thr_out-pitch_filter_control+roll_filter_control-yaw_filter_control,0,
960));
motorvalue[2]
=(int16)
(limit
(thr_out-pitch_filter_control-roll_filter_control+yaw_filter_control,0,
960));
motorvalue[3]
=(int16)
(limit
(thr_out+pitch_filter_control-roll_filter_control-yaw_filter_control,0,
960));
//然後就是把xyz三軸經過pid運算的資料傳到各個對應的電機
到此,姿態平穩控制完成,希望對你有用,有關無人機各個模組講解持續更新中… 無人機控制率
控制率 指的是飛行過程中輸入和輸出所遵循的一種演算法。飛行控制律一般是利用飛行器的狀態 位置 姿態 線速度 角速度等 和控制演算法解算出飛行所需要的舵偏 公升降舵 方向舵 副翼 油門 發動機轉速 然後將相應的控制量輸出至執行機構 舵和發動機 從而控制飛機按照控制律設計的目標進行飛行。可以舉乙個例子來...
六旋翼無人機(無人機應急基站)或巡檢無人機
諾基亞當時的無人機基站就是用的六旋翼嘛。無人機還可以去用來檢查基站。把六旋翼的原理弄懂。六旋翼和四旋翼的區別是不是還是在旋翼動力分配上?就像球上平衡車三輪和四輪的區別?其實球上平衡車不管三輪還是四倫,都是兩個角度環兩個速度環,可以投影成兩個一級倒立擺,只是最後轉化成的每個輪子的pwm的公式改變一下就...
無人機相關
無人機影像資料拼接原理 1.資料預處理 輻射校正 相鄰影象在色度上趨於一致 幾何校正 2.影象配準 提取特徵點 尺度不變特徵變換 scale invariant feature transform,sift 3.影象融合 拼接重疊區使用最佳縫合線去除 鬼影 生成的dsm 若pos資料中的高程為無人機...