标签:
英文参考:http://dev.ardupilot.com/wiki/apmcopter-programming-attitude-control-2/
本节源自:http://liung.github.io/blog/apm/2014-08-31-APM-ArduCopter姿态控制概览.html
手动飞行模式,诸如自稳模式(Stabilize Mode)、特技模式(Acro Mode)、飘逸模式(Drift Mode),其程序结构如下图:
在主循环执行过程中(比如Pixhawk的任务调度周期2.5ms,400Hz;APM2.x为10ms,100Hz),每一个周期,程序会按下述步骤执行:
control_.pde
飞行控制文件(比如:control_stabilize.pde
,control_rtl.pde
等)。 1) angle_ef_roll_pitch_rate_ef_yaw()
:该函数需要一个地轴系坐标下滚转和偏航角度,一个地轴系坐标下的偏航速率。例如:传递给该函数三个参数分别为,roll = -1000
,
pitch = -1500
,
yaw = 500
代表飞行器此时向左倾斜10°,低头15°,向右偏航速率为5°/s。
2) angle_ef_roll_pitch_yaw()
:该函数接受地轴系下的滚转、俯仰和偏航角。和上面的函数类似,不过参数yaw = 500
代表飞行器北偏东5°
3) rate_bf_roll_pitch_yaw()
:该函数接受一个体轴系下的滚转、俯仰和偏航角速率(°/s)。例如:传递给该函数三个参数:roll = -1000
,
pitch = -1500
,
yaw = 500
代表飞行器此时左倾速率10°/s,低头速率15°/s,绕Z轴速率为5°/s。
AC_AttitudeControl::rate_controller_run()
函数,将上面所列举的函数的输出转化为滚转、偏航和俯仰输入,并使用set_roll,set_pitch,set_yaw
和 set_throttle
方法将这些输入发送给AP_Motors库。
另外,
1) set_alt_target_from_climb_rate()
:将爬升率(cm/s)作为参数,用来更新一个需要调整的相对高度目标。
2) set_pos_target()
:接受一个以系统中的home
位置作为参考点的3D位置矢量(单位:cm)。
AC_PosControl::update_z_controller()
。这样的话,就可以启用Z轴的方位控制PID循环,并向AP_Motors库发送低级别的油门信息。同样,如果调用了xy轴的函数,那就就必须调用AC_PosControl::update_xy_controller()
函数。 1) set_roll(),set_pitch(),set_yaw()
:接受在[-4500,4500]角度范围内的滚转、俯仰和偏航角。这些参数不是期望角度或者速率,更准确的讲,它仅仅是一个数值。例如,set_roll(-4500)将代表飞行器尽可能快的向左滚转。
2) set_throttle()
:接受一个范围在[0,1000]的相对油门值。0代表电机关闭,1000代表满油门状态。
output_armed
,负责将这些滚转、俯仰、偏航和油门值转换为PWM类型输入值。这转换的过程中,会应用到stability patch,用来控制由于飞行器构型限制所引起的轴系的优先级问题(例如四旋翼的四个电机不可能在做最大速度滚转时四个电机的油门同时达到最大,因为必须一部分电机输出小于另一部分才能引起滚转)。在执行函数output_armed
的最后,还将调用hal.rcout->write()
,把期望PWM值传递给AP_HAL层。hal.rc_out->write()
函数将接受到的来自于AP_Motors类中指定的PWM值,输出至飞控板对应的PWM端口(pin端)。标签:
原文地址:http://www.cnblogs.com/pinlyu/p/4634096.html