技术分享 | 基础知识干货,带你走进PX4的世界

2023-05-16

上期我们讲解了PX4的基础知识(上)大家可以回顾一下,本期继续为大家带来PX4基础知识下半部分内容的讲解。

 

1. PX4的开发流程

飞控简单来讲,就是通过控制电机速度从而控制飞机飞行状态,例如四旋翼就是通过控制四个电机的转速,控制飞机以期望姿态和位置去飞行的。

这其中我们就需要了解PX4的源码、飞机间的通信协议是什么,以及最后是怎么控制飞机状态的。飞机在飞行时是怎么得到反馈信息再去更新位置的等等,这些相关信息都是需要在开发过程中考虑的。

 

 

1.1 源码介绍

整个飞控阶段开发过程可以用流程图来表示:

图片

在源码编辑部分是用C++对源码进行编辑,固件编译部分主要在cmake目录中编译脚本,生成二进制固件。在启动流程中是在ROMFs中启动脚本执行运行相应的代码,最后在srs中实现功能代码。

 

 

1.1.1 程序运行前的代码

Bootloader

类似于电脑的Boot,在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。

 

Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行。Pixhawk中主处理器和协处理器都含有Bootloader。一般不需要修改,只有固件更新时需要使用。

图片

 

1.1.2 cmake

属于配置文件。主要使用nuttx_px4fmu-v2_default.cmake。cmake管理整个固件的编译过程,生成二进制固件。可以对系统使用的文件的路径进行配置,在PX4系统所有的.CPP和.C文件都是通过在该处进行路径包含的。

 

 

1.1.3 ROMFs

属于启动脚本。其功能是将程序的固件代码进行启动,让他们相互独立能够各自处理。ROMFs文件夹里面的rsc是整个启动脚本。

 

整个启动过程如图:

图片

 

 

 

1.1.4 srs

srs是源码的实现。所有的底层驱动源码的实现,例如I/O端口处理、板子的初始化和传感器等等。该目录下的module比较重要,是功能代码实现的地方。每个文件夹对应不同功能,例如姿态控制、位置控制和基于导航的位置解算等等。

 

1.2 通信协议库

无人机遥控器之间为S.bus协议,飞机对地面站的通信为Mavlink,而飞机内部之间的通信方式为uORB。下面主要介绍uORB和Mavlink两种协议。

 

 1.3 uORB

飞机内部通信都是uORB。首先要明确为什么要了解uORB,因为源码中每个功能模块,运行起来,都是相互独立的进程,并未通讯,是靠uORB打通数据流的。而对于开发人员来讲,了解uORB是非常重要的,是因为在后续做二次开发时,需要定义自己的数据流,再将其放到编译脚本中才能实现所需要的功能,所以做二次开发要掌握uORB。

 

关于uORB的创建过程:

(1)创建自己的消息主题(在msg文件中)。

(2)把自己定义的消息主题添加到编译的脚本中(在cMakelist里)

(3)对脚本重新编译(编译完成后会生成新的.h文件,_s的结构体)。

 

 1.4 Mavlink

飞机外部的通信,飞机和地面站,数传通信都是Mavlink。PX4中提供两套,V1版本和V2版本。Mavlink是为小型飞行器和地面站(或者其他飞行器)通讯时常常用到的那些数据制定一种发送和接收的规则并加入了校验(checksum)功能。协议以消息库的形式定义了参数传输的规则。MavLink协议支持无人固定翼飞行器、无人旋翼飞行器、无人车辆等多种类型的无人机。MAVLink协议是在CAN总线和SAE AS-4 标准的基础上设计形成的。

 

软件层面的启动过程图:

图片

 

 

2. 状态控制

主要从四个方面进行介绍。姿态解算、姿态控制、位置解算、位置控制。

姿态控制和位置控制的关系如图所示:

图片

姿态控制和位置控制的关系图

 

姿态解算解算出位置传给姿态控制;位置解算解算出位置传给位置控制;位置控制分为内环和外环,外环产生期望速度,内环作用速度差产生期望推力,期望推力转化为期望姿态给姿态控制;姿态控制也分为内外环,外环作用姿态差产生角速率,内环用角速率差产生控制量给被控对象。

 

2.1 坐标系

机体坐标系:向前为x轴,向右为y轴,向下为z轴。飞机从传感器得到的数据基于该坐标系。

