自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 AcmeROS-2-ROS2架构

在前面的分享中,我们讲了在嵌入式设备中运行ROS2AcmeIot-3-在嵌入式设备中运行ROS2PX4中的ROS2桥接应用PX4-16-ROS2Bridge在AcmeGCS中支持ROS2AcmeGCS-18-支持ROS2我们在嵌入式设备、飞控与地面站软件中都应用ROS2作为通信框架,如图所示:在之后的分享中我们将分享一些关于ROS2的内容,在深入了解ROS2的细节或者开始使用ROS2前,大致了解它的框架有助于对ROS2有一个更清晰的了解。ROS从ROS1升级到ROS2

2022-05-28 15:53:58 807

原创 PX4-12-飞行任务框架

飞行任务指的是PX4的modules/flight_mode_manager组件,用于控制指令平滑。PX4的FlightTask框架设计还是比较有趣的,不论从软件架构还是控制算法方面,都是值得好好学习的代码框架。我们在 PX4-9-控制数据流 文章的控制数据流图中讲到了FlightTask,从图中可以发现FlightTask在PX4的控制流中发挥的作用。这里我们更加深入的分析以下FlightTask的框架。我们从类的继承关系和任务切换流程两方面来分析PX4的FlightTask框架。类的继承关系

2022-02-14 10:52:03 880

原创 AcmeIot-3-在嵌入式设备中运行ROS2

ROS2是作为第二代ROS,对ROS1进行了重大的优化,主要的特点有: 实现跨平台运行,可以运行在Linux、windows、Mac、RTOS,甚至没有操作系统的裸机 实现真正的分布式通信架构,去中心化,不再依赖于master节点 使用更加成熟可靠的DDS/RTPS作为底层通信框架,在通信的可靠性、稳定性和实时性上都更加出色 ROS1与ROS2的架构对比如图所示:既然ROS2可以运行在RTOS中,我们自然要动手玩一玩的。micro-ROS是ROS2运行在嵌入式设备中

2022-01-21 10:43:49 1005

原创 PX4-11-日志框架与常用日志消息

无人机开发调试,飞控日志是非常关键的部分。有一个笑话,说没有什么问题是一个日志不能解决的,如果有,那就再来一个。虽然是笑话,不过确是反映了飞控日志的重要性,那么这一篇我们来聊一下PX4的日志库。我们分两部分来讲 PX4日志库的实现原理 PX4常用的日志消息 实现原理PX4的日志库实现做得非常好,用户可以仅增加一行代码即可将自己需要的数据增加到日志中。因而这一部分对于大部分同学的作用不大,毕竟大多数开发者都是基于PX4的框架开发应用层或者算法层,底层大多情况不需要过于关

2022-01-11 10:28:01 728

原创 AcmeGCS-12-地图与任务规划优化

AcmeGCS一直在持续优化完善,这里给大家演示新的一些功能,地图和任务规划功能的优化。一些同学在试用AcmeGCS时反馈地图显示不够清晰明亮,地球的显示能不能更加美观一些。这里优化了地球的渲染效果,并优化了地图的加载方式。在软件启动时显示高清全球离线地图,优化全球地图的显示效果更加美观,并且显示出星空和太阳(动图显示效果不是很清晰)。在地图的支持上,可以在mapbox、高德和谷歌地图间切换,并可以选择是否显示路网图,地图的加载更加清晰明亮。任务规划功能也完善了一些细节,如:

2022-01-10 10:27:44 291

原创 再见2021,你好2022

时间很快,2021年即将过去,从8月初开始写这个公众号也已经有将近5个月时间。如第一篇文章 写在开始 所言,分享一些自己认为有意义的东西,给后来者或者正在Robot道路上奋斗的同行者。不知不觉已经写了有30多篇文章: PX4 10篇 AcmeGCS 11篇 AcmeIot 2篇 AcmeROS 1篇 Uav开发杂记 5篇 工欲善其事 4篇 这些文章在公众号的菜单中都能找到分类的链接。非常高兴能与同学们一起分享知识,在分享的同时我也学习了

2021-12-31 22:11:41 212

原创 Uav开发杂记-5-如何跟踪开源飞控开发动态

