图10 姿态解算
3.姿态控制
3.1.姿态角度控制
【1】计算误差值e_R:
(1)获取目标姿态target,并构建目标姿态旋转矩阵。
(2)通过控制四元数获取当前状态的旋转矩阵DCM。
(3)取两个矩阵中的Z轴向量,即YAW-axis。
(4)计算roll,pitch误差,得到误差值e_R:通过R_z%R_sp_z叉乘当前姿态的z轴和目标姿态的z轴的误差大小(即需要旋转的角度)并旋转到b系(即先对齐Z轴)。
(5)计算yaw的权重.
(6)构造e_R_cp反对称矩阵,通过罗德里格公式旋转得到roll,pitch旋转后的矩阵R_rp。
(7)计算yaw的误差,进一步更新误差值e_R:roll_pitch旋转后的矩阵的x轴和目标姿态的x轴的误差,乘上yaw的权重。
【2】计算e_R_d:
(1)目标姿态旋转矩阵获取四元数。
(2)对四元数的虚部取出赋值给e_R_d,再对其进行归一化处理。
(3)对四元数的实部取出。
(4)计算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控制,再进行约束
3.2.姿态角速度控制
【1】获取当前角速度值rates:通过_ctrl_state数据结构(当前姿态信息)把需要的有效数据赋值给rates。
【2】获取目前角速度值_rates_sp。
【3】计算得到角速度差rates_err。
【4】对角速度差rates_err进行PD控制,还需要加一个前馈。
【5】发布控制量_att_control。
图11 姿态控制
`