地理坐标系称为NED(North、East、Down)。我们看飞机姿态、位置和速度都是应用地理坐标系。

 

2.2 姿态控制

姿态一共有三种表示方法:欧拉角、旋转矩阵、四元数。

 

欧拉角

欧拉角是指通过依次绕不同坐标轴的三次连续转动来实现一个坐标系到另一个坐标系的转换。

这个“依次”是要按着一定的顺序的,在这里我们规定选准顺序:先绕Z轴(偏航),再绕Y轴(俯视),最后绕X轴(横滚),按着三个方向的调准,最后三次角度组合就可以达到最后期望的姿态。

 

旋转矩阵

方向余弦矩阵表示出了机体坐标系在地理坐标系上的投影。它也可以表示姿态,但是即复杂而且也不直观,它的主要用处就在于可以直接在地理坐标系和机体坐标系之间相互转换。

 

四元数

四元数姿态表达式的基本思路为一个坐标系到另一个坐标系的变化可以通过绕一个定义在参考系中的矢量μ的单次转动来实现。四元数有五种表示方式分别为矢量式、复数式、三角式、指数式和矩阵式。其中的数学运算都是向量和矩阵运算,在初始位置和期望位置中,可以通过旋转轴一步到位。比起方向余弦矩阵表达方式,四元数会更加清晰明了。

 

 

三种表达方式彼此之间可以相互转换,彼此也有相应的优缺点。

具体可以看如下表格:

图片

 

 

2.3 位置控制

位置控制分为内外两环,外环控制。有关源码的解算思路具体如下图:

图片

源码解算思路图

 

源码的解算过程中,速度来源于加速度计,用加速度计来测当前机体所受到的加速度,减去加速度偏差,可以得到准确加速度信息,积分一次可以得到速度,两次积分后可以得到位置。

 

位置控制的过程主要参考当前位置和期望位置,位置有误差需要速度去弥补,速度有误差需要加速度去弥补,进而对当前位置和期望位置进行调整。内环作用于速度差,从而产生期望推力,外环作用于位置差,产生期望速度。最终需要得到的是外环所产生的期望速度。

 

 

3. 无人机三大算法

无人机算法分为三种,分别为捷联式惯性导航系统、卡尔曼滤波器、飞行控制PID算法。这里只对PID算法进行简单介绍,其余可以自行去搜寻相关参考资料。

 

 

图片

 

 

PID简单稳定可靠,满足一般开发人员的需求,所以飞控PID算法也是应用比较多的一种算法。PID是一种反馈的方法,并不是一蹴而就的,是需要不断反馈调节的。PID作用于误差,其效果就是用来消除误差的,让系统的状态能达到期望的状态。在PX4中用到的是位置式的PID表达形式,尤其需要注意的是积分分离和抗积分饱和这种问题。在PX4源码中专门有提供了PID库函数,在module/systemlib/PID中。

 

 

 4. 实际操作(调试)

实际操作主要分为两个部分,校准和试飞。在校准部分主要流程为:

1. 连接飞控在地面站上,将固件烧录到飞控中。

2. 对传感器(IMU)进行校准。

3. 连接遥控器到地面站,对遥控器进行校准。

4. 选择飞行模式,对应好相应的通道。

5.电调校准。

6.在地面站上重启飞控。

 

调试和试飞具体过程可以参照视频,视频一共有三部分:

 

l 调试视频,可以看到飞控如何连接到飞控上

1调试视频

 

 

l 在最后成功校准完毕,无人机的启动过程视频(还未安装螺旋桨)

2解锁飞机视频

 

 

l 试飞视频,在定点模式下的试飞视频

3试飞视频-1

 

以上所有内容均基于课程《PX4固件二次开发中级课程》

详情可学习铂贝学院相关课程:https://bbs.amovlab.com/plugin.php?id=zhanmishu_video:video&mod=video&cid=1

PX4官方网站:https://www.ncnynl.com/archives/201709/2003.html

 

作者-阿木实验室:瑶月

 

- End -

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把无人机行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在无人机行业,就请关注我们的公众号,我们将持续发布无人机行业最有价值的信息和技术。

 

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

