Pixhawk原生固件PX4之顶层软件结构
下图所示为PX4的软件顶层架构,很重要。
-
左边是整个飞控系统的控制功能实现
用户通过地面站或者遥控器发出模式切换以及摇杆操作对飞行器进行控制,
commander
根据飞行器的当前状态对用户想要切换到的状态main_state
进行判断:是否能够切换到目标状态,确定最终状态。stickmapper
见名知意,摇杆映射,参见px4io.c
、sensors.cpp
navigator
决定飞行器最终会怎么做nav_state
位置控制提取
local postion
(光流+IMU)或global postion
(GPS)数据根据导航状态进行串级PID控制。外环输入位置差输出速度,内环输出推力。位置控制靠姿态控制实现,采用倾转分离的解耦合控制方式,先对齐Z轴再对齐偏航角。同样采用串级PID的控制方式,外环输入姿态角误差,输出姿态角速率,内环最后输出所需的力矩。
mixer
混控器根据机型进行力矩分配。根据叶素理论,螺旋桨旋转产生的s升力/扭矩与转速的平方以及拉力系数/扭矩系数相关。构造力矩分配矩阵。驱动电机,控制飞行器飞行。
-
右边是位姿估计算法的实现
GPS
确定global postion
,optical flow
确定local postion
,二者有其一才能进入到POSCTL
模式。姿态估计是一切的基础,通过融合惯性传感器(和光流)各自优点解算出飞行器的当前姿态信息。
整个飞控内部的通讯通过uORB实现
PX4软件系统飞控内部通讯由uORB中断请求处理器实现,飞控与地面站的通讯全部走MAVLink,uORB中话题的结构体与MAVLink消息的结构体一一对应,数据的传递参看mavlink实现模块。下图所示为PX4软件系统中各部分时间的联系,通过uorb.
对应uORB的话题发布者,两件事:公告(advertise)、发布(publish);对于话题接收者,三件事:订阅(subscribe)、查询(poll阻塞式等待或check更新)、复制(copy)。
牢牢记住此图