PX4之常用函数解读

2023-05-16

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的博客-CSDN博客_px4是用什么语言

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PX4之常用函数解读 的相关文章

  • PX4+QGC+jmavsim软件在环仿真

    一 环境修改 参考官方手册jMAVSim 仿真模拟 PX4 Developer Guide xff0c 以上环境基于上一篇内容 xff0c 未完成ROS 43 jmavsim 43 QGC环境搭建的请移步Ubuntu18 04下px4 43
  • 下载并构建PX4

    根据官方的文档 xff0c PX4下载和构建的方式有两种 xff1a Linux系列的Console模式 xff08 当然也支持Windows下的MINGW32 xff09 和Windows模式 在Windows平台下 xff0c 我们习惯
  • PX4通过I2C方式添加自定义传感器(3)

    添加自定义传感器并实现数据的发送和订阅 1 前期准备 1 1 建立文件夹和相关文件配置 我是在src drivers distance sensor文件夹下操作的 xff0c 当然其他文件夹下都类似 首先建立了两个文件夹angle sour
  • px4: v2的主板刷写v2的固件

    v2的主板刷写v2的固件 fengxuewei 64 fengxuewei Legion Y7000 2019 PG0 src Firmware changwei rc span class token function make span
  • PX4位置控制offboard模式说明

    offboard模式的开发及应用 一 px4固件的模式 px4固件支持10几种飞行模式 xff0c 从代码结构上分析 xff0c 分为基本模式 自定义模式和自定义子模式 1 基本模式 基本模式又分为 xff0c 位置控制模式 自稳模式 手动
  • Ubuntu20.04+MAVROS+PX4+Gazebo保姆级安装教程

    Ubuntu20 04 43 MAVROS 43 PX4 43 Gazebo 安装PX4步骤安装MAVROS安装QGCPX4仿真 安装PX4步骤 从github上clone源码 span class token function git s
  • 基于F4/F7/H7飞控硬件和px4飞控固件的廉价自主无人机系统(1)-飞控

    前言 穿越机F4 F7 H7飞控是一系列采用stm32系列F4xx和F7xx处理器的飞控的统称 xff0c 是目前穿越机爱好者非常喜欢使用的飞控硬件 xff0c 其价格也非常便宜180 xff5e 410 而px4则是一款常见的开源飞控固件
  • PX4飞控之PWM输出控制

    PX4飞控之PWM输出控制 多旋翼电调如好盈XRotor xff0c DJI通用电调等都支持PWM信号来传输控制信号 常用的400Hz电调信号对应周期2500us xff0c 一般使用高电平时间1000us 2000us为有效信号区间 xf
  • 无人机仿真—PX4编译,gazebo仿真及简单off board控制模式下无人机起飞

    无人机仿真 PX4编译 xff0c gazebo仿真及简单off board控制模式下无人机起飞 前言 在上篇记录中 xff0c 已经对整体的PX4仿真环境有了一定的了解 xff0c 现如今就要开始对无人机进行起飞等仿真环境工作 xff0c
  • PX4 -- EKF2

    文章目录 EKF2参数高度估计Range Finder滤波 单变量更新单变量更新对多变量的影响 EKF2 参数 EKF2 中有一类 GATE 参数 当测量值在 VAR GATE 范围内才会更新值 高度估计 四种高度控制方法 xff1a 气压
  • PX4模块设计之三十六:MulticopterPositionControl模块

    PX4模块设计之三十六 xff1a MulticopterPositionControl模块 1 MulticopterPositionControl模块简介2 模块入口函数2 1 主入口mc pos control main2 2 自定义
  • mavros连接px4失败的usb-ttl原因

    问题描述 xff1a 最近在搞mavros xff0c 以方便协处理器和pixhawk通讯 xff0c 在按照官网教程安装mavros xff0c 设置px4 xff0c 连接硬件之后发现mavros卡在中间下不去 xff1a MAVROS
  • 关于github px4 gps 驱动的开发的总结

    源码编译上边已经写过文章了 遇到的几个问题 1 解决虚拟机不能共享文件夹的问题 一开始虚拟机的更新 vmware tools 是灰色的 xff0c 不能点 xff0c 然后通过关掉虚拟机 xff0c 然后再开启的时候 xff0c 在没有启动
  • px4仿真无法起飞问题(Failsafe enabled: no datalink)

    报错信息 问题描述 xff1a 使用JMAVSim和gazebo仿真px4起飞时报错如下 xff1a WARN commander Failsafe enabled no datalink 说不安全 解决方法 打开QGC 就可以起飞了
  • PX4——Range Finder 篇

    Range Finder 此处选用的是 Benewake 下的 Lidar 参数设置 General Configuration 除了官方的参数设置外 xff0c 我在 EKF2 中还找到了 EKF2 RNG AID 参数 xff0c 用来
  • PX4模块设计之二十七:LandDetector模块

    PX4模块设计之二十七 xff1a LandDetector模块 1 LandDetector模块简介2 模块入口函数2 1 主入口land detector main2 2 自定义子命令custom command 3 LandDetec
  • 步骤八:PX4使用cartographer与move_base进行自主建图导航

    首先老样子硬件如下 飞控 HOLYBRO PIXHAWK V4 PX4 机载电脑 jetson nano b01 激光雷达 思岚a2 前提 你已经完成了cartographer建图部分 能够正常输出map话题 前言 由于要参加中国机器人大赛
  • 【PX4 飞控剖析】06 树莓派加载安装ROS,Mavros以及PX4固件

    PX4 飞控剖析 06 树莓派加载安装Mavros以及PX4固件 1 树莓派 刷镜像1 1 用Win32DiskImager刷入ubuntu mate 16 04 2 desktop armhf raspberry pi的镜像 1 2 开机
  • PX4项目学习::(五)模块代码启动流程

    54条消息 PX4 模块代码启动流程 zhao23333的博客 CSDN博客
  • 飞行姿态解算(三)

    继之前研究了一些飞行姿态理论方面的问题后 又找到了之前很流行的一段外国大神写的代码 来分析分析 第二篇文章的最后 讲到了文章中的算法在实际使用中有重大缺陷 大家都知道 分析算法理论的时候很多情况下我们没有考虑太多外界干扰的情况 原因是很多情

