PX4之常用函数解读

无人机/飞控--ArduPilot、PX4学习历程记录(1) PX4支持全球导航卫星系统(GNSS)接收器 和 罗盘(磁力计),实时动态(RTK)GPS接收器。的高级飞行状态和飞行准备提示。例如,这些提示表明飞行器是否正确校准,是否有SD卡,是否有位置锁定,是否可以安全起飞,是否解锁等。根据up主的讲解,我进行整理。飞控是最底层的控制器,直接对无人机进行控制,其他的控制系统充当高级控制器,对飞控进行控制。PX4将光流传感器输出 与 来自其他定位源(例如GPS)的信息融合,以提供更准确的位置。飞行器状态包括:位置/高度,航向,速度,空速,方向(姿态),电池电量等。 阅读详情

PX4Firmware

        经常有人将Pixhawk、PX4、APM还有ArduPilot弄混。这里首先还是简要说明一下:

        Pixhawk是飞控硬件平台,PX4和ArduPilot都是开源的可以烧写到Pixhawk飞控中的自驾仪软件,PX4称为原生固件,专为Pixhawk打造。APM(Ardupilot Mega)早期也是一款自驾仪硬件,到APM3.0版本,这款基于Arduino Mega的自驾仪已经走到了它的终点。ArduPilot早期是APM自驾仪的固件,Pixhawk作为APM的升级版,也兼容ArduPilot固件,APM自驾仪卒了之后,ArduPilot现在全面支持Pixhawk,现在大家亲切的称ArduPilot固件为APM。

        PX4固件主要是用C++语言编写,使用了NuttX实时操作系统,整体软件架构不可谓不庞大。

        不知道如何开头,复述一个人工智能和机器人领域著名的莫拉维克悖论:和传统假设不同,对计算机而言,实现逻辑推理等人类高级智慧只需要相对很少的计算能力,而实现感知、运动等低等级智慧却需要巨大的计算资源。

且从系统说起吧。
 

RTFSC

Pixhawk整体逻辑大致为:

commander和navigator产生期望位置

position_estimator估计当前位置

通过pos_ctrl产生期望姿态

attitude_estimator估计当前姿态

通过att_ctrl产生期望力矩

最后通过mixer和motor_driver控制电机

一直都还只是停留在底层,什么时候能感受一下ETHz这帮人的成果呢,这才是pixhawk啊。
 

启动函数

        Pixhawk是没有main函数的,飞控上电后,会自动执行Firmware/ROMFS/px4fmu_common/init.d文件夹下的rcS 启动脚本(startup script)。这个脚本位于被编译到固件中的 ROM文件系统中。这个脚本检测可用的硬件, 加载硬件驱动,并且根据你的设置启动系统正常运行所需的有 app(任务软件 ,包括位置和姿态估计,控制遥测等)。所有属于自启动程序的脚本文件可以在init.d文件夹中找到。

        uORB是Pixhawk系统中非常重要且关键的一个模块,它肩负了整数据传输任务,所有的感器、 数据传输任务、 GPS、PPM信号等都要从芯片获取后通过uORB进行传输到各个模块进行计算处理。

        uORB 的入口点是 uorb_main函数,在这里它检查 uORB的启动参数来完成对应的功能, uORB支持 start/test/status这 3条启动参数,在 PX4的rcS启动脚本中,使用start参数来进行初始化,其他 2个参数分别用来进行uORB功能的自检和列出 uORB的当前状态。
        在rcS中使用 start参数启动uORB后,uORB会创建并初始化它的设备实例,其中的实现大部分都在CDev基类完成。

rcS启动顺序

extern “C” __EXPORT int main(int agrc, char *agrv[ ]);

        argc和argv是main函数的形参,它们是程序的“命令行参数”。agrc(argument count的缩写,意思是参数个数),argv(argument vector的缩写,意思是参数向量),它是一个*char指针数组,数组中每一个元素指向命令行中的一个字符串。
        main函数是操作系统调用的,实参只能由操作系统给出。在操作命令状态下,实参是和执行文件的命令一起给出的。例如在DOS、UNIX或Linux等系统的操作命令状态下,在命令行中包括了命令名和需要传给main函数的参数。

命令行的一般形式为:

命令名 参数1 参数2 …… 参数n

