-
PX4-6-串口设备驱动
上一篇我们讲了PX4的SPI/IIC设备驱动,我们现在讲一下PX4的串口设备。PX4的串口设备驱动框架比SPI/IIC设备简单不少,使用了两种底层实现方式:一种是系统自带的标准字符设备接口,一种是直接使用mcu的底层资源通过自行配置中断和DMA的方式实现的串口收发。使用系统接口Nuttx的串口使用的是标准的字符设备接口,通过标准接口函数open、close、read、write、ioctl等函数操作。熟悉linux的同学对这个应该不陌生,通过看linux的驱动编程书籍对Nuttx的串口编程...…
-
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这个类,而这个类继承...…
-
AcmeGCS-5-模拟阅兵
-微信公众号的视频演示-–我的微信公众号,文章同步更新,欢迎关注。…
-
Uav开发杂记-2-无人机的RTOS
无人机是一个任务复杂度比较高的系统,如何高效稳定的进行任务管理和调度呢,使用RTOS实时嵌入式操作系统是一个非常理想的方案,这一篇我们聊一下无人机飞控使用的RTOS。为什么使用RTOS实际上很多专用飞控,比如一些型号无人机、飞航导弹等的控制系统,并不使用RTOS,这样的设计基于以下一些考虑: 专用飞控一般使用模块化设计,比如使用外部组合导航模块,飞控本身更多进行飞机的控制,导航和决策层由外部组件完成,直接管理的传感器较少,因此任务复杂度不高 专用飞控的任务明确,功能...…
-
PX4-4-任务调度
PX4所有的功能都封装在独立的模块中,uORB是任务间数据交互和同步的工具,而管理和调度每个任务,PX4也提供了一套很好的机制,这一篇我们分享PX4的任务调度机制。我们以PX4 1.11.3版本为例PX4的任务调度方式有两种: 任务 (Tasks): 模块在它自己的任务中运行, 具有自己的堆栈和进程优先级(这是更常见的方法)。 工作队列 (Work queues):模块在共享任务上运行, 这意味着它没有自己的堆栈。 多个任务在同一堆栈上运行, 每个工作队列只有一个优先级。工作队列的优点...…
-
工欲善其事-4-绘制程序流程图
这是工具系列的第四篇,本来最近没有想再分享这个系列,不过最近朋友给我推荐了一个绘制流程图的神器,忍不住推荐给大家。绘制程序流程图、时序图、甘特图一直是我比较头疼的问题,一直使用viso,用着一直非常不爽: 默认框图不好看,每次需要手动去调颜色、字体等 需要仔细拖动框图对齐,虽然后自动对齐,不过还是很麻烦 添加到markdown的笔记中很麻烦,需要保存图片再加载 ubuntu没有找到比visio好的绘图软件,只能用双系统解决 ...…
-
AcmeGCS-4-模拟空间站测控
-微信公众号的视频演示-今天驻留我们中国自己的空间站3个月的中国宇航员成功返回着陆,创造了我们中国宇航员在轨时间最长的记录,同时圆满完成了舱外维修维护、设备更换、科学应用载荷等一系列操作任务。我也来蹭一下我们中国航天的大热点,做了一个简单的模拟空间站在轨测控的视频。视频中使用ROS模拟空间站轨道运行,AcmeGCS连接ROS节点获取轨道数据,显示空间站的轨道状态。AcmeGCS的协议与设备层抽象设计,可以方便的连接多种设备,与ROS的连接方便我们进行各种模式仿真测试,如机器人、无人机、卫星...…
-
AcmeGCS-3-3D航线规划
-微信公众号的视频演示-有两周没有分享AcmeGCS系列,因为AcmeGCS是全新开发的地面站,目前的功能比较有限,还在不断完善之中,这里给大家分享最新完善的航线规划功能。不知道用过QGC的同学对它的航线规划功能有什么感受,我的体会是尽管它的功能非常强大,有丰富的功能,但是操作某些地方有一些繁琐,一些设置层级太深,设置不是特别方便,不太直观。当然主要的缺点就是不支持3D显示啦,高程设置使用柱状显示调节不是很直观。本视频演示了AcmeGCS 3D航线规划功能,主要的功能有: 地块的...…
-
PX4-3-uORB
uORB(Micro Object Request Broker,微对象请求代理器)是PX4中非常重要且关键的一个模块,用于各个模块之间的数据交互。实际上uORB是一套跨「进程」 的IPC通讯模块。在PX4中, 所有的功能被独立以进程模块为单位进行实现并工作。而进程间的数据交互就尤为重要,必须要实时高效。uORB实际上是多个进程通过共享内存的方式,进行数据交互和共享。进程通过命名的「总线」交换的消息称之为「topic」(topic),在PX4中,一个topic仅包含一种消息类型。每个进程...…
-
Uav开发杂记-1-无人机软件开发的技能树
最近在思考怎么写后面的分享,虽然大多的分享都已经有对应的笔记,但是把零散的笔记整理的有条理、逻辑清晰也是有一定难度的。有已经规划好的系列,比如工具系列AcmeGCS系列PX4系列Uav开发杂记是一个新的分享系列,用于分享一些零散的编程和算法知识,这些知识大多都可以自己看书或者搜索也可以获取到,这里分享的都是大家能用的上的小知识和技能,或许能给大家一些新的东西呢。无人机是一个非常复杂的系统,设计的知识非常多,就软件开发方向而言我们需要怎样的技能数呢,大家又已经点亮了多少呢技能树是把学习一种知...…
-
PX4-2-系统架构浅析
PX4软件架构图是PX4官方开发者网站中的一张总体框架图,相信很多同学都看过,我们今天围绕这张图作一下简单的分析。如果希望仔细研究PX4源码的同学应该仔细阅读这一张图,它包含了所有的核心模块,以及它们的关系。整个PX4源码分为几个部分 消息总线 uORB PX4软件架构的核心思想就是去耦合,所以消息中间件(uORB)处于整个框架图的中心位置。这样的设计是基本所有的大型软件系统的通用设计,比如ROS、ROS2。关于uORB详细分析,将在下一讲中详细描述。 基础服务 ...…
-
PX4-1-开源飞控项目
分享完工具系列,我们开始PX4飞控技术的分享,写分享相对于自己写笔记要难很多,在整理自己笔记的过程中也重新思考很多问题。飞控技术的分享系列还是不会在源码层面分享,更多的是思路和框架。对于PX4这种大型开源项目,源码的学习和思路框架的学习同样重要,专于源码容易迷失在代码之中,找不到方向。当然个人的水平和编辑能力有限,如果有理解不一样的地方,欢迎私信我讨论,我会在后续的分享中更正。我们后面主要分享的是PX4这一个开源飞控,当然目前世界上有很多的优秀开源飞控项目,在开始PX4的分享之前,我们先聊...…
-
AcmeGCS-2-多无人平台态势显示控制
-微信公众号的视频演示-多无人平台协同任务中无人机、无人车或者无人船使用的系统可能各不相同,为了适应复杂的应用场景,无人机也可能使用不同的系统,作为无人系统的显示与控制终端,GCS需要同时连接各种不同的无人设备。AcmeGCS在设计之初即考虑应用于多无人平台协同控制应用中,支持 使用Mavlink协议连接PX4 连接ROS设备 可方便扩展连接其它协议设备视频中为了演示多无人平台显示控制,将模拟的位置设置在北京大兴国际机场,显示效果更好一些。演示了三架多旋翼无人机、三架固定翼(模型使用...…
-
工欲善其事-3-整理技术笔记(gitbook)
工欲善其事,必先利其器。第三篇-整理技术笔记(gitbook)这是工具系列的近期最后一篇,分享一个整理自己技术笔记的方法。整理技术笔记的体会从事技术开发,整理自己的技术笔记是所有研发同学共通的基本需求,大家都是如何去整理自己开发过程中的笔记,项目中的文档的呢?我用过很多种方法,最早期用word文档,写一个个word然后整理到一个大文件夹下然后细分各个子类目录也用过一些笔记软件,如有道云笔记、onenote、为知笔记等已经记不清当时为什么切换这些笔记软件,应该是每个软件都有自己的优缺点,基于...…
-
AcmeGCS-1-使用3D地面站的编队飞行
-微信公众号的视频演示-无人机编队飞行的方法有很多种,本文演示一种使用PX4+3D地面站+ROS的多机控制PX4提供了非常好的软件仿真环境,得益于这样的仿真环境,我们可以非常方便的进行飞控、地面站和编队算法的开发,通过offboard控制模式,可以由外部进行飞行器的位置、速度等控制,使我们可以使用ROS进行多机编队控制PX4的通信采用MAVLink协议,为了与ROS通信,我们需要使用MAVROS这个ROS软件包,进行MavLink与ROS的协议转换。实际上我们可以仅使用ROS完成对PX4的...…
-
工欲善其事-2-代码格式化
工欲善其事,必先利其器。下面我们来讲工具系列的第二篇-代码格式化这一篇主要针对c/c++开发者,其它语言因为本身开发经验不多,这里不讨论大家应该都有过这样的经历: 自己写的代码风格不一致,代码缩进用空格还是TAB,大括号对齐方式,变量与操作符间是否有空格等等; 在参考他人的代码段落时发现对方的代码与自己的习惯差异很大,有强迫症的话会手动去修改,费时费力; 在多人开发的时候,每个人的编程习惯都可能不一样,导致项目的代码风格不一致; 可能使用了代码格式化工具,比...…
-
工欲善其事-1-git-vscode
工欲善其事,必先利其器。大家在开发过程中肯定使用过非常多的开发工具,编辑器编译器等等。工具不在多,好用就行这里给大家分享我的开发组合:git+vscode现在开发无人机或者无人车应该没有人没有接触过这两个工具吧,目前最流行的开发工具。吹捧或者溢美之辞就不多说的,大家自行百度就有一把把的简介。这里给大家分享一些实用的操作,都是实用好用且肯定会用到的。gitgit是目前最为流行的版本管理,由linux的创始人开发,是他最为知名的两个开源项目之一。git有很多gui工具,但是熟悉git的常用命令...…