开头说两句
do_control(dt) 下主要包含 以下两个模块,本身只是一个框架而已。
- 手动控制:control_manual(dt)
- 非手动控制:control_non_manual(dt)
文中看do_control(dt)源码
///
void
MulticopterPositionControl::do_control(float dt)
{
_vel_ff.zero();
/* by default, run position/altitude controller. the control_* functions
* can disable this and run velocity controllers directly in this cycle
* 默认运行位置控制器和高度控制器。control_* 控制程序也可以失能该项,在该循环中直接运行速度控制器 */
_run_pos_control = true;
_run_alt_control = true;
if (_control_mode.flag_control_manual_enabled) {
/* manual control
* 手动控制 */
/* 该子程序有源码解读,如需查看,请至文后链接 */
control_manual(dt);
_mode_auto = false;
_hold_offboard_xy = false;
_hold_offboard_z = false;
} else {
/* 非手动控制 */
/* 该子程序有源码解读,如需查看,请至文后链接 */
control_non_manual(dt);
}
}
最后看俩子程序
mc_pos_control.cpp 之 control_manual(dt)
mc_pos_control.cpp 之 control_non_manual(dt)