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

Posted 阿木实验室

tags:

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

最近学习了关于Prometheus课程,以下是我对该课程的大致了解,写的可能有点偏基础,但是想和大家一起分享一下学习经验。顺便想鼓励一下想学无人机的盆友们,如果你想接触但却担心没有基础感觉手足无措的话,请不要担心,网上现在对于无人机已经有了非常充足的资源以供学习,建议大家先从PX4开发开始学习。

本篇内容主要是介绍关于我自己对于Prometheus自主无人机开发课程的学习心得,写的很基础也是希望没有基础的小伙伴们也能看得懂。

本篇文章文字内容较多,是我的个人学习心得的分享,全程读完大约需要十分钟,希望大家能耐心读完。

 

 

1.基础概念

在学习Prometheus之前,需要先行掌握一些基础知识。首先C++是首当其冲的,如果都不会C++那么基本听有关于开发的课都等于听天书一样。

其次,开发环境也是非常重要的,一般来说我们需要知道如何使用Ubuntu系统,这对于开发者是最常用的开发环境。由于是在一个新平台上建立,如果想要自己开发最后到真机实现的话,对于无人机的相关知识理论也要了解的非常清楚。对于无人机的选型啊,平台搭建具体需要什么需要了解的很清楚。之后,要对ROS有个清晰地认识,还有MAVLink通信协议,这个在PX4开发也有提到过的,最后就是对MAVros功能包的熟悉和了解。

 

关于C++相关内容相信学工科和学计算机的同学们基本都已经学完了。但是没有学过的童鞋也不用担心,可以关注阿木公众号,后台回复C++即可领取有关C++的精品学习资料。有关Ubuntu系统的安装与使用,在铂贝学院也有相应的课程。关于其他基础概念我会在后面一一介绍的。

 

https://bbs.amovlab.com/plugin.php?id=zhanmishu_video:video&mod=video&cid=39

(Ubuntu系统教程)

 

 

1.1. 无人机相关知识

 

无人机组成框架

无人机基本组成主要有:机架、动力系统(包括电机、电调和浆)、控制系统飞控板、通信系统(数传、图传、遥控器)、电池等部分。而自主无人机还需要机载电脑,以便给飞控提供上层控制指令。还需要传感器,例如摄像头、激光雷达等等,按着功能需求进行选择。在进行自主开发时需要考虑到对无人机各个组成部分的选型,例如机架选型就需要考虑到轴距、续航、可扩展性啊等问题。所以希望大家对无人机组成框架有一个清楚地认知,以方便后续对无人机相关课程的学习。

 

四旋翼无人机模型(基本组成)

首先我们要明白无论搞学术还是做工程研发,为什么都需要建模。

建模就是为了理解事物而对事物做出的一种抽象,对于事物的一种无歧义的书面描述。而建模是研究系统的重要手段和前提。而模型描述系统的手段和方法也是多种多样的。可以通过对系统本身运动规律的分析进行建模也可以根据事物的机理来建模等等各种方法。

 

而对于四旋翼无人机建模的意思就是通过数学表达式将四旋翼无人机的运动机理用数学表达式表示出来。例如可以表示出四旋翼的飞行性能等,所以对于四旋翼的模型不仅仅是运动学模型,还包括电调模型、电机模型、电池模型等等一起组成的,这就要求我们要对无人机的整体框架要有个清晰地了解。

 

自主无人机功能框架

有关自主无人机功能框架的介绍,在这直接用“复杂环境下的自主导航定位与通用目标识别任务”作为例子:

 

图片

单目摄像头和云台等硬件属于感知模块,感知模块和决策模块相互可传递消息,外部任务指令是给到决策模块,决策模块紧接着传递给规划模块,规划模块进行路径规划或者建图,同时它也需要接受来自定位导航模块的信息,定位导航模块例如激光雷达、相机、IMU、GPS等硬件也将信息传递给规划模块和控制模块,最后控制模块给出控制指令到Mavros,从而最后控制飞控。

 

自主无人机关键技术

在这里自主无人机关键技术主要介绍六部分:自主感知、建图定位、运动规划、系统控制和集群任务。我们为什么需要这六个关键技术呢,这几个技术缺少其中之一是否可以?可以是可以,如果你组装无人机只是为了完成单一任务,可以不需要别的模块技术参与,但是你同样需要了解这几个关键技术具体是干嘛的。自主感知具体指目标检测与识别,就像人的五官一样,假如一个人身处森林中,首先你肯定需要调用五官去感知这个世界;其次建图定位技术这里最常用的是SLAM技术,作用就是对于飞机所在的地方绘制出地图,以方便定点定位;而运动规划呢,就是在无人机自主运动时所要达到的基础要求,例如不能撞到东西(避障),也不能本来简简单单走直线就能达到,结果无人机绕了一个大圈(路径规划),这样也不符合我们的要求;系统控制在无人机技术中属于底层控制,需要有ROS和MAVROS基础,最后关于集群控制顾名思义都是有关机间任务和阵型控制等等相关的技术开发。

 