命令名和各参数之间用空格分隔。命令名是可执行文件名(此文件包含main函数)。

        在rcS执行的时候,比如attitude_estimator_q_main start
        那么agrc就等于2,agrv[0]就是attitude_estimator_q_main这个字符串,argv[1]就是start。
        所以要判断agrv[1]是start还是stop。
        就像你在dos命令行里输入attitude_estimator_q start,自然就给agrc和agrv[]赋值。NuttX系统下的模块的主函数名字都是以”_main”开始的,但是调用的时候不加“_main”。

(25条消息) Pixhawk原生固件PX4之常用函数解读_FantasyJXF的博客-优快云博客_px4是用什么语言

飞行控制器固件项目-对比介绍(Ardupilot、PX4、LibrePilot、OpenPilot) ArduPilot与Pixhawk什么关系:https://zhuanlan.zhihu.com/p/109639638 无人机开源项目_8个开源无人机项目:https://blog.youkuaiyun.com/cuml0912/article/details/107417773 *Ardupilot Ardupilot可能是最受欢迎的无人机自动驾驶仪软件。 它从一开始就存在,并拥有一个活跃的开发社区。 该软件几乎可以控制任何车辆,包括固定翼飞机,四旋翼飞机以及包括混合动力车,地面漫游车... 阅读详情

相关推荐

PX4代码解析(1)

前言 做pixhawk飞控有一段时间了,但在学习过程中遇到许多困难,目前网上找不到比较完整的PX4学习笔记,我打算结合自己理解,写写自己对PX4源码的理解,不一定对,只是希望与各位大佬交流交流,同时梳理一下无人机知识。 目前打算分享以下几个内容:代码架构;通信协议;姿态解算算法,控制算法。先这样,后面想到再加。本章先来聊聊px4代码结构 一、代码整体结构 既然要聊px4代码结构,那就先把px4代码结构图放出来,因为px4源码仍然在不断更新迭代,因此老版本与新版本目录结构可能有些不同,我的代码解析参考版本为V

qq_36903625的博客 1万+

PX4从放弃到精通(一):开源飞控PX4简介+系列文章大纲

文章目录前言一、PX4是什么?二、PX4能做什么?1.支持的载具2.支持的飞控硬件二、PX4架构二、如何开发PX4?二、基于PX4的集群开发二、基于PX4的避障开发总结 前言 设计无人机的飞控是一个非常复杂的工程,因此对于很多做无人机的同学来说,使用开源飞控更加方便高效.本文主要介绍有"开源飞控之王"之称的PX4飞控,主要使想研究这一飞控的同学对此有一个初步的认识. 一、PX4是什么? PX4是由苏黎世联邦理工学院的计算机视觉与几何实验室的一个软硬件项目PIXHAWK演变而来,目的在于为学术、爱好和工业团体

超维空间科技的博客 8万+

px4源码解读之fw_att_control