作为最主流的开源飞控,APM/PX4的代码迭代非常之快,功能添加与框架优化一直都持续进行。有的时候可能你有一段时间没有去看源码,发现你熟悉的部分已经发生了重大的变化,而没有参与项目开发的大多数同学都并不了解优化的目的和思路。跟踪开源飞控的最新动态可以让我们了解最新的技术,学习更多有趣的知识。那么如何更好的跟踪开源飞控的最新研发动态,了解框架优化与代码更新的设计目的呢?飞控源码与git直接阅读源码是最直接的方式了,也是大多同学了解和学习开源飞控的主要方式。不过结合一些工具可以帮助我们了解功

2021-12-30 09:59:56 200

原创 Uav开发杂记-4-无人机开发的C-C++

无人机的软件开发主要使用C/C++开发,APM和PX4的应用层开发更多的使用C++开发。作为叠代完善了非常多年的比较大型的开源飞控项目,其代码框架对于刚开始接触的新手而言是比较复杂的。一些同学私信问我一些无人机相关的问题,很多是关于飞控的代码框架,语法问题。大多数无人机飞控的开发同学都不是专业的软件开发,甚至只学习过C开发没有专门学习过C++,所以在看APM/PX4时,面对复杂的继承关系、容器和模板、学习比较吃力。而在自己动手加一些代码时出现各种奇怪的问题,比如编译报错不知道如何定位,运行崩溃面对一

2021-12-23 09:31:39 2173

原创 PX4-10-系统启动流程

很多同学在开始接触PX4的时候,遇到的第一个问题是这个程序是如何启动的,main函数在哪里。这一篇我们简单的聊一下PX4的启动流程。初学c语言对RTOS不是很熟悉的同学对main函数都有着不一般的执着,阅读代码时总是会去找程序的main函数,然后从入口处开始阅读。实际上我们接触的所有软件程序,使用到的main函数都不是程序实际开始运行的入口,只是用户程序的入口而已。从这个角度而言,PX4的每个任务的main函数都是该任务的入口。这一篇我们分析一下PX4是如何从单片机的启动汇编入口引导到应用任务启

2021-12-20 11:38:04 694 1

原创 AcmeGCS-10-首个测试版本

AcmeGCS开发已经有一段时间,在先前的分享中给大家演示了AcmeGCS持续开发的一些功能。AcmeGCS-9-目标框选跟踪AcmeGCS-8-目标识别检测AcmeGCS-7-吊舱视频流AcmeGCS-6-构建环境场景AcmeGCS-5-模拟国庆阅兵AcmeGCS-4-模拟空间站测控AcmeGCS-3-3D航线规划使用3D地面站(AcmeGCS)的编队飞行AcmeGCS-1-多无人平台态势显示控制AcmeGCS设计的目标是一款集环境态势呈现与多无人平台状态显示控制为

2021-12-07 10:36:35 317

原创 PX4-9-控制数据流

在之前的分享中,我们主要讲了PX4的驱动和系统框架,这一篇我们讲一下PX4的控制框架。PX4的控制系统构建还是比较复杂的,相对于APM基本线性的执行流程,PX4各个控制模块是离散的,耦合性低,导致代码比较复杂,理解比较困难。那么如何更加清晰的去理解PX4的控制结构呢?我们可以从数据流的角度把各个控制模块连接起来,从系统的角度把握整个框架。在前面的分享 PX4-3-uORB 我们讲到了PX4的消息总线uORB,它贯穿于PX4所有模块,我们这里也按照控制模块的uORB数据流来看PX4的控制系统是如何

2021-11-30 09:27:01 414

原创 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版本

2021-11-27 13:53:00 1155

原创 PX4-7-飞控参数

参数是PX4飞控中掉电保存的变量,用于存储飞控的设置、校准系数等数据。PX4有一套完善的参数框架,对于用户而言只需要非常简单的几个语句就可以完成参数的添加、读取和写入操作。这一篇我们简单聊一下PX4的参数机制,这部分内容不是所有同学都会用的到,不过有一个框架性的认识对于熟悉PX4的框架也有一定的帮助。我们以1.11.3版本为例,简单的描述一下PX4的参数操作流程:代码构建在编译构建时PX4执行src/lib/parameters/CMakeLists.txt 中脚本文件 px_proce

2021-11-17 11:46:06 863

原创 PX4-6-串口设备驱动

