att_control模块主要实现飞行器的姿态控制,根据上层的控制模块(pos_control)输出的目标设定值输出电机的控制信号,使飞行器实现目标的姿态。
多旋翼的姿态控制在对应的模块mc_att_control中实现,其主要运行函数为mc_att_control_main.cpp中的MulticopterAttitudeControl::run()函数
在这里插入图片描述
同pos_control类似,函数首先进行一些消息订阅的初始化,然后开始工作循环,工作循环按照一定频率运行,它的程序流程如下
在这里插入图片描述


在每一个循环中
1 首先或许控制所需要的数据,包括控制模式(control_mode),手动控制(manual_control),飞行器姿态(attitude)等
2 计算角速度设定值(rates setpoint)


  • 根据control_mode下的标志位,可以有三种方式
    a 通过根据目标姿态值(_att_sp)来计算
    b 由手动控制来实现(acro模式)
    c 从消息订阅(topic)中直接拿,应该是在offboard控制模式下

3 进行角速度控制,实质上就是根据目标角速度(_rates_sp)计算电机控制(_att_control, _actuators.control),并发布,这里电机控制包括四个通道——滚转(roll),俯仰(pitch),油门(throttle)和偏航(yaw)
4 发布电机控制信号(actuator control)


电机控制信号(actuator control)会在电机驱动中转换成实际的电机输出信号(actuator_outputs)