-
PX4-12-飞行任务框架
飞行任务指的是PX4的modules/flight_mode_manager组件,用于控制指令平滑。PX4的FlightTask框架设计还是比较有趣的,不论从软件架构还是控制算法方面,都是值得好好学习的代码框架。我们在 PX4-9-控制数据流.md 文章的控制数据流图中讲到了FlightTask,从图中可以发现FlightTask在PX4的控制流中发挥的作用。这里我们更加深入的分析以下FlightTask的框架。我们从类的继承关系和任务切换流程两方面来分析PX4的FlightTask框架。...…
-
AcmeIot-3-在嵌入式设备中运行ROS2
ROS2是作为第二代ROS,对ROS1进行了重大的优化,主要的特点有: 实现跨平台运行,可以运行在Linux、windows、Mac、RTOS,甚至没有操作系统的裸机 实现真正的分布时通信架构,去中心化,不再依赖于master节点 使用更加成熟可靠的DDS/RTPS作为底层通信框架,在通信的可靠性、稳定性和实时性上都更加出色 ROS1与ROS2的架构对比如图所示:既然ROS2可以运行在RTOS中,我们自然要动手玩一玩的。micro-ROS是ROS2运...…
-
PX4-11-日志框架与常用日志消息
无人机开发调试,飞控日志是非常关键的部分。有一个笑话,说没有什么问题是一个日志不能解决的,如果有,那就再来一个。虽然是笑话,不过确是反映了飞控日志的重要性,那么这一篇我们来聊一下PX4的日志库。我们分两部分来讲 PX4日志库的实现原理 PX4常用的日志消息实现原理PX4的日志库实现做得非常好,用户可以仅增加一行代码即可将自己需要的数据增加到日志中。因而这一部分对于大部分同学的作用不大,毕竟大多数开发者都是基于PX4的框架开发应用层或者算法层,底层大多情况不需要过于关心。PX4的日志库是...…
-
AcmeGCS-12-地图与任务规划优化
AcmeGCS一直在持续优化完善,这里给大家演示新的功能一些功能,地图和任务规划功能的优化。一些同学在试用AcmeGCS时反馈地图显示不够清晰明亮,地球的显示能不能更加美观一些。这里优化了地球的渲染效果,并优化了地图的加载方式。在软件启动时显示高清全球离线地图,优化全球地图的显示效果更加美观,并且显示出星空和太阳以及大气成效果。在地图的支持上,可以在mapbox、高德和谷歌地图间切换,并可以选择是否显示路网图,地图的加载更加清晰明亮。任务规划功能也完善了一些细节,如: 地块的自动切换、显...…
-
再见2021,你好2022
时间很快,2021年即将过去,从8月初开始写这个公众号也已经有将近5个月时间。如第一篇文章 写在开始 所言,分享一些自己认为有意义的东西,给后来者或者正在Robot道路上奋斗的同行者。不知不觉已经写了有30多篇文章: PX4 10篇 AcmeGCS 11篇 AcmeIot 2篇 AcmeROS 1篇 Uav开发杂记 5篇 工欲善其事 4篇 这些文章在公众号的菜单中都能找到分类的链接。非常高兴能与同学们一起分享...…
-
Uav开发杂记-5-如何跟踪开源飞控开发动态
作为最主流的开源飞控,APM/PX4的代码迭代非常之快,功能添加与框架优化一直都持续进行。有的时候可能你有一段时间没有去看源码,发现你熟悉的部分已经发生了重大的变化,而没有参与项目开发的大多数同学都并不了解优化的目的和思路。跟踪开源飞控的最新动态可以让我们了解最新的技术,学习更多有趣的知识。那么如何更好的跟踪开源飞控的最新研发动态,了解框架优化与代码更新的设计目的呢?飞控源码与git直接阅读源码是最直接的方式了,也是大多同学了解和学习开源飞控的主要方式。不过结合一些工具可以帮助我们了解功能...…
-
AcmeGCS-11-远程控制
-微信公众号的视频演示-AcmeGCS提供一个远程控制接口,可以使用户通过云连接到与AcmeGCS连接的飞行器,显示飞行器的状态并远程控制飞行器起飞、飞行等任务。其连接结构如图所示:远程控制接口可以是非常简单的JSON格式,用户通过简单的文本编辑,即可控制远程无人机。视频中演示了通过简单的网络工具,连接到远程服务器ip,AcmeGCS连接飞行器后连接到远程服务器中,即可通过网络工具,发送控制指令,控制飞行器的起飞,飞往航点等动作。如,控制1号飞机起飞{ "vehicleId": 1, ...…
-
Uav开发杂记-4-无人机开发的C-CPP
无人机的软件开发主要使用C/C++开发,APM和PX4的应用层开发更多的使用C++开发。作为叠代完善了非常多年的比较大型的开源飞控项目,其代码框架对于刚开始接触的新手而言是比较复杂的。一些同学私信问我一些无人机相关的问题,很多是关于飞控的代码框架,语法问题。大多数无人机飞控的开发同学都不是专业的软件开发,甚至只学习过C开发没有专门学习过C++,所以在看APM/PX4时,面对复杂的继承关系、容器和模板、学习比较吃力。而在自己动手加一些代码时出现各种奇怪的问题,比如编译报错不知道如何定位,运行...…
-
PX4-10-系统启动流程
很多同学在开始接触PX4的时候,遇到的第一个问题是这个程序是如何启动的,main函数在哪里。这一篇我们简单的聊一下PX4的启动流程。初学c语言对RTOS不是很熟悉的同学对main函数都有着不一般的执着,阅读代码时总是回去找程序的main函数,然后从入口处开始阅读。实际上我们接触的所有软件程序,使用到的main函数都不是程序实际开始运行的入口,只是用户程序的入口而已。从这个角度而言,PX4的每个任务的main函数都是该任务的入口。这一篇我们分析一下PX4是如何从单片机的启动汇编入口引导到应用...…
-
AcmeGCS-10-首个测试版本
AcmeGCS开发已经有一段时间,在先前的分享中给大家演示了AcmeGCS持续开发的一些功能。AcmeGCS-9-目标框选跟踪AcmeGCS-8-目标识别检测AcmeGCS-7-吊舱视频流AcmeGCS-6-构建环境场景AcmeGCS-5-模拟国庆阅兵AcmeGCS-4-模拟空间站测控AcmeGCS-3-3D航线规划使用3D地面站(AcmeGCS)的编队飞行AcmeGCS-1-多无人平台态势显示控制AcmeGCS设计的目标是一款集环境态势呈现与多无人平台状态显示控制为一体的通用型跨平台地面...…
-
PX4-9-控制数据流
在之前的分享中,我们主要讲了PX4的驱动和系统框架,这一篇我们讲一下PX4的控制框架。PX4的控制系统构建还是比较复杂的,相对于APM基本线性的执行流程,PX4各个控制模块是离散的,耦合性低,导致代码比较复杂,理解比较困难。那么如何更加清晰的去理解PX4的控制结构呢?我们可以从数据流的角度把各个控制模块连接起来,从系统的角度把握整个框架。在前面的分享 PX4-3-uORB 我们将到了PX4的消息总线uORB,它贯穿于PX4所有模块,我们这里也按照控制模块的uORB数据流来看PX4的控制系统...…
-
PX4-8-UAVCAN与开源飞控
这一篇我们来聊一下PX4和APM使用的CAN通信协议框架 UAVCAN。为什么聊这个话题呢?最近PX4固件做了一个关于UAVCAN的更新,调整了src/drivers/uavcan/libuavcan子模块的仓库,并且启用了新的名称为dronecan和新的主页 dronecan.org。 commit id:c73a1b4c:update UAVCAN-v0 dsdl to DroneCAN借着这个更改我们来聊一下UAVCAN的一些事情。关注PX4项目进展的同学可能会发现,从v1.12版...…
-
AcmeROS-1-系统架构
AcmeUav的分享更新到现在,我们主要分享了几个部分的内容: PX4 开源无人机飞控 PX4-7-飞控参数 PX4-6-串口设备驱动 PX4-5-SPI-IIC设备驱动 PX4-4-任务调度 PX4-3-uORB PX4-2-系统架构浅析 PX4-1-开源飞控项目 AcmeGCS 3D环境态势显示与多无人平台控制的地面站软件。 AcmeGCS-9-目标框选跟踪 AcmeGCS-8-目标识别检测 ...…
-
PX4-7-飞控参数
参数是PX4飞控中掉电保存的变量,用于存储飞控的设置、校准系数等数据。PX4有一套完善的参数框架,对于用户而言只需要非常简单的几个语句就可以完成参数的添加、读取和写入操作。这一篇我们简单聊一下PX4的参数机制,这部分内容不是所有同学都会用的到,不过有一个框架性的认识对于熟悉PX4的框架也有一定的帮助。我们以1.11.3版本为例,简单的描述一下PX4的参数操作流程:代码构建在编译构建时PX4执行src/lib/parameters/CMakeLists.txt 中脚本文件 px_proces...…
-
AcmeGCS-9-目标框选跟踪
-微信公众号的视频演示-–我的微信公众号,文章同步更新,欢迎关注。…
-
AcmeGCS-8-目标识别检测
-微信公众号的视频演示-这一篇我们分享AcmeGCS的目标识别检测。上一篇我们给AcmeGCS添加了视频流的显示功能,那么在视频流的基础上对视频流中目标进行检测跟踪也是必不可少的功能。这里我们利用ROS强大的功能实现视频流中的目标检测,AcmeGCS可以连接ROS目标检测节点获取目标信息显示在视频流中。AcmeGCS设计了完善的通信框架,可以非常方便的接入多个数据协议连接到同一个vechile中,这样可以将无人机飞控、机载计算机、吊舱等设备信息同时连接为一个飞行器,对数据进行集合与分发。–...…
-
AcmeIot-2-基于PX4硬件的Nuttx开发环境
这一篇我们聊一下如何搭建使用PX4硬件的Nuttx的系统开发环境,这里我们脱离PX4的软件框架,单独搭建Nuttx的开发环境,使用Nuttx的make进行编译,并在Nuttx系统上编写应用程序。搭建开发环境前几年玩Nuttx的话搭建Nuttx的开发环境还是有点麻烦的,对新手不是很友好,这两年Nuttx加入apache开源基金会后,文档上有一些完善,提供了比较全面的入门教程,开发环境按照官方文档就没有什么问题,以下是官方文档:https://nuttx.apache.org/docs/lat...…
-
AcmeIot-1-基于Nuttx和ESP32的ROS节点
今天是1024程序员节,首先祝大家节日快乐!在这所有开发者的节日里,写一个新的系列纪念一下吧。作为一个程序爱好者,而不是作为工作者,首要的精神是什么呢,应该是生命不熄,折腾不止吧。这个系列我们捣鼓一些有意思可能又没啥用的东西。前面的分享 Uav开发杂记-2-无人机的RTOS 中提到了很多的RTOS,可以发现我最喜欢的还是Nuttx,这个系列我们基于Nuttx搞一些有意思的东西,同时分享一些关于Nuttx与Iot相关的知识。玩Iot首先需要一款硬件,自己设计是最好的了,不过比较费时费力,我们...…
-
AcmeGCS-7-吊舱视频流
-微信公众号的视频演示-这一篇我们分享AcmeGCS的一个新的功能,显示吊舱视频流。无人机的软件仿真环境是开发GCS的非常好的工具,我们可以利用SITL完成大多数GCS的功能开发视频中构建了一个公园的模型,搭载吊舱的仿真无人机可以输出标准的视频流,AcmeGCS可以与连接真实吊舱一样获取视频流数据。视频演示了AcmeGCS基础的控制功能,控制无人机一键起飞、航点飞行和一键降落功能。同时AcmeGCS同步显示吊舱图像,并可以进行视角切换,显示吊舱视角和3D地图视角。缩小的3D地图视角可以进行...…
-
AcmeGCS-6-构建环境场景
-微信公众号的视频演示-在之前的演示中,AcmeGCS可以通过连接ByaeroV1、AcmeV2、PX4、ROS飞行器或者车辆去加载对应模型在地图上显示。通过加载带有高程的地图可以显示地形环境。不过在线地图的高程和图像精度和分辨率都不是很高,我们是否可以通过其它方式呈现高精度的环境显示呢?AcmeGCS的设计目标就是一款集环境态势呈现与多无人平台状态显示控制为一体的地面软件。为了实现这一设计目标,AcmeGCS新加入环境构建功能,可以通过加载编辑由3D模型软件创建的或者由3维测绘得到的高精...…