开源飞控初探:无人机技术栈

Posted hursing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开源飞控初探:无人机技术栈相关的知识,希望对你有一定的参考价值。

自动驾驶

无人机的自动驾驶AutoPilot可从三个场景来理解:

  1. 指定目的地后让它自己飞过去,且可以指定途经点,整个流程即执行航线规划。这些点是三维的,即经纬度+海拔高度。

  1. 在水平面方向飞行时保持高度

  1. 让它悬停

第一个场景相对好理解,三维点只是比起日常用的高德地图多了高度这个维度。由于地球是个球体,当两个地球表面的点足够远时,例如广州和纽约,我们难以应用“两点之间直线最短”的方案来直接过去,因为不可能穿过地底。所以飞过去时无人机需要不低于一定高度,不能坠毁,然后才是像看平面地图一样按二维的经纬度计算不断靠近目标。

此时就需要结合第二个场景“保持高度”一同考虑了。无人机怎么知道自己的高度呢?靠这些部件。

  1. 气压(高度)计,得到海拔高度,即距离海平面的高度。不同海拔,气压强度是不同的。在三千米范围内,每升高12米,大气压减小大约133帕。

  1. 超声波传感器,在离地表5米内时,它的精度最高,得到的是离地距离。原理就跟雷达一样,发射超声波并接受反射,通过收发时间差和声波速度得到距离。

  1. 光流传感器。它配有摄像头,通过对比运动过程中的图像变化,得到不同方向的位移速度,再通过一定算法得到粗略的位移量。它应用了机器视觉(computer vision),原理可理解为类似于光学鼠标。

无人机会通过算法综合各种部件的数据来评估高度,并非靠单一部件。

自动驾驶的第三个场景“悬停”,就是俗话说的“不动”,但空中的“不动”需要考虑重力和风力。自动驾驶能让人不操控的情况下,保持经纬度和高度不变,也就是通过控制自身姿态和电机转速,抵消重力和风力的影响。如果单对抗重力,想人工控制螺旋桨转速来保持高度不变,还是有可能的,但面对不断变换速度和方向的风而言,人的反应速度不足以让经纬度变化幅度保持很小。

总结而言,无人机自动驾驶就是按预期目标自动调整姿态,而这是通过控制各个螺旋桨电机的转速实现的。更具体的场景请参考“飞行模式”一节。

其它部件

  • 全球卫星定位系统GPS:在导航和定点时获取相关位置信息

  • 加速度计:获取相对于机体坐标系的加速度

  • 陀螺仪:飞行姿态感知

  • 磁传感器:测量获取磁偏角。指南针,获取机头指向。

  • 惯性导航单元:包含加速度计、角速度计(陀螺仪)和气压高度计。不依赖外界信息来定位的导航系统,就是惯性导航。GPS依赖卫星,没信号就导航不了,所以不属于惯导。

  • 无线传输,可以是WiFi、4G、无线电、电台

  • 主控芯片:接受传感器数据,处理计算后,通过电路控制电机转速。

  • 主板:集成所有部件的电路板

  • 螺旋桨和电机

  • 电池

上文提到的所有部件的集合,即除支撑作用的机架外,整体被称为(广义上的)【飞控】!

地面站

地面站狭义是指PC上的Mission Planner或QGroundControl这两个软件。广义上则是个形象的称呼,所有在地面能遥控飞机的东西都算地面站。因为具有控制功能的代码做成了SDK可以集成到任意App上,所以实际上的地面站可以有很多种。主要功能有:无线电通信、航点规划(mission)、日志读取展示分析、地图、手柄控制等。

遥控器

无线电遥控器也是一种地面站,只是只有单纯的控制功能。遥控器的4个必备操作是控制无人机的偏航yaw、俯仰pitch、横滚roll和油门throttle。油门即电机转速,体现为飞行速度。yaw+pitch+roll三个角度值一起构成描述了无人机的姿态attitude

【点击】=>pitch yaw roll是什么

飞行模式

这节对理解无人机操控较重要,请看参考资料。【点击】=>ArduPilot飞行模式介绍

列表式汇总: 飞行模式介绍

切换到自动模式并解锁,如果飞控内保存有mission就会执行航线。

接口与协议

MAVLink,请参见第五章MAVLink协议和Java库

其它非无人机特有的总线、协议、接口,有CAN、串口转USB、数模转换等。

综合加深认知

请快速浏览一下这篇文章,可对前述内容加深认识。【点击】=>APM飞控完全教学指南

控制算法

这些算法都用于处理各种传感器的输入数据,从而得出对电机的调整数值,进而控制无人机姿态。

请看现成资料了,数学学得好的话这不算难:

编程语言

MAVLink的基础库生成是用python。飞控固件都是C++,有shell和lua脚本。Mission Planner是C#,QGroundControl是Qt C++。

参考资料

以上是关于开源飞控初探:无人机技术栈的主要内容,如果未能解决你的问题,请参考以下文章

开源飞控初探:无人机技术栈

开源飞控初探ArduPilot::Copter固件源码分析

开源飞控初探ArduPilot::Copter固件源码分析

开源飞控初探ArduPilot::Copter固件源码分析

开源飞控初探:无人机的历史

开源飞控初探:无人机的历史