上一篇我们讲了PX4的SPI/IIC设备驱动,现在讲一下PX4的串口设备。PX4的串口设备驱动框架比SPI/IIC设备简单不少,使用了两种底层实现方式:一种是系统自带的标准字符设备接口,一种是直接使用mcu的底层资源通过自行配置中断和DMA的方式实现的串口收发。使用系统接口PX4使用Nuttx的标准的字符设备接口,通过标准接口函数open、close、read、write、ioctl等函数操作。熟悉linux的同学对这个应该不陌生,通过看linux的驱动编程书籍对Nuttx的串口编程也同

2021-10-12 10:55:59 823

原创 PX4-5-SPI-IIC设备驱动

在之前的分享中,我们聊了PX4的通信框架和任务调度框架,现在我们讲一下PX4的设备驱动。PX4支持很多种设备,根据通信方式的不同大致分为:SPI/IIC设备、串口设备、IO设备、CAN设备。这一篇讲一下PX4的SPI/IIC设备。PX4每个版本中设备驱动都有一些明变化,我们以PX4-1.11.3版本为例,l3gd20陀螺仪设备类的继承关系图如图所示:对于IIC设备与其类似,以磁罗盘ist8310为例可以发现,SPI和IIC设备都继承了I2CSPIDriver这个类,而这个类继承自

2021-10-12 10:51:07 528

原创 PX4-4-任务调度

PX4所有的功能都封装在独立的模块中,uORB是任务间数据交互和同步的工具,而管理和调度每个任务,PX4也提供了一套很好的机制,这一篇我们分享PX4的任务调度机制。我们以PX4 1.11.3版本为例PX4的任务调度方式有两种: 任务 (Tasks): 模块在它自己的任务中运行, 具有自己的堆栈和进程优先级(这是更常见的方法)。 工作队列 (Work queues):模块在共享任务上运行, 这意味着它没有自己的堆栈。多个任务在同一堆栈上运行, 每个工作队列只有一个优先级。 工作队列

2021-09-21 14:35:09 1152 2

原创 工欲善其事-4-绘制程序流程图

这是工具系列的第四篇,本来最近没有想再分享这个系列,不过最近朋友给我推荐了一个绘制流程图的神器,忍不住推荐给大家。绘制程序流程图、时序图、甘特图一直是我比较头疼的问题,一直使用viso,用着一直不是很顺畅: 默认框图不好看,每次需要手动去调颜色、字体等(应该是我不太会用) 需要仔细拖动框图对齐,虽然后自动对齐,不过还是很麻烦 添加到markdown的笔记中很麻烦,需要保存图片再加载 ubuntu没有找到比visio好的绘图软件,只能用双系统解决 没办法源码管

2021-09-21 14:27:16 539

原创 PX4-3-uORB

uORB(Micro Object Request Broker,微对象请求代理器)是PX4中非常重要且关键的一个模块,用于各个模块之间的数据交互。实际上uORB是一套跨「进程」 的IPC通讯模块。在PX4中, 所有的功能被独立以进程模块为单位进行实现并工作。而进程间的数据交互就尤为重要,必须要实时高效。uORB多个进程通过共享内存的方式,进行数据交互和共享。进程通过命名的「总线」交换的消息称之为「topic」(topic),在PX4中,一个topic仅包含一种消息类型。每个进程可以「订阅」或者「发布.

2021-09-11 20:47:28 1442 1

原创 Uav开发杂记-1-无人机软件开发的技能树

最近在思考怎么写后面的分享,虽然大多的分享都已经有对应的笔记,但是把零散的笔记整理的有条理、逻辑清晰也是有一定难度的。有已经规划好的系列,比如工具系列

2021-09-10 09:45:45 561

原创 PX4-2-系统架构浅析

PX4软件架构图是PX4官方开发者网站中的一张总体框架图,相信很多同学都看过,我们今天围绕这张图作一下简单的分析。如果希望仔细研究PX4源码的同学应该仔细阅读这一张图,它包含了所有的核心模块,以及它们的关系。整个PX4源码分为几个部分 消息总线 uORB PX4软件架构的核心思想就是去耦合,所以消息中间件(uORB)处于整个框架图的中心位置。这样的设计是基本所有的大型软件系统的通用设计,比如ROS、ROS2。关于uORB详细分析,将在下一讲中详细描述。 基础服务 任

