文章目录
- 标题 : Prometheus 二次开发课程入门:
起源: 根据戚博士整理讲解的资料整理的学习笔记,有兴趣的同学可以去系统学习下 –
–
- 课程网址:https://bbs.amovlab.com/plugin.php?id=zhanmishu_video:video&mod=video&cid=43
- 课程介绍: 本课程偏重Prometheus项目中的基础知识和操作实践,适合项目入门者,购买课程后会定期安排线上答疑活动(语音交流,方便透彻!)
- 课程项目网址 : https://github.com/amov-lab/Prometheus
Prometheus全自主无人机开源软件平台
项目创始人介绍
- 戚煜华
- Prometheus开源项目创始人
-
Ø 阿木实验室P系列无人机技术负责人
本科及博士毕业于北京理工大学,在自主无人机平台搭建及二次开发方面经验丰富 - 参与多项航空航天科研院所无人机相关项目
- 曾获得2017年国际微小型无人机比赛第三名
-
已在铂贝学院开设PX4自主无人机线下培训课程10余次,累计培训学员300余人次。 目前在International
Journal of Systems Science及Robotics and Autonomous Systems等SCI期刊上发表论文4篇,会议论文3篇。
主要研究方向为:无人机控制、自主避障
背景
多旋翼无人机发展历史:
l 早期(1907 – 1990):大型载人旋翼飞行器,军用为主
l 复苏期(1990-2004):MEMS普及,最早的消费级旋翼机
l 快速发展期(2005-2013):开源飞控成熟、关注的高校和公司越来越多
l 爆发期(2014-至今):2015年为“无人机元年”,市场规模达66.4亿元,无人机被广泛应用
多旋翼无人机的优势
① 结构简单,成本低
② 垂直起降能力
③ 空中悬停能力
④ 超强机动
多旋翼无人机的应用场景
人类难以达到、重复性强或工作环境比较恶劣
Ø 核心价值在于形成空中平台,结合其他部件扩展应用
Ø 常见的应用有:航拍、农业植保、电力巡检、物流运
输、警用执法、地质勘探、灯光表演、森林防火等
什么是自主无人机?
无人机的基本组成(航模)
l 机架
l 动力系统:电机、电调、桨、电池
l 控制系统:飞控板
l 通信系统:图/数传、遥控器、地面站
Ø 自主无人机
l 传感器:自主感知外部环境
l 机载电脑:更复杂的运算、给飞控提供上层控制指令
l 无人机比赛中所谓的自主无人机就是说:按下起飞键后,
不能进行任何操作,飞机自主完成任务,并能安全且准确
降落的无人
PX4生态系统
PX4飞行控制栈
- PX4是用于无人机的开源飞行控制软件。
- 该项目为无人机开发人员提供了一套灵活的工具,以共享技术,从而为无人机应用创建量身定制的解决方案。
-
PX4提供了提供无人机硬件支持和软件堆栈的标准,从而允许生态系统以可扩展的方式
构建和维护硬件和软件。 - PX4 Github主页:https://github.com/PX4/Firmware (3.7k stars,410 contributor)
Dronecode 基金会
-
PX4目前由Dronecode基金会管理,同时,Dronecode还
托管QGroundControl, MAVLink等开源项目。 -
Ø Dronecode基金会是为开源无人机项目提供开源治理服务的
机构。基金会注册于美国,隶属于Linux基金会的非盈利机构,
支持PX4生态的可持续发展。 -
Ø 它的作用是开源治理,开源项目和行业标准的传播、推广、
社区运营、以及举办每年的开发者大会。 -
Ø Dronecode 基金会的会员来自于参与PX4生态系统建设的公
司和组织
PX4 – uORB消息机制
-
PX4代码内部的一种消息形式,类似于ROS的topic
Ø 用于PX4各模块间传递消息
Ø 消息查询:Firmware/msg
PX4 – MAVLink模块
Ø MAVLink模块负责MAVLink相关的参数设置, MAVLink消息的解压和收取、 MAVLink消息的打包和发送。
这样使得我们如果想使用发过来的消息,直接去订阅相关的topic就行。
Ø 由于MAVLink消息封装还是较为复杂、解包也需要一定的时间,所以对于一些需要低延时的命令可以不走
MAVLink协议,直接通过数传给飞控发送一些消息也可以,就是自己要在飞控端写接收的模块
Ø 简单来讲,就是负责MAVLink消息的收发
Ø mavlink_main.cpp 主cpp
Ø mavlink_message.cpp 负责发送mavlink消息
Ø mavlink_receiver.cpp 负责接收mavlink消息
PX4 飞控硬件 – Pixhaw
Ø 常见的Pixhawk,硬件标准开源
PX4 QGroundControl 地面站
QGroundControl 地面站
Ø 通过MAVLink消息与飞控进行通信
Ø 常见功能:
① 刷固件
② 初始设置
③ 电调校准
④ 飞控参数调节
⑤ 监控飞控状态
⑥ 航点任务上传
⑦ 日志下载
Ø 免费使用且全开源,可进行二次开发
PX4 MAVLink通信协议
MAVLink全称是Micro Air Vehicle Message Marshalling Library,是一种轻量级的消息传输协议,用于无人机之间(或机载组件之间)的通信。
Ø MAVLink协议格式与PAYLOAD帧
Ø MAVLink 支持二次开发。MAVLink工具链可以通过指定的XML文件生成支持多种编程语言(C、C++、
python,java等11种)的MAVLink库。常见的地面站(QGC、MP等)、飞控(PX4、APM等)及其他
MAVLink系统(MAVROS、MAVSDK等)均是使用生成得到的MAVLink库进行的开发。MAVLink及其相关源
码均遵循MIT协议,即可以无限制的在闭源应用中使用
PX4 Mavros 功能包
-
顾名思义,Mavros就是MAVLink+ROS。 Mavros是
PX4官方提供的一个运行于ROS下收发MAVLink消息的工
具(接口),利用Mavros可以发送MAVLink消息给飞控
(可以控制飞机),并且可以从飞控中接受数据(例如:
飞控的位置速度 IMU数据等等)。 -
Ø 机载电脑(Prometheus)通过Mavros可以实现与飞控
(即PX4)的实时双向通信
PX4 优势
-
Ø PX4不仅仅只是飞控代码库,更是一个庞大的生态系统。它的优势在于 维护团队、学界/工业界共同参与、
配套的软/硬件等等。 - Ø 相比于APM,PX4的开源协议更加友好,代码更加适合科研开发者学习和使用。(个人观点
Prometheus与PX4的关系
-
Ø 由于PX4的生态系统还没有对自主无人机进行全覆盖,或者说,还没有提供成熟的解决方案。学术界和工业
界也在不断的利用PX4进行自主无人机相关的开发工作。 -
Ø Prometheus项目是借助PX4的offboard模式,通过机载电脑读取飞控的状态并对飞控进行控制,从而构建
一个全自主无人机系统。同时,利用PX4提供的Gazebo接口实现自主无人机的各类仿真测试,利用
Pixhawk等硬件实现自主无人机的真实飞行测试
Prometheus
Prometheus模块介绍
什么是Prometheus?
- Prometheus是一套开源的自主无人机软件平台,为无人机的智能与自主飞行提供全套解决方案。
- 本项目基于PX4开源飞控固件,旨在为PX4开发者配套成熟可用的机载电脑端程序,提供更加简洁快速的开发体验。目前已集成建图、定位、规划、控制及目标检测等模块,并配套有Gazebo
- 仿真测试代码。(绝大部分代码基于ROS进行开发)
-
Ø 项目网址:https://github.com/amov-lab/Prometheus
Ø 项目支持:
Ø 开发及维护团队
Ø 诚挚邀请广大开发者为Prometheus项目贡献代码或以全职/兼职形式加入Prometheus项目维护团队,共同打造业界最好用的自主无人机软件平台,您将有机会获得免费的硬件支持或者相应的报酬 -
阿木实验室
阿木实验室
Ø 目标:让研发更高效
Ø 主营业务:
Ø 线上课程、线下培训
Ø 二次开发平台
Ø 无人系统相关配件
Prometheus 开发团队
戚煜华
- 中山大学博士后,本科及博士毕业于北京理工大学,
- 在自主无人机平台搭建及二次开发方面经验丰富。参与多项航空航天科研院所无人机相关项目,曾获得2017年国际微小型无人机比赛第三名,已在铂贝学院开设PX4自主无人机线下培训课程10次,累计培训学员300余人次。 目前在International Journal of Systems Science及Robotics and Autonomous Systems等SCI期刊上发表论文4篇,会议论文3篇。
- 主要研究方向为:无人机控制、自主避障等
金忍
- 北京理工大学博士
- 多年从事机器视觉、无人机视觉的开发及教学工作
-
曾作为视觉组队长参加2017与2020年穆罕默德·本·扎耶德国际机器人挑战赛
(MBZIRC),两次获得冠军。 - 目前在Journal of Field Robotics等SCI期刊上发表论文3篇,会议论文2篇。擅长数据驱动算法编写、性能优化、实时计算等,研究兴趣主要包括深度学习,目标检测与跟踪,迁移学习,目标定位与姿态估计
江涛
- 重庆大学博士后,北京理工大学博士
- 具有多年无人机系统、控制和导航算法开发经验。参与过多项航空航天科研院所无人机相关项目
- 曾获得2017年穆罕默德·本·扎耶德国际机器人挑战赛(MBZIRC)冠军。目前在Journal of the Franklin Institute等SCI期刊上发表无人机自主控制论文7篇。
- 主要研究方向包括:无人机自主控制、移动机器人规划和定位建图等
李春雨
- 北京理工大学在读博士
- 具有丰富的竞赛经验及仿真系统的开发经验
- 负责阿木实验室Prometheus系列无人机的视觉导航及仿真部分的开发。
- 主要研究兴趣包括:无人机状态估计、无人机高机动自主飞行等
Prometheus安装及上手
-
安装与编译
l 系统要求:Ubuntu 1804
l 详见Prometheus wiki
Ø 无人机建模控制等相关理论学习
Ø PX4,ROS等相关基础知识学习
Ø Prometheus源码学习(源码有注释)
l wiki与源码
l 可在issue提问、微信群交流
Prometheus 模块框架
Ø Modules – 功能
l 每一个模块都是一个标准的ros功能包
l 每一个小功能都是一个ROS节点
Ø Simulator – 仿真器
Ø Experiment (仍在开发完善中
Prometheus 共用模块
Ø Prometheus项目自定义消息
l ControlCommand.msg
l DroneState.msg
l Message.msg
l …
Ø 共用的库函数
Prometheus 控制模块
-
依赖Mavros功能包及prometheus_msgs功能包,重要代码
l config文件夹中为控制器参数配置文件
l px4_pos_controller.cpp
l px4_pos_estimator.cpp
l ground_station.cpp
l …
Ø 读取飞控中的各项状态,并发布为话题“/prometheus/drone_state”
Ø 丰富了px4原有的offboard控制方式,提供以下控制接口用于任务模块开发(订阅话题“/prometheus/control_command”)
l 怠速
l 起飞
l 悬停
l 降落
l 移动(包括定点,定速及其复合模式,以及轨迹追踪)
Ø 可进行位置环控制器设计及分布式阵型控制器设计
Prometheus 建图定位模块
Ø 视觉定位部分外部依赖ORB-SLAM2,重要代码:
l ros_rgbd_publish.cc
l ros_stereo_publish.cc
l ros_mono_publish.cc
l elas_stereo_node.cpp
l …
Ø 激光定位外部依赖cartographer_ros包
Ø 视觉及激光定位结果与PX4信息融合,发布无人机里程计信息
Ø 建图部分依赖RTAB-Map及Octomap
l RGBD建图
l 双目相机建图
l 激光建图
Ø 建图部分发布全局点云信息供规划模块使用
Ø 后续会加入视觉惯性里程计算法,如VINS-Fusion,maplab等
Prometheus 规划模块
现有功能:全局规划(A*)、局部规划(APF、VFH)、轨迹优化(Fastplanner)
Ø 订阅地图(局部/全局点云)、目标点、无人机当前位置等话题
Ø 发布规划结果至任务模块
l /prometheus/planning/desired_vel
l /prometheus/planning/a_star/desired_path
l /prometheus/planning/fastplanner/desired_trajectory
l …
Ø 重要代码
l apf.cpp
l vfh.cpp
l A_star.cpp
l bspline_optimizer.cpp
l …
Ø 后续会加入更多的规划类算法demo
Prometheus 目标识别模块
Ø 现有功能:二维码识别、椭圆识别、KCF追踪、数字识别(基于pytorch)、通
用目标识别(YOLO v3 tiny)、Siam-RPN追踪(基于pytorch)等
Ø 订阅摄像头数据
l “/prometheus/camera/rgb/image_raw”
Ø 发布识别结果,即目标在相机坐标系的位置
l “/prometheus/target”
Ø 重要代码
l config文件夹中为相机配置文件
l pytorch_mnist_det.py
l siam_rpn.py
l ellipse_det.cpp
l kcf_tracker.cpp
l YoloObjectDetector.cpp
l …
Ø 后续加入更多的目标检测算法
Prometheus 任务模块
Ø 订阅来自规划、目标检测模块的处理结果
Ø 发布统一的控制指令至控制模块
l “/prometheus/control_command”
Ø 处理任务逻辑,生成统一的控制指令,重要代码
l autonomous_landing.cpp
l circle_crossing.cpp
l number_detection.cpp
l indoor_competition.cpp
prometheus_gazebo模块
Ø config:各类配置文件(如rviz)
Ø cpp_nodes、py_nodes:与仿真相关的节点源文件
Ø gazebo_plugin:gazebo插件
Ø models:自定义的无人机、传感器模型
Ø worlds:自定义的场景
Ø launch:demo 的启动脚本
Prometheus 模块关系
Ø 常见的无人机自主飞行应用
l 无GPS环境自主导航
l 基于视觉的目标追踪
l 基于Aruco码的自主降落
Prometheus开发流程
- Ø 科研/比赛/产品开发…
-
Ø 硬件选型
l 机架、传感器、机载电脑等 -
Ø 软件(功能)选型
l 飞控软件、机载处理软件 - Ø 二次开发(可能不需要)
-
Ø 仿真测试
l 代码功能测试
l 节约时间与成本 -
Ø 实物实验
l 综合验证
基于Gazebo的软件在环仿真
Ø PX4到仿真器。PX4给仿真器只会发送一个HIL_ACTUATOR_CONTROLS的MAVLink消息,熟悉PX4的应该知道这个对应的uORB消息是
actuator_outputs.msg,也就是姿态控制器最后的输出控制量。这里也就意味着,混控是在仿真器中进行的,仿真器中也包含电机的模型。
Ø 仿真器到PX4。仿真器的作用就是模拟真实飞行,即模拟计算出真实飞行时的传感器状态,包括GPS,IMU等,将这些信息发送给飞控后,再由
飞控中的估计模块计算出飞机状态量。
Ø 外部到PX4。这里的外部就比如地面站QGC(可以外接遥控器),Mavros,Dronecode SDK等,这里也就可以模拟我们平时控制飞机的方式。
Ø 个人经验表明: PX4-Gazebo仿真的意义与价值在于代码测试,代表可行性,不代表性能
Prometheus功能展示
无人机控制
ü 无人机位置环控制器二次开发
ü 内置多个示例开发程序,并提供测试工具
ü 无人机之间分布式通信
ü 集群控制算法二
多机编队控制
ü 无人机之间分布式通信
ü 集群控制算法二次开发
建图
ü RTAB-Map或Octomap
ü 传感器可选择:双目、RGBD相机、激光雷达
ORB-SLAM
ü SLAM算法测试
ü 多种SLAM算法选择
全局/局部避障
ü 全局路径规划算法
ü 局部规划算法(APF、V
轨迹优化
Ø FastPlanne
自主降落
形状穿越
颜色巡线
KCF框选追踪
数字识别
Prometheus未来规划
配套地面站 Prometheus Statio
Ø 机载电脑专用地面站:QGC只是PX4的地面站,
Prometheus Station将服务于机载电脑端的便利
开发。
Ø 摆脱nomachine、SSH等远程桌面的开发方式
Ø 各类消息一目了然、展示度更高
Ø 集成绘图、logo功能
配套课程 – Prometheus自主无人机二次开发课程
Ø 授课老师:Prometheus开发团队
Ø 特别嘉宾:Dronecode全球社区负责人
Ø 课程大纲:
u Prometheus入门与介绍
u 自主无人机平台搭建
u 无人机建模与控制
u 无人机建图与定位
u 无人机运动规划
u 无人机目标检测