姿态控制的流程图,外环产生角速率,内环产生期望加速度(电机推力)。
外环根据期望的位置、速度,计算输出相应的姿态信息。
外环输出的姿态信息作为内环的输入,内环计算出期望的加速度。
ROS-mavros-PX4加速度控制
要写的飞控算法本来的输入是roll、pitch以及推进力,由于PX4不支持输入具体大小的推进力,改用三方向加速度(可用旋转矩阵进行变换)进行控制。但是PX4的setpoint_accel实际控制效果很差,github上也有人说它不可用。
解决方案:参考阿木实验室的px4_command,使用attitude输出,个人用的是cascade pid,计算出throttle转换为attitude,项目内其他的几种方法就基本是accel->thurst->throttle->attitude,项目内有这几种量的转换函数。个人试过直接将(单数值)推进力照函数转换为油门,但是失败,可能是没有PID闭环,也可能是没搞懂单方向/三方向thrust的具体含义?
PX4中的控制分配
一般来说,旋翼无人机的控制分为位置环控制+姿态环控制两部分:
- 位置环输入
- 设定量:期望位置、期望速度、期望加速度等
- 状态量:当前位置、当前速度
- 位置环输出
- 期望姿态角(roll + pitch)、期望升力
- 姿态环输入
- 设定量:期望姿态角(roll + pitch + yaw)、期望升力
- 状态量:当前姿态角、当前角速度
- 姿态环输出
- 期望力矩(Mx、My、Mz)、期望升力(T)