随机推荐

  • freertos入门之binary semaphore

    基于esp32 平台 参考 xff1a https www freertos org fr content src uploads 2018 07 161204 Mastering the FreeRTOS Real Time Kernel
  • freertos入门之EventGroup

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • freertos入门之Timer

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • freertos入门之StreamBuffer

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • 设置cpp-httplib 服务器模式模式下的线程池大小 以及如何增加默认处理函数 以便能够实现http请求转发

    先说说默认的创建的线程池数量 原因是某天调试在gdb调试下 一启动程序发现 开启了好多线程 如下图 因为我们程序 没几个线程 数了下 居然有60多个线程 不需要那么多 所以看下 httplib的源码 构造函数的时候 设置了最大线程池数量 看
  • freertos入门之StreamBuffer

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • arduino-esp32 入门之wifi连接热点

    参考 xff1a https github com espressif arduino esp32 blob master libraries WiFi examples WiFiClient WiFiClient ino span cla
  • esp32-arduino入门之点亮led

    参考 xff1a https learncplusplus org how to program arduino with c span class token macro property span class token directi
  • stm32 学习资料汇总

    外设库以及example xff1a Google 搜索 STM32 Standard Peripheral Libraries
  • HttpClient学习研究---第四章:HTTP authenticationHTTP身份验证

    第四章 HTTP authentication HTTP身份验证 HttpClient provides full support for authentication schemes defined by the HTTP standar
  • Linux系统下常用的3个网络测试工具!

    在Linux系统中 xff0c 有很多用于管理和监测网络连接的命令 xff0c 其中ping traceroute和nslookup是比较常用的网络命令 xff0c 可以用来测试网络 诊断网络故障等等 xff0c 以下是详细的内容 xff1
  • TCP.02.SELECT模型

    文章目录 SELECT模型简介SELECT模型流程SELECT原理SELECT代码实现fd set 数组及基本操作SELECT函数参数2 xff08 重点 xff09 参数3参数4 关闭所有SOCKET句柄处理控制台窗口关闭事件整体代码思考
  • Node.js http 模块详解:request 对象

    前言 前文介绍了 http 模块的基本用法 xff0c 主要就是调用 createServer 和 listen 方法来创建和启动服务 要处理具体的 HTTP 请求 xff0c 就要在 createServer 方法中写点什么 本文来介绍处
  • 如何确认串口波特率

    文章目录 1 盲扫一遍2 示波器测量1bit时间3 逻辑分析仪确认 背景 xff1a 手上有一个模块使用串口通信但是不知道其波特率 xff0c 如何确认它的波特率呢 xff1f 1 盲扫一遍 波特率有常用的配置9600 115200 230
  • curl命令常用参数

    curl命令常用参数 curl简介常用方法将远程文件下载到本地 o并指定名称指定请求方式 X显示响应结果 v携带用户名 密码 u携带请求头 H查看服务端响应头 i只显示http response的头信息 I自动跳转 L模拟dns解析 res
  • 学习ZLmediaKit流媒体服务器时候遇到的问题

    照zlmediakit的源码 自己复制了一份 然后有的地方编译不过修改了部分 测试的时候发现有两个问题 第一是 ffmpeg的ffplay 能播放 vlc不能播放 第二个问题是directProxy设置为0的时候 推流的时候 然后用ffpl
  • 如何在C/C++中使用pi (π) 值

    在math h有一个宏定义M PI if defined USE MATH DEFINES amp amp defined MATH DEFINES DEFINED define MATH DEFINES DEFINED Definitio
  • 关于#include<bits/stdc++.h>

    偶然发现 span class hljs preprocessor include lt bits stdc 43 43 h gt span 包括了C 43 43 几乎所有的头文件 xff0c 感觉以后可以返璞归真了 回顾自己不长的竞赛历程
  • 单片机STM32直连电调控制航模涵道电机的方法总结

    单片机STM32直连电调控制航模涵道电机的方法总结 文章目录 单片机STM32直连电调控制航模涵道电机的方法总结前言一 硬件情况二 涵道电机两种常见的驱动方式1 有线控制方式2 无线控制方案 解决方案 前言 由于项目需要 xff0c 我需要
  • PX4之常用函数解读

    PX4Firmware 经常有人将Pixhawk PX4 APM还有ArduPilot弄混 这里首先还是简要说明一下 xff1a Pixhawk是飞控硬件平台 xff0c PX4和ArduPilot都是开源的可以烧写到Pixhawk飞控中的