四旋翼无人机参数的确定

有关飞机平台参数测量主要有质量、转动惯量、电机静态参数、静态模型辨识结果、动态模型辨识结果、辨识结果验证。为什么需要确定无人机参数,是为了前面我们所介绍的系统建模所用,通过参数才可以更好的选型,选好型后才能建立可靠的模型,这样在后续才能更好的研究飞行性能等信息去评判自己的设计的算法是否可靠。

 

PX4基础学习

对于飞控PX4相关内容在另一篇文章中有较为详细的介绍。也可以学习铂贝学院中PX4开发的相关课程:

https://bbs.amovlab.com/plugin.php?id=zhanmishu_video:video&mod=video&cid=39

 

1.2. 消息的传递

一般在自主无人机内部有三种消息的存在:uORB消息、MAVLink消息、ROS话题。

 

uORB是PX4内部的消息格式,在PX4开发中也有所介绍,MAVLink是用于飞控与外部的沟通,而ROS话题是ROS中通信的消息格式。作为开发者需要了解每种消息的定义,并且清楚有关于重要消息的流向,下面是对MAVLink、ROS和MAVROS的简单介绍。

 

1.2.1. MAVLink通信协议

MAVLink全称为Micro Air Vehicle Message Marshalling Library,是一种轻量级的消息传输协议,用于机载组件之间的协议。其实MAVLink通信协议在前面的PX4开发也有提到过相关内容,它不存在与任何一个结构中,但是它是飞控与外界联系的通信方式。MAVLink支持二次开发,也支持多种语言,比如C,C++,PYTHON,JAVA等,在这些编程语言里基本都含有Mavlink库,都遵循MIT协议。更为详细的内容可以去查找有关PX4开发里有关通信协议的介绍。

 

1.2.2. ROS

如果你想要学习无人机、机器人或者无人系统,那么ROS必定是需要掌握的一门技术。ROS全称为Robot Operating System,是一种得到广泛使用的机器人操作与控制系统软件框架。简单来说ROS就是一个平台,不仅提供了各种开源代码,还提供了开源代码之间通信机制。如果你想实现各个程序之间的通信,只需要下载这些功能包,然后写一个简单的启动脚本(即写launch文件),就能运行起来一个机器人系统。例如搭建一个机器人,电机、力传感器还有摄像头等等设备的底层驱动ROS都可以提供,同时ROS还可以提供PID控制代码、SLAM算法等等,都可以添加到里面。

 

那怎么去学习ROS呢?学过的人说学好ROS就是不断地了解这种通信和交流的机制,然后应用在自己的项目上。很多人的入门课程都是古月居老师的ROS入门21讲,在铂贝学院也有开设,通过这门课你可以快速了解什么是ROS,可以自己上手安装ROS,使用ROS命令行工具等等。

https://bbs.amovlab.com/plugin.php?id=zhanmishu_video:video&mod=video&cid=32

 

(ROS古月居课程)

 

1.2.3. MAVROS功能包

MAVROS就是MAVLink+ROS,MAVROS是PX4官方提供的一个运行于ROS下收发MAVLink消息的工具。利用MAVROS就可以发送MAVLink消息给飞机,即传递控制信息给飞机;同时还可以从飞控中接受数据,比如位置速度还有IMU数据等等。

 

我们需要清楚的知道飞控和Prometheus之间的消息流向,只有知道消息的流向才可以在出现问题时知道到底在哪一环出现了问题。总的来说从PX4到Prometheus,消息一般是状态量,像位置、速度、IMU等消息。它的消息流向为:

从某一个PX4模块 - PX4 mavlink模块 - mavros plugin - prometheus

 

从Prometheus到PX4,消息一般为控制指令,如期望速度、速度、解/上锁等消息。它的消息流向为:

prometheus - mavros plugin - PX4 mavlink模块 - 某一个PX4的模块

 

2.Prometheus是什么

Prometheus是一套开源的自主无人机软件平台,可以为无人机的智能与自主飞行提供全套解决方案。整个平台都是基于PX4开源飞控固件建立的,再加上成熟可用的机载电脑端程序,可以让人快速上手感受简洁快速的开发体验。相应配套的硬件P450也在3月29号上市,目前可供学习的有四个模块demo:控制、规划、目标检测还有SLAM模块。

 

 

2.1. 上手与使用

如果你已经有了硬件,或者你现在打算打开学习Prometheus这门课程,该从什么入手呢。首先需要了解有关Prometheus的上手操作流程。

1. 安装和编译,系统要求:

Ubuntu 1804 (推荐)

2. 基础知识的学习:

这里的知识就包括对无人机建模控制、PX4、ROS等相关基础理论知识的学习,在最开始我们就已经大致介绍过了,缺少哪一方面的知识可以去先学习相应的课程。

3. 第三步就是对于Prometheus源码的学习

建议最开始大家可以看注释读每一行代码,为了方便学习,源码中的注释已经尽量细化简化了,目的就是为了方便大家学习。

4. 仿真开发:

熬过了痛苦的理论学习,就可以自己上手亲自操作试一试了。但在实物操作之前还是建议先自己进行仿真测试,没有问题,再进行工程实现。

5. 实物开发。

 

2.2. Prometheus源码

在Prometheus源码中,主要介绍根目录下主要三个文件夹:Modules、Simulator、Experiment。

 

Modules模块是最重要的,很多功能模块例如控制模块的功能是底层控制,规划模块的功能是路径规划等等。Simulator是仿真器,目前使用Gazebo仿真器。最后experiment文件夹主要放有关真机实验的相关模块。

在源码中需要注意几个.cpp内容含义:(因为后期需要自己动手改其中的内容,所以需要懂得文件夹含义)

 

  • px4_pos_controller.cpp:

    接受操控指令,计算控制量,通过command_to_mavros.h发送至MAVROS,最终传递给PX4。

     

  • px4_pos_estimator.cpp:

    主要将板载计算机处理之后的位置数据传给飞控,读取飞控当前的状态信息。

     

  • px4_sender.cpp :

    主要将控制指令借口通过px4_sender发送给mavros,从而控制飞机进行相应的动作指令。

     

2.3. Prometheus框架

图片

控制模块在下面,传递一个drone_state话题代表在无人机状态,SLAM模块生成定位信息,也有见图信息给规划模块,规划模块生成轨迹或者路径给任务模块,如果有目标检测功能,也通过目标检测把信息给任务模块,任务模块经过一系列计算或判断任务决策执行后,通过

prometheus/control_command话题给控制模块,最后驱动MAVROS给到飞控。如果只是想应用功能实现功能,只需要多应用上层模块。但如果做研发的一定要把这个框架图了解的很清楚。

 

2.4. 仿真

首先要明确我们为什么需要仿真,对于大型复杂系统,直接实验的费用往往是十分昂贵的,而仿真仅仅只是需要其成本的1/10。出于安全考虑,对于某些系统(如载人飞行器、核电装置等),直接实验往往存在很大危险,甚至是不允许的;而采用仿真实验可以有效降低危险程度,对系统的研究起到保障作用。因为其不需要依靠硬件的支持,只需要下载仿真器在电脑上,改变代码端口连接,就可以做到模拟现实应用一样的效果,而一旦代码出现出问题在实体机上可能会炸机摧毁机体,但是仿真就可以避免这种问题。所以我们二次开发后需要先进行仿真再进行真机实验。

那么如何用Prometheus进行仿真呢?下面来介绍一下硬件在环仿真和软件在环仿真。

HITL(Hardware in the loop)硬件在环仿真,又称半实物仿真,是将需要仿真的部分系统硬件直接放到仿真回路中的仿真系统,它不仅弥补了纯数字仿真中的许多缺陷,提高了整个模型的置信度,而且可以大大减轻编程的工作量。硬件在环仿真是以实时处理器运行仿真模型来模拟受控对象的运行状态,通过I/0接口与被测对象相连接。

 

SITL(Software in the loop)软件在环仿真主要测试控制器模型与控制器模型代码实现之间的一致性。目前软件在环仿真一共有jMAVSim、Gazebo、AirSim三种仿真器。jMAVSim属于一种PX4原生轻量级仿真器,支持飞机类型只有四轴,可以支持多机仿真;AirSim是以Unreal虚幻引擎的插件开发的,有着目前来说最为强大的仿真效果,但是同时也是最吃电脑硬件的一个,对显卡,CPU及内存要求均最高,且安装过程中“坑”是最多的,目前github上更新维护较慢,所以AirSim在无人机仿真的应用是比较少的。

在Prometheus中我们用到的仿真器是Gazebo,它支持旋翼、固定翼、倾转、小车等,是所有仿真器中支持平台最多的仿真器。而硬件在环仿真(hardware in the loop),又称半实物仿真,是将需要仿真的部分系统硬件直接放到仿真回路中的仿真系统,它不仅弥补了纯数字仿真中的许多缺陷,提高了整个模型的置信度,而且可以大大减轻编程的工作量。

所有飞控PX4和仿真器Gazebo之间的通信都是通过MAVLink消息来进行的。而SITL使用simulator模块中的simulator_mavlink.cpp来处理这些信息的;HITL是通过mavlink模块中的mavlink_receiver.cpp来处理信息的。

 

 

2.5. 功能介绍

现在Prometheus可以实现的功能有无人机控制、多编队控制、建图、ORB-SLAM、深度学习等功能。在无人机控制中可以对无人机位置换控制器二次开发,Prometheus中内置多个实例开发程序同时也提供了测试工具,可供大家一起学习。多编队控制主要是指无人机之间分布式通信和集群之间的控制方式。在建图中传感器可选择双目,RGBD相机,激光雷达,使用的是RTAB-Map或Octomap。深度学习板块中,可实现KCF框选追踪和数字识别功能。

 

 

本期分享到此结束,下期我们再讲解Prometheus自主无人机开发的流程和控制模块的介绍,关注阿木实验室带您了解更多知识!

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

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

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

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

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

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

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