2021-09-06 09:43:28 797

原创 PX4-1-开源飞控项目

分享完工具系列,我们开始PX4飞控技术的分享,写分享相对于自己写笔记要难很多,在整理自己笔记的过程中也重新思考很多问题。飞控技术的分享系列更多分享的是思路和框架。对于PX4这种大型开源项目,源码的学习和思路框架的学习同样重要,专于源码容易迷失在代码之中,找不到方向。当然个人的水平和编辑能力有限,如果有理解不一样的地方,欢迎私信我讨论,我会在后续的分享中更正。我们后面主要分享的是PX4这一个开源飞控,当然目前世界上有很多的优秀开源飞控项目,在开始PX4的分享之前,我们先聊一下一些著名的开源飞控项目

2021-09-02 16:54:39 1356

原创 工欲善其事-3-整理技术笔记(gitbook)

工欲善其事,必先利其器。第三篇-整理技术笔记(gitbook)这是工具系列的近期最后一篇,分享一个整理自己技术笔记的方法。整理技术笔记的体会从事技术开发,整理自己的技术笔记是所有研发同学共通的基本需求,大家都是如何去整理自己开发过程中的笔记,项目中的文档的呢?我用过很多种方法,最早期用word文档,写一个个word然后整理到一个大文件夹下然后细分各个子类目录也用过一些笔记软件,如有道云笔记、onenote、为知笔记等已经记不清当时为什么切换这些笔记软件,应该是每个软件都有自己的优缺点

2021-08-25 09:54:03 280

原创 使用3D地面站(AcmeGCS)的编队飞行

使用3D地面站(AcmeGCS)的编队飞行无人机编队飞行的方法有很多种,本文演示一种使用PX4+3D地面站(AcmeGCS)+ROS的多机控制方法PX4提供了非常好的软件仿真环境,得益于这样的仿真环境,我们可以非常方便的进行飞控、地面站和编队算法的开发。通过offboard控制模式,可以由外部进行飞行器的位置、速度等控制,使我们可以使用ROS进行多机编队控制为了实现飞行器与ROS通信,我们需要使用MAVROS这个ROS软件包,进行MavLink与ROS的协议转换。实际上我们可以仅使用R

2021-08-21 20:28:56 1154 2

原创 工欲善其事-2-代码格式化

工欲善其事,必先利其器。第二篇-代码格式化这一篇主要针对c/c++开发者,其它语言因为本身开发经验不多,这里不讨论大家应该都有过这样的经历: 自己写的代码风格不一致,代码缩进用空格还是TAB,大括号对齐方式,变量与操作符间是否有空格等等; 在参考他人的代码段落时发现对方的代码与自己的习惯差异很大,有强迫症的话会手动去修改,费时费力; 在多人开发的时候,每个人的编程习惯都可能不一样,导致项目的代码风格不一致; 可能使用了代码格式化工具,比如一般IDE自带的格式化工具

2021-08-21 19:45:07 139

原创 工欲善其事-1-vscode+git

工欲善其事,必先利其器。大家在开发过程中肯定使用过非常多的开发工具,编辑器编译器等等。工具不在多,好用就行这里给大家分享我的开发组合:git+vscode现在开发无人机或者无人车应该没有人没有接触过这两个工具吧,目前最流行的开发工具。吹捧或者溢美之辞就不多说的,大家自行百度就有一把把的简介。这里给大家分享一些实用的操作,都是实用好用且肯定会用到的。gitgit是目前最为流行的版本管理,由linux的创始人开发,是他最为知名的两个开源项目之一。git有很多gui工具,但是熟悉git的常

2021-08-21 19:01:16 292

原创 写在开始

这是一个知识爆炸的时代,我们可以非常轻易的去获取海量的知识,却是一把双刃剑。好处是 每个人都能获取到非常全面深入的知识,这些知识足以改变自身 每个人都能表达自己的创意想法和发布作品,只要作品足够好都能获得非常多的关注 同样也有着明显的问题: 经常会发现自己迷失在知识的海洋里找不到方向知识很多却不知道从何开始 有太多的知识的诱惑总是被打断分心,最后发现都只是浅尝则止 从事技术开发十余年,2009年入学北京理工大学宇航学院,2011年参加飞思卡尔智能车大赛开始了Robot

2021-08-21 18:49:15 122

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除