PX4
文章平均质量分 91
PX4 AutoPilot
lida2003
As long as we stand, we fight! Live long and die well!
展开
-
无人机救援系统基本组成
2.1 无人机载具:Ardupilot2.2 智能吊舱:STorM32、OpenIPC、OpenCV、JetsonAI2.3 通讯链路:wfb-ng、ELRS、Linux(PPP, VPN)2.4 云端系统:专家系统、互联网成熟技术当然,云端系统切割成业务逻辑、应用分析、以及无人机控制和管理。其中能够真正出彩的地方在于应用分析或者我们通常理解的专家系统。其应用从设计、研发、运行、维护、产品EOL整个生命周期为考察对象,提供基于全生命周期的系统级专家系统,提供服务。原创 2024-10-30 15:01:28 · 1151 阅读 · 0 评论 -
无人机救援系统简单解读
总的来说,希望上述问题,通过更多的开源项目搭建框架,实现原型。在短平快项目需求下,这种复杂系统,确实需要大量的人力物力,但是在当前开源日益强大的情况下,我们有机会基于开源做好原型验证。并通过不断迭代,使得开源更加接近产品化要求。原创 2024-10-29 11:42:27 · 872 阅读 · 0 评论 -
APM/PX4/betaflight/inav开源飞控之IMU方向
飞控硬件厂商在设计飞控的时候,在开发、测试阶段已经将IMU方向配置在硬件定义文件中了。目前,相对来说,国内比较主流的飞控代码可以分为两大类:两者坐标系有差别,尤其在硬件配置文件中定义的角度,更是出现非常离奇的情况。这里做一个整体应用级别的分析,希望能够帮助后续定位底层差异。3.2 betaflight/inav4. 实例注:始终采用Y轴方向朝前进行变换。相关映射,后续会补充,其主要原因,会随着底层分析深入,给出答案!正常旋转获得结果,XYZ轴重叠。非正常旋转,Y变成X、X变成Y、Z反向,需要驱动底层原创 2023-11-16 20:38:21 · 2727 阅读 · 2 评论 -
PX4模块设计之四十七:mavlink模块
Commands:注:usage函数是具体对应实现。输入输出。原创 2022-12-28 10:08:13 · 1589 阅读 · 0 评论 -
PX4模块设计之四十六:dataman模块
该模块纯C语言风格,提供类似数据库的API接口,后端可以采用固化文件存储或者RAM存储(类似Memcache)方式。模块仅支持start/stop/status子命令,start子命令含f/r选项,其中f是文件后端保存数据,r是ram后端保存数据。原创 2022-09-27 09:26:25 · 1175 阅读 · 0 评论 -
PX4模块设计之四十五:param模块
rebootCommands:allowed)注:print_usage函数是具体对应实现。该模块主要提供了系统参数的动态更新/固化保存,以及提供了参数修正的底层操作方法。原创 2022-09-27 07:40:24 · 682 阅读 · 0 评论 -
PX4模块设计之四十四: bmp280模块
Commands:startstop注1:print_usage函数是具体对应实现。BMP280 //类继承关系注2:BMP280模块就是针对BMP280硬件芯片进行管理和数据采集的模块。注:该模块采用了纯C语言代码实现,在main函数中直接执行命令,无需ModuleBase的custom_command重载实现。具体逻辑业务后续再做深入,从模块代码角度:输入: 芯片(硬件:bmp280)输出: sensor_baro消息。原创 2022-09-26 15:43:20 · 1066 阅读 · 0 评论 -
PX4模块设计之四十三:icm20689模块
Commands:startstop注1:print_usage函数是具体对应实现。ICM20689 //类继承关系注2:ICM20689模块就是针对ICM20689硬件芯片进行管理和数据采集的模块。注:该模块采用了纯C语言代码实现,在main函数中直接执行命令,无需ModuleBase的custom_command重载实现。具体逻辑业务后续再做深入,从模块代码角度:输入: 芯片(硬件)输出: 修改OSD显示内容注:参考和。原创 2022-09-23 16:14:08 · 2259 阅读 · 0 评论 -
PX4模块设计之四十二:ATXXXX模块
Commands:startstop注1:print_usage函数是具体对应实现。OSDatxxxx //类继承关系注2:ATXXXX模块继承了OSDatxxxx类的所有方法,其主体实现详见OSDatxxxx类。注:该模块采用了纯C语言代码实现,在main函数中直接执行命令,无需ModuleBase的custom_command重载实现。输入输出: 修改OSD显示内容。原创 2022-09-23 13:40:00 · 774 阅读 · 0 评论 -
PX4模块设计之四十一:I2C/SPI Bus Instance基础知识
采用类模板扩展ListNode应用范围通过 setSibling 设置成员变量_list_node_sibling通过 getSibling 获取成员变量_list_node_sibling注:这个类类似于C语言单向链表的一个节点结构声明。注:暂时先整理这些内容,后续随着代码阅读的增加,再补充完善。原创 2022-09-21 12:49:41 · 1574 阅读 · 0 评论 -
PX4模块设计之四十:FrskyTelemetry模块
Commands:startautostopstatus注1:usage函数是具体对应实现。注2:FrskyTelemetry模块采用了纯C语言代码实现。注:该模块采用了纯C语言代码实现,在main函数中直接执行命令,无需ModuleBase的custom_command重载实现。FrSky硬件连接图,如下所示从模块代码角度,输入输出项如下所示输入输出通过串行口输出到Rx模块,最终到遥控Tx模块。具体逻辑业务就是期望将飞控上的数据展示到遥控器上,如下图所示。原创 2022-09-15 12:57:56 · 612 阅读 · 0 评论 -
PX4模块设计之三十九:Commander模块
Commands:startarmdisarmtakeofflandpairlockdownstop注:print_usage函数是具体对应实现。注:Commander模块采用了ModuleBase, 但没有使用WorkQueue设计,因此在实现上需要实现instantiate方法。├──>原创 2022-09-15 07:38:41 · 970 阅读 · 0 评论 -
PX4模块设计之三十八:Navigator模块
Commands:startstop注:print_usage函数是具体对应实现。注:Navigator模块采用了ModuleBase, 但没有使用WorkQueue设计,因此在实现上需要实现instantiate方法。├──>原创 2022-09-14 16:58:16 · 1064 阅读 · 0 评论 -
PX4模块设计之三十七:MulticopterRateControl模块
Commands:startstop注:print_usage函数是具体对应实现。注:MulticopterRateControl模块采用了ModuleBase和WorkQueue设计。模块仅支持start/stop/status命令,不支持其他自定义命令。输入输出。原创 2022-09-14 13:37:23 · 837 阅读 · 2 评论 -
PX4模块设计之三十六:MulticopterPositionControl模块
logging.Commands:startstop注:print_usage函数是具体对应实现。注:MulticopterPositionControl模块采用了ModuleBase和WorkQueue设计。模块仅支持start/stop/status命令,不支持其他自定义命令。输入输出。原创 2022-09-14 12:45:31 · 866 阅读 · 0 评论 -
PX4模块设计之三十五:MulticopterAttitudeControl模块
Commands:startstop注:print_usage函数是具体对应实现。注:MulticopterAttitudeControl模块采用了ModuleBase和WorkQueue设计。模块仅支持start/stop/status命令,不支持其他自定义命令。输入输出。原创 2022-09-09 16:53:56 · 809 阅读 · 0 评论 -
PX4模块设计之三十四:ControlAllocator模块
Commands:startstop注:print_usage函数是具体对应实现。注:ControlAllocator模块采用了ModuleBase和WorkQueue设计。模块仅支持start/stop/status命令,不支持其他自定义命令。输入输出。原创 2022-09-08 09:39:27 · 1204 阅读 · 0 评论 -
PX4模块设计之三十三:Sensors模块
Sensors模块汇总了所有的飞控传感器,最终将处理后的传感数据以sensor_combined/airspeed/differential_pressure消息发布到系统中。Commands:startstop注:print_usage函数是具体对应实现。注:Sensors模块采用了ModuleBase和WorkQueue设计。模块仅支持start/stop/status命令,不支持其他自定义命令。输入输出。原创 2022-09-07 13:54:31 · 1470 阅读 · 0 评论 -
PX4模块设计之三十二:AttitudeEstimatorQ模块
Commands:startstop注:print_usage函数是具体对应实现。注:AttitudeEstimatorQ模块采用了ModuleBase和WorkQueue设计。模块仅支持start/stop/status命令,不支持其他自定义命令。输入输出};原创 2022-09-07 13:42:07 · 819 阅读 · 0 评论 -
PX4模块设计之三十一:ManualControl模块
从帮助的角度,该模块主要处理manual_control_inputs消息,发布one manual_control_setpoint消息。Commands:startstop注:print_usage函数是具体对应实现。注:ManualControl模块采用了ModuleBase和WorkQueue设计。模块仅支持start/stop/status命令,不支持其他自定义命令。从代码的角度输入输出。原创 2022-09-06 12:54:54 · 894 阅读 · 0 评论 -
PX4模块设计之三十:Hysteresis类
根据当前状态、期望状态、状态之间迁徙时间,通过迁徙时间和期望状态更新的迟滞算法来计算当前状态的类,能够过滤及稳定状态输出,同时带来一定的时间上的迟滞。hrt_abstime _last_time_to_change_state: 上一次状态变更时间hrt_abstime _time_from_true_us: true --> false 状态变更迟滞时间。原创 2022-09-06 07:14:52 · 623 阅读 · 0 评论 -
PX4模块设计之二十九:RCUpdate模块
Commands:startstop注:print_usage函数是具体对应实现。注:RCUpdate模块采用了ModuleBase和WorkQueue设计。模块仅支持start/stop/status命令,不支持其他自定义命令。RCInput和RCUpdate模块整体上处理了和RC(遥控器)相关的控制操作,检测/判断/决策控制状态,并将控制信号转换成内部的uORB消息进行发布。原创 2022-09-03 10:25:13 · 538 阅读 · 0 评论 -
PX4模块设计之二十八:RCInput模块
PPMSBUSDSMSUMDST24CRSFGHST- PPM- SBUS- DSM- SUMD- ST24Commands:startstop注:print_usage函数是具体对应实现。注:RCInput模块采用了ModuleBase和WorkQueue设计。除start/stop/status命令,自定义命令支持bind,主要用于接收机与发射机的绑定。├──> hrt_ppm_decode。...原创 2022-09-01 17:00:34 · 1053 阅读 · 0 评论 -
PX4模块设计之二十七:LandDetector模块
固定翼:fixedwing多旋翼:multicopter垂直起降:vtol车辆:rover飞艇:airship注:模块仅支持start/stop/status命令。Commands:stop注:print_usage函数是具体对应实现。注:LandDetector模块采用了ModuleBase和WorkQueue设计。自定义命令仅支持start/stop/status命令。该模块最重要的任务就是更新发布vehicle_land_detected消息。}......原创 2022-08-30 11:53:56 · 765 阅读 · 0 评论 -
PX4模块设计之二十六:BatteryStatus模块
Commands:startstop注:print_usage函数是具体对应实现。注:battery_status模块采用了ModuleBase和WorkQueue设计。自定义命令仅支持start/stop/status命令。模块有对adc数据进行过滤但是命令行没有相应的输出显示,也没有将处理后的adc数据发送到系统中。可能这仅仅如代码中写的,是遗产吧。.........原创 2022-08-29 11:36:39 · 679 阅读 · 0 评论 -
PX4模块设计之二十五:DShot模块
telemetry: 设置串口设备名称支持正反方向转动控制支持3D功能支持ESC状态查询支持ESC蜂鸣控制Commands:startstop注:print_usage函数是具体对应实现。注:DShot模块采用了ModuleBase和WorkQueue设计。telemetry: 设置串口设备名称正反方向转动控制3D功能ESC状态查询ESC蜂鸣控制├──> [解析m参量,第几个电机] //select motor index, default: -1=all。............原创 2022-08-27 16:11:44 · 2582 阅读 · 5 评论 -
PX4模块设计之二十四:内部ADC模块
该模块在ModuleBase基础命令上,新增定制test测试各个ADC通道采集的原始数据。Commands:startteststop注:print_usage函数是具体对应实现。注:ADC模块采用了ModuleBase和WorkQueue设计。├──> px4_usleep(20000) //等待20ms├──> // 更新20次ADC数据。...原创 2022-08-15 09:41:34 · 819 阅读 · 0 评论 -
PX4模块设计之二十三:自定义FlightTask
目前已经有大量的飞控模式在PX4系统中实现,且成熟应用。详见以下章节介绍:【1】【2】实际应用时,各有各的需求以及硬件配置等情况,导致PX4系统内部的已有飞行模式并不满足需求。因此需要增加自定义的飞行模式。这里就以PX4代码自带的Orbit飞行模式作为假设“新增”自定义飞行模式的角度来分析,如何自定义FlightTask(如何新增以及触发飞行模式)。...原创 2022-08-14 09:17:27 · 977 阅读 · 0 评论 -
PX4模块设计之二十二:FlightModeManager模块
FlightModeManager主要就是控制飞行模式的。startstop。原创 2022-08-13 16:34:14 · 1134 阅读 · 0 评论 -
PX4模块设计之二十一:uORB消息管理模块
前面主要给出和。这里主要来看下uORB消息管理模块是如何对uORB消息进行管理的。原创 2022-08-13 07:18:45 · 1037 阅读 · 0 评论 -
PX4模块设计之二十:PX4应用平台初始化
PX4应用平台初始化(px4_platform_init)在INIT初始化脚本之前,被PX4应用使用的抽象的模块都在这里进行初始化。秘钥/加密算法高精度定时PX4系统参数工作队列uORB消息打印日志等等(驱动部分不再这里讨论)注:部分尚没有对应研读的文章,没有给出链接,后续会更新。......原创 2022-08-12 09:15:55 · 766 阅读 · 0 评论 -
PX4模块设计之十九:Replay模块
Replay模块同样继承ModuleBase模块的基本命令start/stop/status命令。trystartReplay模块主要就是回放的功能,将飞控的飞行姿态根据播放速率重新回放一遍。注:上述打印帮助来自函数Replay::print_usage,具体Coding这里不再赘述,有兴趣的同学可以独立深入。├──> ...原创 2022-08-08 12:26:12 · 758 阅读 · 0 评论 -
PX4模块设计之十八:Logger模块
结合Logger模块的命令帮助提示消息,做一个简单介绍。支持SD卡文件ULog数据保存支持MAVLink流ULog数据发送可同时支持SD卡和MAVLink流数据保存和发送支持双线程(任务)模式:a) ULog数据更新;b)ULog数据保存和发送支持双线程(任务)缓冲可配置满足SD卡和MAVLink链路性能调优start:启动模块on:打开手动开启日志状态off:关闭手动开启日志状态 //只是手动开启日志的状态关闭,并不意味着日志不记录(模块内部是或的关系)stop:停止模块。.........原创 2022-08-07 17:13:03 · 1300 阅读 · 0 评论 -
PX4模块设计之十七:ModuleBase模块
ModuleBase模块是一个基础类,主要完成各个模块需要的基础功能,比如:start, stop, status命令,但是目前尚不支持多实例(类似mavlink模块多实例应用)。必须完成以下函数实现:根据情况重构以下函数实现:这是一个UML绘图工具绘制的ModuleBase类定义(给出一个整体的picture)。注:由于PX4的代码已经都完成了实现,从代码上逆向回来的UML图,所以感觉很细(很具体化);设计上的一些内容(注释,考虑,场景分析等)看不太出来。...原创 2022-08-06 06:27:14 · 1538 阅读 · 0 评论 -
PX4模块设计之十六:Hardfault模块
总体上看,这个BBSRAM设备主要用途就是记录coredump数据,类似系统的一个黑匣子。注:配合ULog日志和之前做基站固件的时候所做的【基站软件Linux技术验证和分析:黑匣子技术】非常接近,只不过当时有多级Boot和版本管理回退等底层考虑。...原创 2022-08-05 10:01:04 · 603 阅读 · 2 评论 -
PX4模块设计之十五:PX4 Log设计
黑匣子数据记录模拟飞行重现程序异常记录ULog文件格式Logger模块Replay模块HardFault模块消息体中的消息头结构};};原创 2022-08-01 10:31:22 · 1149 阅读 · 0 评论 -
PX4模块设计之十四:Event设计
事件接口将事件uORB消息发布到系统内,其主要作用是通过MAVLink传输层,将消息发送到GCS和其他组件。该接口可用于发布状态变化或任何其他类型事件的事件,包括待命准备、校准完成和达到目标起飞高度等。PX4系统里面将这部分内容抽象出一个模块,并在repo上通过submodule的方式引入,体现了设计的模块化。......原创 2022-07-29 09:23:23 · 1058 阅读 · 0 评论 -
PX4模块设计之十三:WorkQueue设计
工作队列,其实并不负责。而PX4的工作队列为什么看起来复杂,主要是工作队列和实际的业务耦合。这里我们还没有将uORB的订阅内容放到里面,如果结合这部分,再加上多个继承业务的相互切换等内容,就看似更加复杂了。所以我们尤其强调设计需要松耦合,尽量模块化,明确接口设计,明确框架设计。......原创 2022-07-27 19:08:26 · 1690 阅读 · 0 评论 -
PX4模块设计之十二:High Resolution Timer设计
PX4飞控整体软件设计在嵌入式平台(platform)层面增加了一个公共层(common)来处理work_queue、uORB、event,并统一接口对外提供服务。而这些对外服务的基础又是基于HRT模块。这里针对Nuttx系统的FlatBuild和ProtectedBuild对HRT模块进行研读。...原创 2022-07-26 20:27:52 · 1186 阅读 · 0 评论 -
PX4模块设计之十一:Built-In框架
Nuttx官网的Built-In介绍的REGISTER和实际PX4工程的主要差异是PX4采用的.bdat/.pdat中间文件的方式(详见2.4NSH应用.pdat/.bdat生成途径)PX4使用了大量的submodule,相关整合方面的介绍比较欠缺,尤其是工程面的。(对于C背景的研发人员可能会有一点的不习惯。通常C背景的会将每行代码都搞得一清二楚。不想现在大量使用组件方式,不太关注框架,更重视应用的快节奏。)关于符号重命名脚本define.sh。.....................原创 2022-07-21 09:15:54 · 1258 阅读 · 0 评论