技术分享 | 基础知识干货,带你走进PX4的世界 的相关文章

  • C语言函数如何正确的输入和返回数组(一维和二维)

    对于一维数组而言有两种方法 xff1a 1 函数外 xff08 主函数内 xff09 初始化数组 xff0c 相当于已经分配好了一块固定的内存 xff0c 然后将其地址传入函数 xff0c 经过一番操作 xff0c 再将地址返回 2 函数内
  • 将以-1结束的整数存储到字符型数组中去

    代码如下 xff1a xff08 在求整数长度的时候注意0的存在 xff09 xff08 注意字符型数组中存储的是acsii码 xff0c 比如说要将整数1存到字符型数组arr 100 中 xff0c 则是arr i 61 1 43 39
  • C语言数组的结尾字符

    对于整数型数组来说 xff0c 结尾字符为整数 对于字符型数组来说 xff0c 结尾字符为 0 xff0c 占一个空间 所以当输出字符串数组时 xff0c 若要整体输出 xff08 printf 34 s 34 s xff0c 则要在数组末
  • 含有字符串数组的结构体的赋值、输入、字符串比较

    1 之所以用到结构体 xff0c 是因为一个物体有多个属性 xff0c 此时使用结构体简单些 2 对字符串进行整体操作时 xff0c 需要添加头文件 include lt string h gt 1 字符串赋值需要使用strcpy char
  • JavaWeb

    JavaWeb Maven amp MyBatis xff1a https cyborg2077 github io 2022 08 11 JavaWeb01 JavaWeb HTML amp CSS xff1a https cyborg2
  • Ubuntu20.04+eclipse+jlink(openocd+SWD)+arm-none-eabi-gcc+STM32开发

    Ubuntu20 04 43 eclipse 43 jlink openocd 43 SWD 43 arm none eabi gcc 43 STM32开发环境搭建 1 文件准备 安装Eclipse IDE for C C 43 43 De
  • Java中类型转换

    1 char int int output 61 temp charAt 0 39 0 39 2 int char int a 61 1 char b 61 a 43 39 0 39 3 String int 将字符串转换为整数 int o
  • JAVA中int和char类型的相互转化

    预备知识 xff1a 1 int类型长度为4个字节 xff0c char类型长度为2个字节 所以char int为自动转换 xff0c int char为强制转换 xff08 因为可能有数据丢失风险 xff09 2 Java中设计char的
  • stm32的一些简单注意点

    下面说的这些只是一些关于 xff1a MiniSTM32f103系列的开发板 xff0c 以下皆是参考stm32中的手册 xff0c 只是博主的一些愚见 大家都知道 xff0c 我们是通过usb线连接我们的开发板和电脑 xff0c 我们用电
  • C++ vector用法(详解!!函数,实现)

    xff11 xff0c 简述一下vector的基本操作 xff0c 它的 xff53 xff49 xff5a xff45 xff0c capacity xff08 xff09 xff0c xff43 xff4c xff45 xff41 xf
  • 为什么很多公司都是用PADS和orCAD的组合来设计硬件呢?

    请问为什么要选用ORCAD画原理图 xff0c PADS画PCB呢 xff1f 两个不同的软件 ORCAD画原理图比较方便 xff0c 而PADS画PCB画PCB比较强大 xff0c 许多中小公司都这么干 这是各区二者所长 因为ORCAD的
  • XCOM V2.6串口助手

    XCOM V2 6 串口下载 链接 xff1a https pan baidu com s 1hMkNY zq0nqxfFnH4VRbDQ 提取码 xff1a 5bzm
  • STM32中文参考手册_V10

    STM32中文参考手册 V10 链接 xff1a https pan baidu com s 1AZXyanPyiazpVvVrJwXvRg 提取码 xff1a uwi5
  • 200SMART通信问题及解决方案

    今天在试运行S7 200SMART PLC 以太网通信 遇到以下问题 xff1a 连接时通信接口无选项如下图 解决办法如下操作 xff1a xff08 本人win10 xff09 1 打开任务管理器 xff08 在任务右击选中任务管理器即可
  • 快速创建一个scrapy爬虫

    如何快速创建一个scrapy爬虫 如下操作 xff1a 1 首先创建一个scrapy文件 在pycharm中的Terminal 中输入scrapy startproject myspider 2 快速生成一个爬虫 先进入生成后scrapy文
  • Codesys配置电子凸轮连接虚轴

    外接编码器通过电子凸轮连接虚轴 1 创建编码器和虚轴 xff08 Encoder为编码器 xff0c 该编码器是4000脉冲为一转 xff0c AXIS1为虚轴 xff09 2 配置编码器参数如下 3 配置虚轴参数如下 4 测试用了以下功能
  • Matlab的plot的线形、marker的形状、颜色

    Line StyleDescription Solid line default Dashed line Dotted line Dash dot line MarkerDescriptionoCircle 43 Plus sign Ast
  • 电脑操作用户不小心被禁用,千万不要着急。

    不小心将电脑用户禁用导致无法使用电脑 xff0c 该怎么解决 1 常见的用户禁用情况2 非常见情况 xff0c 按F8进去安全模式出现密码弹窗 记住密码的 3 极端情况 xff0c 电脑用户被禁用 xff0c 安全模式的密码不知道 有可能忘
  • Laravel框架源码解析

    一 请求 响应篇 1 程序启动准备 1 1 服务容器实例化 index php入口文件包含了 app 61 require once DIR 39 bootstrap app php 39 这一行代码 xff0c app php会返回框架的
  • 【转】MATLAB对于文本文件(txt)数据读取的技巧总结(经典中的经典)

    转自 xff1a http www matlabsky com thread 10308 1 1 html 一 基本知识 xff1a 转 1 二进制文件与文本文件的区别 xff1a 将文件看作是由一个一个字节 byte 组成的 xff0c