程序和控制流程 个人简单的总结了一下整个程序的流程如下: 整个的控制流程图可以在官网中找到: 源码解读 在解读源码之前,需要提几个公式,第一个就是协调转弯中的偏航控制,也就是流程图中为什么输入是空速: ⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪p=ϕ˙−ψ˙sinθq=θ˙cosϕ+ψ˙cosθsinϕr=−θ˙sinϕ+ψ˙cosθcosϕψ˙=gVtanϕ(1-1)(1-2)(1-3)(...

FC的博客 2345

开源飞控之王PX4

PX4作为开源飞控的代表,凭借其卓越的性能和广泛的应用场景,赢得了众多无人机爱好者和开发者的青睐。相信在未来的发展中,PX4将继续引领无人机飞行控制技术的前沿,为无人机应用带来更多的可能性。

u013558123的博客 4069

开源飞控PX4姿态控制代码解析

本篇文章首发于公众号:无人机系统技术。更多无人机技术相关文章请关注此公众号,有问题也可在公众号回复“加群”进入技术交流群进行交流。 本公众号将于9月11号联合电子工业出版社送出15本价值98元的《多旋翼飞行器设计与控制》书籍,敬请期待。关注:无人机系统技术,了解详情!!! 引言 上一讲PX4姿态控制算法详解我们对PX4姿态控制的算法进行了详细解析,还没看过的朋友先打开第三条内容仔细阅读后再来继续浏...

weixin_44616080的博客 4230

PX4在GAZEBO仿真中加载iris模型问题

目录1. PX4启动仿真的launch系列文件1.1 单个launch文件解读1.2 对iris模型添加相机1.3 ~/.bashrc环境变量问题2. 一些Bug2.1 我的台式机无法加载模型2.1.1 若使用`v1.9.2版本`2.1.2 若使用`v1.12.3版本`2.2 gazebo无法打开 1. PX4启动仿真的launch系列文件 1.1 单个launch文件解读 打开每个文件的开头,都有对它功能的描述。 px4.launch Posix SITL PX4 launch script La

boyhoodme的博客 5774

Pixhawk原生固件PX4之常用函数解读

px4 functions....

FantasyJXF的博客 1万+

PX4代码CMakeLists.txt的简单解读

分析一下PX4代码CMakeLists.txt文件 #============================================================================= # CMAKE CODING STANDARD FOR PX4 # # Structure # ----------------------------------------------

bolvtin的博客 3237

PX4源码解读资源文件介绍

PX4源码解读资源文件介绍 【下载地址】PX4源码解读资源文件介绍 PX4源码解读资源文件介绍 项目地址: https://gitcode.com/open-source-toolkit/7aefc ...

gitblog_09817的博客 392

PX4中的mahony姿态算法解析

文章目录参考文献 PX4里面有两种姿态估计算法,一种是基于EKF的,还有一种是基于mahony的,虽然mahony算法简单而且计算量少,但性能并不输EKF多少 参考文献 PX4二次开发——基于mahony算法的姿态估计 ...

weixin_42918498的博客 3585

七、键盘控制无人机 ·总(PX4与ROS关系以及仿真控制)

笔记来源于开源项目:基于PX4和ROS的无人机仿真平台 来源于开源项目:GAAS 目录 一、PX4与ROS关系 二、XTDrone源码下载 三、用键盘控制无人机飞行 一、PX4与ROS关系 注意各端口(UPD port) 或者看下面的这个图的表示关系!我们一般在offboard模式下通过外部程序完成我们给无人机的任务 二、XTDrone源码下载 XTDrone是一个开源项目,目前支持多旋翼飞行器(multirotor)、固定翼飞行器(plane)、可垂直起降固定翼飞行器(vtol.

猪猪的博客 6744

PX4 Makefile分析解读

参考文章:PX4源码的Makefile详细理解 http://blog.youkuaiyun.com/linkcian/article/details/79152724 感谢原文作者主要分析 make px4fmu-v2_default编译流程,其余make命令不做解读# Enforce the presence of the GIT repository # # We depend on our submo...

xiaoshuai537的博客 1792

PX4实战(三):PX4 Mavlink模块代码详解

本节主要讲解Mavlink协议基础内容、PX4中mavlink模块代码讲解、用户如何自定义mavlink协议等。

PX4-SLAM-PNC 2865

PX4开源工程结构简明介绍

PX4具有高度可移植性,且是一个不依赖于操作系统的无人机解决方案。从业界的角度确实是非常优秀且庞大的一款开源软件解决方案,支持的硬件除Pixhawk系列外,还有很多AutoPilot硬件支持厂家,详见链接。注1:笔者采用的就是Kakute F7 AIO(老版本);新版本采用MPU6000。后续介绍不做特殊说明,默认都是针对这款飞控控制器的一些代码理解。注2:这款Kakute F7 AIO版本可以使用的开源固件相对来说也比较广泛,比如:Paparazzi/BetaFlight/PX4等等;关于BetaFlig

lida2003的专栏 6527

LVGL字体优化实战:如何将中文字库放到外部SPI Flash并动态加载(节省内部RAM)

本文详细介绍了LVGL在嵌入式UI开发中如何通过外部SPI Flash存储中文字库并动态加载,以节省内部RAM资源。通过对比不同存储介质和字库格式,提供多种实现方案及性能优化技巧,帮助开发者在资源受限设备上实现高效的中文显示。

weixin_28693683的博客 343

拆解大疆M300电池BMS:基于TI TIDA-010030方案的硬件架构深度分析

本文深度解析了大疆M300无人机电池管理系统(BMS)基于TI TIDA-010030参考设计的硬件架构。通过对比TI方案与大疆实现的差异,详细介绍了BQ7694003监控前端和BQ34Z100电量计的优化设计,以及通信架构的可靠性改进。文章还揭示了大疆在成本、空间和标准化方面的工程妥协与创新平衡,为锂电池保护方案提供了实践参考。

weixin_27066963的博客 238

PX4编译文件 Makefile 剖析

PX4 编译分析 当我们执行 cd Firmware进入PX4源码目录, 然后make 的时候,我们会看到一串输出基本如下(第一次编译会有更多的输出) [ 2%] Built target df_driver_framework [ 3%] Built target lockstep_scheduler [ 3%] Built target uorb_headers [ 3%] Built...

lipi37的博客 5130

GPU加速的容器化AI开发:AnolisOS/CentOS8中的NVIDIA驱动与CUDA最佳实践

本文详细介绍了在AnolisOS/CentOS8系统中配置NVIDIA驱动与CUDA的最佳实践,涵盖驱动安装、CUDA工具链配置、容器运行时设置及性能优化等关键步骤。特别针对容器化AI开发场景,提供了GPU透传和资源管理的实用方案,帮助开发者构建高效的GPU加速开发环境。

weixin_27791839的博客 341

PX4混控加载与混控输出代码解读

混控器的作用是把姿态控制输出的roll,pitch,yaw力矩转换为电机的输出。PX4现将姿态控制分为几种,分别是固定翼姿态控制、无人车、无人船和多旋翼姿态控制(四轴、六轴、直升机等)。 本文代码版本是V1.13.0,在代码中追踪混控是如何加载与实现混控配置

m2301023的博客 2798

数据库decimal类型详解:精度、标度与金额计算避坑指南

在关系型数据库中,浮点数精度丢失是常见问题,尤其涉及金额计算时,一分钱误差都可能导致对账失败。decimal类型通过十进制存储方式,将小数当作定点数处理,避免了二进制转换误差,确保运算结果精确。其核心在于精度和标度的合理定义,以及运算舍入规则的控制。在电商订单、汇率转换、税务计算等场景中,decimal是保障数据准确性的关键技术。理解其存储原理和实操细节,能有效规避隐式转换、聚合函数精度等常见坑点,提升系统可靠性。

weixin_32050773的博客 271

TI Sitara PRU可编程实时单元:工业自动化中的硬实时协处理器解析

在嵌入式系统与工业自动化领域,实时性和确定性是核心需求。实时性指系统对外部事件做出响应的可预测时间,确定性则要求响应时间严格一致,不受其他任务干扰。其技术原理通常通过专用硬件或实时操作系统实现,例如采用独立于主CPU的协处理器来处理高精度时序任务。这种设计的技术价值在于,它能将主CPU从高实时性要求的任务中解放出来,专注于复杂业务逻辑,同时确保关键IO操作达到纳秒级延迟和极低抖动。应用场景广泛覆盖伺服电机控制、工业通信协议加速和多接口扩展等。本文聚焦的TI Sitara系列PRU(可编程实时单元),正是此类

weixin_42526068的博客 284

【亲测免费】 深入PX4飞控系统:源码解读资源文件推荐

深入PX4飞控系统:源码解读资源文件推荐 【下载地址】PX4源码解读资源文件介绍 PX4源码解读资源文件介绍 项目地址: https://gitcode.com/open-source-toolkit/7aefc ...

gitblog_09718的博客 759

串口通信的性能瓶颈分析:如何提高数据吞吐量和降低延迟

摘要: 串口通信在高频或大数据场景下存在吞吐量不足、延迟高、丢帧等问题,主要瓶颈包括波特率限制、缓冲区不足、CPU轮询延迟等。优化策略包括:提升波特率至硬件上限、增大缓冲区、采用异步I/O(如ReadAsync)减少线程切换,使用二进制协议降低解析开销。实时性方面需启用硬件流控、批量发送数据,并优化线程优先级。跨平台适配需区分Windows/Linux的缓冲区设置与异步机制。性能测试可通过吞吐量、延迟及回环测试验证优化效果,核心原则是硬件匹配、异步处理、协议优化与跨平台适配。(150字)

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 982
上一篇: PX4 代码分析与二次开发
下一篇: PX4项目学习::(一)项目架构
逍遥_xiaoyao
博客等级 码龄6年 286粉丝 144原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值