最近学习了关于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自主无人机开发你需要懂得一些“小事”(上)相关推荐

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

    受够了假期的人挤人吗?快来参加阿木实验室线下集训吧! 阿木在此重磅推出"国庆特训营 "!本次特训由Prometheus项目创始人主讲,手把手授课!五天时间带你入门无人机科研圈,让你 ...

  2. Prometheus自主无人机入门笔记

    本部分介绍自主无人机组成框架.自主无人机关键技术 1.1 自主无人机的组成框架 1.1.1 硬件框架 自主无人机硬件组成有机架.动力系统(包括电机.电调和浆).指挥系统(机载电脑.飞控板).通信系统( ...

  3. ROS实验笔记之——基于Prometheus自主无人机开源项目的学习与仿真

    最近在公众号上看到Prometheus无人机的资料,发现里面开源了很好的无人机的仿真环境,并且有很好的教程.而本人正好在上<Introduction to Aerial Robotics> ...

  4. 技术分享 | 基于EOS的Dapp开发

    区块链技术是当前最能挑动社会舆论神经,激起资本欲望的现象级技术.去中心化的价值互联,信用共识,新型组织构架,新的生产关系和智能合约,颠覆法币的发行流通体系和记账体系.这些新的技术都让人充满想象,充满向 ...

  5. 【华为云技术分享】盘点物联网常用开发板

    摘要:本文主要介绍物联网中目前较为常用的几款开发板,简单介绍一下各自的特点,希望对你有所帮助. 1 引言 众所周知开发板是物联网架构中的感知层智能设备,这类设备通常有芯片.通信模组.以及操作系统组成. ...

  6. 技术分享|单元测试推广与实战-在全新的DDD架构上进行单元测试

    源宝导读:单元测试是伴随软件工程出现和发展的,怎么做大家可能各有见解.本文介绍了单元测试中的反模式,强调了可测试性的重要性,并以 DDD 架构项目的迭代进程作为示例,演示了单元测试的组织过程,展示了单 ...

  7. GitHub 优秀的 Android 开源项目 淘宝技术牛p博客整理开发中最常用的GitHub上 优秀的 Android 开源项目整理(精品)...

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...

  8. 【Prometheus 自主无人机平台 】无人机蜂群拦截系统作战构想与关键技术论文解读

    无人机蜂群拦截系统作战构想与关键技术&论文解读 文献链接: 时事背景: 无人机蜂群拦截网络系统概念: 无人机蜂群拦截系统: 无人机拦截系统组成 拦截群 侦察群: 反辐射群: 电子对抗群(干扰群 ...

  9. 【华为云技术分享】全WEB化开发体验,开发者新利器华为云CloudIDE即将揭秘

    随着公有云的不断普及,无论是企业办公.社交网络,还是线上娱乐都越来越依赖云上提供的各种服务,微服务.DevOps.持续交付.容器化等云原生技术和理念也在企业上云大背景下不断对现有的开发活动以及开发工具 ...

  10. 【技术分享】美团点评数据仓库开发模式演进

    本文整理自DTCC2016主题演讲内容,录音整理及文字编辑IT168@田晓旭@老鱼.如需转载,请先联系本公众号获取授权! 演讲嘉宾 宋洪鑫 美团点评高级工程师 2014年加入美团数据平台,专注数据仓库 ...

最新文章

  1. 结合video.js播放rtmp格式、flv格式、mp4等格式的视频
  2. 【读书】正则指引-3-括号
  3. php集成jpush教程,Laravel 集成 JPush 极光推送指北
  4. QT线程使用收集示例
  5. Fatal error compiling: java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags
  6. 八年级计算机教学论文,初二数学教学论文范文
  7. (计算机组成原理)第五章中央处理器-第一节:CPU的功能与基本结构(运算器和控制器等寄存器)
  8. linux启动找不到内核,linux – PXE启动 – 在TFTP服务器上找不到内核
  9. dispatcherServlet流程图
  10. 面向对象16:代码块、final关键字
  11. CAN通讯与RS485通讯区别
  12. 微信公众号应用开发(一)
  13. 评价微型计算机有哪些主要性能指标,计算机性能指标有哪些
  14. 微信验证服务器地址有效性
  15. SDWebImage 第三方框架的使用——网络图片的处理操作
  16. 【优化求解】基于头脑风暴优化算法BSO求解最优目标matlab源码
  17. 13-新手小白如何选购笔记本电脑?
  18. 2022-2028全球多通道光纤旋转接头(FORJ)行业调研及趋势分析报告
  19. Android uses-permission 权限大全
  20. 去掉router-link文字的下划线

热门文章

  1. cogs426 血帆海盗 最小割定理
  2. 三顾茅庐:从刘备面试孔明得出的选股经验
  3. 塔防游戏制作教程(三)
  4. 江苏省泰州市谷歌高清卫星地图下载
  5. 【YOLOV5-5.x 源码解读】plots.py
  6. 算法 图8 How Long Does It Take
  7. I/O模型(同步、非同步、阻塞、非阻塞)总结
  8. Jenkins项目配置-Nodejs项目(Vue框架)-全面
  9. 超声波清洗机 - 拆机与逆向工程
  10. 中国氨基酸表面活性剂市场前景展望与发展建议分析报告2022-2028年