随机推荐

  • vscode开发ROS(5)-ROS工程目录结构

    ROS工程目录结构 ROS工程整体结构图package文件夹devel文件夹 vscode文件夹 ROS工程整体结构图 1 ROS工程整体结构图如下 2 对应到之前创建的test工程 如下 3 ROS工程总目就是整个工程的根文件夹 对应这里
  • vscode开发ROS(19)-ros与arduino串口通信(c++)

    ros与arduino串口通信c 43 43 写在最前安装serial库编写arduino串口通信程序编写ros节点端口号配置配置CMakeLists txt文件编译整个ROS工程运行节点后记 写在最前 串口通信在嵌入式领域的重要性我也就不
  • 无人机开发套件

    一 产品介绍 我们现在有完善的仿真环境开发视频教程和系列硬件学习平台 xff0c 可以帮助学生实现飞控开发的入门和提成 xff0c 帮助项目实现原型的搭建和开发的迅捷 xff0c 辅助老师实现无人机的教学 科研便捷 xff0c 可以帮助学习
  • 无人机基于Matlab/Simulink的模型开发(连载一)

    一切可以被控制的对象 xff0c 都需要被数学量化 这是笔者从事多年研发工作得出的道理 xff0c 无论是车辆控制 xff0c 机器人控制 xff0c 飞机控制 xff0c 还是无人机控制 xff0c 所有和机械运动相关的控制 xff0c
  • 无人系统路径规划开发流程(避障方向)含代码

    有很多同学在我们微信群和我们阿木实验室论坛提问 xff0c 无人机 无人车的路径规划和避障应该怎么入手 随着无人系统的发展 xff0c 无人系统的路径规划的研究也越来热 生活中无人机器系统也越来越多的出现 xff0c 从无人机 xff0c
  • 双旋翼Falcon无人机背后技术之PX4混控器

    最近被零零科技的矢量动力双旋翼Falcon无人机刷屏了 xff0c 其50分钟的续航让行业惊艳 感谢零零科技为无人机行业带来了创新的正能量 xff01 可能很多人会有疑惑 xff1f 为什么四旋翼无人机可以变身双旋翼无人机 xff0c 背后
  • PX4-Vision 自主无人机开发平台测评

    对于目前的自主无人机开发平台上 xff0c 国内的用户除了我们阿木实验室出品的自主无人机开发平台上 xff0c 又多了一种选择 xff0c 就是这个 PX4 Vision 自主无人机开发平台 硬件上是 pixhawk 4 一个 UP Boa
  • Matlab的GUI的slider滑动条和edit动态文本框联合使用例程

    代码链接 xff1a https download csdn net download benchuspx 12404653 今天想用matlab的plot画个函数的曲线图 xff0c 函数有一个参数a可以调 xff0c 不同的a对应不同的
  • 【收藏备用】控制理论结构图——一目了然全面了解控制理论

    中国自动化学会会员 System control xff0c 通过整合各种资源以及IEEE控制系统协会 国内外控制领域同仁的建议 历时12天 xff0c 迭代6个版本 xff0c 最终绘制而成的控制理论结构图 强烈建议收藏备用 xff01
  • 工程开发利器-Homer高带宽 多接口 可组网数据传输链路

    我们阿木实验室经常做各种无人系统的实验 xff0c 比如需要从远端无线采集视频图像 xff0c 本地给远端一个串口控制量 xff0c 采集远端的各种传感器数据等 有的时候需要支持TCP IP的网络数据 xff0c 有的时候需要串口透明传输数
  • 开源自主无人机软件平台—Prometheus

    Prometheus xff0c 在希腊神话中 xff0c 是最具智慧的神明之一 xff0c 希望Prometheus项目能为无人机研发工作带来无限的智慧与光明 同时电影普罗米修斯里面的无人机在黑洞中自由穿越 xff0c 也是我们在技术层面
  • 课程学习 | 开源水下机器人地面站软件开发

    鳌海海洋 xff08 AOHI Ocean xff09 是一家由国内著名高校博士 海归博士等人创立 xff0c 长期致力于以水下机器人技术为核心的海洋装备研究与开发 xff0c 正在为国家海洋局 国家电网 中船集团 蓝天救援队 千岛湖消防队
  • 阿木实验室技术课程和项目科研招募,分享知识获取收益

    阿木实验室专注于无人化系统开发平台的研发与生产 xff0c 并致力于推广前沿IT科技技术及其教育 希望通过整合优质资源 xff0c 提升研发效率 xff0c 从而促进整个技术生态的发展 为了达成这一宏伟愿景 xff0c 单靠我们是不够的 因
  • 技术专栏|阿木无人机室内避障

    之前阿木实验室提供了一系列室内定位的方案 xff0c 以及对各自的特点进行了介绍 本期我们采用T265的视觉定位方案 xff0c Matlab ROS Toolbox进行了VFH室内避障测试 Matlab ROS Toolbox 众所周知
  • 大疆览沃浩界(Livox Horizon)激光雷达测评

    测评人 董小胖 Livox Horizon xff08 览沃浩界 xff09 介绍 Livox Horizon xff08 览沃浩界 xff09 是大疆专为L3 L4自动驾驶打造的一款激光雷达 与传统的采用机械旋转结构的激光雷达不同 xff
  • 大疆Payload SDK开发火热来袭!

    DJI SDK开发课程之 大疆Payload SDK xff08 PSDK xff09 开发今日正式上线 本课程由 铂贝学院 xff08 阿木实验室 xff09 联合DJI 大疆共同推出 xff01 大疆PSDK开发课程介绍 DJI 为支持
  • 技术专栏 | 关于吊舱你了解多少?

    01 背景及预期目标 在无人机航拍领域中 xff0c 为了实现追踪拍摄 xff0c 目标检测和追踪必不可少 xff0c 因此 xff0c 目标检测和追踪技术是无人机航拍领域的重要研究方向 在本项目中 xff0c 我们将yolov3目标检测方
  • PX4官方动态 | 通过WSL2在AirSim下实现PX4仿真

    支持PX4仿真的开源项目AirSim PX4作为主流的开源飞控 xff0c 为无人机开发者们提供了一个优秀的平台 PX4用户可以将飞控板作为核心 xff0c 构建属于自己的无人机 但开源无人机的初学者很难避免炸机的惨剧 xff0c 轻则螺旋
  • P200阿木无人机学习笔记--二维码引导着陆

    目录 我手上的阿木实验室的P200无人机配置 现阶段目标 xff1a 实现二维码引导着陆 项目理解 进度 更新中 踩坑经验 初次设置时没有显示器如何远程连接TX2 xff1f 虚拟机和双系统谁更好 xff08 ubuntu xff09 无人
  • 技术分享 | 基础知识干货,带你走进PX4的世界

    上期我们讲解了PX4的基础知识 xff08 上 xff09 大家可以回顾一下 xff0c 本期继续为大家带来PX4基础知识下半部分内容的讲解 1 PX4的开发流程 飞控简单来讲 xff0c 就是通过控制电机速度从而控制飞机飞行状态 xff0