姿态控制流程图
2022-02-16 18:39:36 2 举报
Pixhawk姿态控制流程图
作者其他创作
大纲/内容
从vehicle_attitude_setpoint中获取设定姿态值,存储到变量_v_att_sp中(包括期望三轴角度、期望四元数、油门量、起落架等)
从control_state中提取当前角速度rates
extern \"C\
由当前旋转矩阵 R、(rx ry 0)、θ经过罗德里格变换得到只重合z轴所需的旋转矩阵 R_rp
将_att_control和_thrust_sp等数据通过变量_actuators.control公告及发布到主题actuator_controls中
更新所订阅主题的其他参数
否
将积分项∑(I*Δ*dt) 通过变量_rates_int公告及发布到主题mc_att_ctrl_status中
θ90°
e_R = (θ*rx,θ*ry,ψ)
函数 start()
采用角度控制
偏航权重yaw_w=R_sp[2][2] * R_sp[2][2]
函数结束
将_rates_sp和_thrust_sp数据通过变量_v_rates_sp公告及发布到主题vehicle_rates_setpoint中
函数parameters_update() 主要进行各种参数配置,包括:PID和反馈各项系数;不同模式下角速度限制;角速度/角度控制模式的阈值等各项配置。初始的配置参数储存在mc_pos_control_params.c文件中,在构造函数中将其读取出来
从_v_att_sp中取出油门量,存储到变量_thrust_sp中
_rates_sp取为期望三轴角度_thrust_sp取值为期望油门量
几点说明:1. 本函数的主要思路是输入当前姿态和期望姿态,计算得出三轴的控制量,发布到actuator_controls中。2. 角度控制环中将偏航角与俯仰滚转角分离,主要原因是偏航角的响应要比其他两轴慢。欢迎多批评指正!460864915@qq.com
_rates_sp 的范围限制处理
从control_state中取出当前四元数,得到当前旋转矩阵 R
函数control_attitude(dt)角度控制环
从vehicle_attitude_setpoint中获取设定姿态值,存储到变量_v_att_sp中
是
mc_att_control_main.cpp工作流程图
使能了比率控制模式
配置阻塞时间(100ms)
是否使能了rattitude控制模式
获取上次迭代中的当前角速度rates(n-1)和期望角速度_rate_sp(n-1)
pitch或者roll方向的遥控输入是否超过阈值
_task_should_exit==ture
R_rp[*][0] % R_sp[*][0]得到旋转向量,从而得到yaw方向的旋转角度ψ
采用rattitude控制
k=cosθ*cosθ*yaw_w
读取control_state中的数据:control_state中的数据由姿态解算发布,包括三轴位置、速度、加速度、角速度、四元数、空速等
限制dt在[2ms,20ms]之间
积分饱和处理
RT * ( R_sp[*][3] % R[*][3] )得到使得期望坐标系和当前坐标系z轴重合所需的旋转,在机体坐标系下的的旋转轴向量e_R(包含旋转轴方向和旋转角大小)
perf_end(_loop_perf)该类函数主要用于对程序运行状态进行评估监控
计算两次迭代之间的时间 dt,单位为秒
函数内部
perf_begin(_loop_perf)
_rates_sp和_thrust_sp的值完全由遥控给出
是否为尾坐式飞机
函数 mc_att_control_main()
RT * R_sp得到的结果转换为四元数,取虚部得到(q1 q2 q3)
by 蜗牛拉火车
由e_R得到旋转轴单位向量 (rx ry rz) 和旋转角度θ。可以证明rz=0
e_R=θ*(rx ry 0)
control_attitude_rates(dt)角速度控制环
进入While()大循环
从_v_att_sp中取出期望四元数,得到期望旋转矩阵 R_sp
订阅以下主题:vehicle_attitude_setpoint vehicle_rates_setpointcontrol_state vehicle_control_modeparameter_update manual_control_setpointactuator_armed vehicle_status multirotor_motor_limits
_rates_sp = e_R * P其中:P为角度的比例项系数
期望角速度减去当前角速度得到角速度差:Δ= _rates_sp - rates
由函数calcOptimalRates()得到_rates_sp
设定油门衰减因子tpa(当油门大于某一值时,减小控制的比例项系数)
函数 task_main()
控制量:_att_control=Δ*tpa*P+ D*(rates(n-1)-rates)/dt+ ∑(I*Δ*dt)+ FF*_rates_sp
0 条评论
下一页