技术分享 | 关于Prometheus自主无人机开发你需要懂得一些“小事”(下)

Posted 阿木实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技术分享 | 关于Prometheus自主无人机开发你需要懂得一些“小事”(下)相关的知识,希望对你有一定的参考价值。

上期我们讲解了关于(Prometheus自主无人机开发课程的学习心得,大家可以回顾一下,本期继续为大家带来Prometheus自主无人机,开发的流程和控制模块的讲解。

3. 开发流程

 

1.硬件的选择

整个开发流程先从硬件选择开始。这就需要我们前面所提到的知识,对于自主无人机组成构架是否有一个清楚地认知,你才能够选择合适的机架、机载电脑和传感器等等来组成属于你自己的无人机。

2.软件(功能)选型

对于软件的选型就是对飞控软件、机载处理软件的选型。机载电脑处理软件这里除了包括ROS,Mavros的功能包还需要Prometheus及其他的功能包。

 

3.二次开发

一般是不需要用到这一块内容的,目前Prometheus开发出的功能已经很详尽了,可以直接供大家使用。但如果想要了解,需要先行懂得嵌入式开发和Prometheus所有功能,再来进行研究。

 

4.仿真实验

以上都做好后,我们可以先进行仿真实验,先对代码进行功能测试,测试是否可行,之后进行实物实验,可以节约时间成本。

 

5.最后一步就是进行实物实验

 

4.Prometheus四大模块

Prometheus目前有四个学习demo,分别为控制模块、规划模块、目标检测模块和SLAM模块。这里由于时间问题,只详解了控制模块,对于其他模块,可以参考铂贝学院有关Prometheus的课程自行学习。

 

https://bbs.amovlab.com/plugin.php?id=zhanmishu_video:video&mod=video&cid=43(Prometheus课程网址)

 

4.1. 控制模块

图片

图片 

位置控制

位置控制可以根据控制目标分为三种:位置追踪(定点)、速度追踪(定速)、轨迹追踪。目前广泛适用于无人机自动驾驶仪的控制为串级PID控制器,可以实现位置追踪和速度追踪。而轨迹追踪更常应用于理论学术研究。

 

怎么判断你所设计出来的模型是不是稳定的呢?可以根据数学模型的形式,经过计算,通过稳定判定方法判断稳定性。主要判定方法有:劳斯判据、赫尔维茨判据和李雅普诺夫。劳斯判据和赫尔维茨判据主要通过判断系统的特征值是否小于零来判定系统是否稳定,而李雅普诺夫主要通过考察系统能量的衰减来判断稳定性。

 

四旋翼常见的控制器可以按着有无模型、模型是否线形进行分类。按着模型是否线性分为线性和非线性,

线性:LQR;

非线性:反步法,滑膜,自适应,H无穷等。

 

姿态控制可以分为三类:传统yaw-roll-pitch分别控制、旋转矩阵、四元数。

 

对于控制程度需要了解的是,控制程度的优劣取决于很多方面,包括系统的模型、系统的状态估计(例如当前反馈的位置姿态速度准不准)、控制算法(理论算法,实现出来效果是否可以)、闭环结构的响应等多方面因素。

 

如果想要提升控制性能,可以从以下几个点进行操作。首先要建立更准确的模型(比如参数辨识更好或者参加了动力学模型),之后可以提升系统状态估计(使用GPS、差分GPS),最后改变控制算法(一般PID控制就足够用了),最后可以更换性能更高的硬件。需要值得注意的是提升控制性能需要整体提升才可以,而算法弥补不了整体结构。

 

在Prometheus项目中,px4用到的控制为:PID串级控制、位置环控制。控制框架为三个模式——位置控制、姿态控制和混控。而混控一般不会用到,除非涉及到新机型开发,例如要用到五旋翼或者特殊构型。串级PID的控制方式有很多优点,比如内环相应比外环快等,所以在工程实现中比较多用到串级PID的控制方式。

 

PX4中位置环控制

 

图片

 

图片

图片

 

下面是位置环控制模块文件数,其中:

CMakeList.txt是编译脚本,

mc_pos_control_main.cpp是主程序,

PositionControl.cpp是控制算法,

mc_pos_control_params.c是参数文件。

 

图片

 

图片

 

图片

 

图片

下面是姿态环源码,其内容类似于位置环控制模块。

 

图片

 

接下来介绍怎么进行二次开发,用姿态环二次开发作为例子。

 

由于姿态环属于底层,所以建议在飞控端修改源码。直接修改源码前,需要将所有代码都看一遍。当然也可以选择第二种方法,使用Simulink转C语言后导入。修改完代码后要经过测试流程。通过理论推导,进行Matlab仿真。代码的实现可以通过gazebo仿真器测试代码逻辑,最后通过转台测试进行性能对比后就可以进行实飞测试了。

 

总的来说对于上层开发者,例如做视觉和规划的,只需要了解自定义的每一条msg的含义,直接用于订阅和发布。其次,能够了解控制模块所提供的接口,用于发布正确的指令给控制模块执行。最后还需要了解一下控制模块的一些常见逻辑,更利于开发使用。

 

对于位置环控制器开发者,需要了解位置控制器的代码的编写,也需要使用terminal_control进行各种控制测试。

 

对于编队控制开发者(程度较难),需要掌握PX4仿真机理,知道如何增加飞机等。最后还需要了解编队控制算法。

 

好了,今天的分享内容到此结束啦,以上内容是通过学习铂贝学院《Prometheus自主无人机二次开发》课程而来的,如有其它问题可以观看课程自行学习。

 

https://bbs.amovlab.com/plugin.php?id=zhanmishu_video:video&mod=video&cid=43(Prometheus课程网址)

- End -

 

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。

以上是关于技术分享 | 关于Prometheus自主无人机开发你需要懂得一些“小事”(下)的主要内容,如果未能解决你的问题,请参考以下文章

技术分享 | 避坑指南-无人机自主降落代码解析

从仿真到实飞,Prometheus自主无人机开发全覆盖!快来参加阿木实验室线下集训吧!

技术分享 | 如何让无人机实现室内自主搜寻?

3-6期Prometheus开源项目之自主无人机精选问答

第1期Prometheus开源项目之自主无人机精选问答

第2期Prometheus开源项目之自主无人机精选问答