目录
序:嵌入式项目整体架构:
无人机方面做嵌入式编写的飞控总结
首先这部分分为软件(驱动层+操作系统与中间件+功能模块(算法栈&其它))和硬件(主控,模组,电源)
1软件:
- 最基础的驱动开发(iic,spi和uart)解出传感器的原始数据(要记住传感器测量的数值不是真实值);
- 对传感器的数据进行处理的几种方法(即算法--在飞控里面主要是经过处理之后得到位置/速度估计和姿态估计,可能需要障碍估计等等,这需要知道 姿态算法,ekf,ukf,Ins+gps+ekf组合导航算法 等待);
- 得到估计值就可以做PID控制了(包括姿态控制pid和导航运算pid);
- 飞行平稳就能让飞机去做自己的执行任务(这部分可能是巡线航测航拍,农业植保,电力巡检等等---这其中就设计拍照控制,电子围栏设定,电池管理等等......) ---- 而这就需要手机app或者电脑的软件的支持。。。。等等。。。
所有,这是第一张图最基本的逻辑;
2硬件:
应该是要用的模块化的思想(硬件必备最基本的四大件:GPS模块,飞控模块,imu模块,电源/led模块)
除了四大模块之外,按自己所需的,可以开发osd,光流等等。。。毕竟一旦量产,节省都是钱
除了飞控和其电路,还要知道云台的调试和使用,结构如何设计。。。。。
1 PX4/Pixhawk的软件体系结构
PX4/Pixhawk的软件体系结构主要被分为四个层次,这可以让我们更好的理解PX4/Pixhawk的软件架构和运作:
- bsp:提供硬件驱动程序
- RTOS: 提供内核+组件(IO设备管理框架,网络,UAVCAN和故障安全系统)。
- 中间件与基本库: 这一层包含了所有的系统库和基本交通控制的函数。
- 应用程序框架: 这是为操作基础飞行控制的默认程序集(节点)。
- 应用程序的API:这个接口提供给应用程序开发人员,此API旨在尽可能的精简、扁平及隐藏其复杂性。
2、下图所示为PX4的算法顶层架构。
我们可以将上图从中间分成两个看
其中右边为传感器采集(GPS、optical_flow、inertial_sensors)回来的数据,并经过一些处理(position_estimator、attitude_estimator)发布到msg消息中,供左侧控制程序订阅使用。
position_estimator是当前位置,attitude_estimator是当前姿态;LPE和EKF2融合了两个估算;三选一即可
px4的控制部分程序,采用的是分层设计。
- 用户设定commander和stickmapper(摇杆映射,RC)生成控制命令
- 控制命令使navigator去生成期望的位置信息
- pos_ctrl通过期望位置与实际位置的偏差使用PID的算法输出期望姿态信息
- att_ctrl通过期望姿态信息与实际姿态信息使用PID输出控制信息
- 最后经过混控器mixer根据机型进行力矩分配然后经过motor_driver输出实际舵面控制的pwm占空比。(eg四旋翼:最后通过mixer和motor_driver控制4个电机)
左边是整个飞控系统的控制功能实现
- 用户通过地面站或者遥控器发出模式切换以及摇杆操作对飞行器进行控制,
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)。
3.涉及内容
• 1.传感器驱动编写&地面站上位机的使用
最基本的协议:UART、I2C,SPI、CAN…
•2.滤波算法和估计算法 : ekf,ukf,Ins+gps+ekf组合导航,
KF-Kalmanfilter卡尔曼滤波
EKF-ExternKalmanFilter扩展卡尔曼滤波
•3.姿态算法:
坐标系统+EKF+一阶隆格库塔+欧拉角
•4.Pid控制算法
位置-速度双环串级控制
位置-速度-加速度三环串级控制
•5.导航级pid-任务规划和控制
6地面站开发:
app:eg.tower去谷歌框架、视频融合…
pc上位机:eg.mp界面修改和简化,协议的修改…
7、开源飞控功能开发:
航线规划、自拍、航测、电子围栏、建模
(27条消息) PX4:【系统架构】_MangoGZH 的博客-优快云博客_px4架构
(27条消息) 作为无人机方面做嵌入式编写的飞控总结0_xiaoxilang的博客-优快云博客_无人机飞控开发心得