PX4的代码测试

2023-05-16

PX4的代码测试

写完代码总要测试一下吧,自己先测试一下,怎么用Test呢?
官方关于测试的概括说明:
Platform Testing and Continuous Integration | PX4 User Guide
http://docs.px4.io/master/en/test_and_ci/
单元测试说明:
http://docs.px4.io/master/en/test_and_ci/unit_tests.html#unit-tests

PX4的测试有:

  • 飞行测试
  • 单元测试
  • 集成测试
    推荐一些顶级的开源CI/CD工具_云计算_Dan Barker_InfoQ精选文章
    https://www.infoq.cn/article/3EsQkqH52bJGVQ*wejFu
  • ROS集成测试
  • MAVSDK集成测试
  • Docker
  • 维护

单元测试

  • 使用Google Test的单元测试,具有最小的,最少的内部依赖
  • GTest功能测试——依赖parameters和uORB模块
  • SITL单元测试——这适用于需要在完整 SITL 中运行的测试。这些测试运行起来要慢得多,也更难调试,因此建议尽可能使用 GTest。
  1. 单元测试应该安排在三个部分:设置、运行、检查结果。每个测试都应该测试一个非常具体的行为或设置案例,因此如果测试失败,很明显出了什么问题。请尽可能遵循这些标准。
  2. 将示例单元测试 AttitudeControlTest (opens new window) 复制并重命名到要测试的代码所在的目录。
  3. 将新文件添加到目录的 CMakeLists.txt。 它应该类似于 px4_add_unit_gtest(SRC MyNewUnitTest.cpp LINKLIBS <library_to_be_tested>)
  4. 添加所需的测试功能。 这意味着包括特定测试所需的头文件,添加新测试(每个测试都有一个单独的名称)并放置设置逻辑,运行要测试的代码并验证其行为是否符合预期。
  5. 如果需要额外的库依赖项,还应将它们添加到 LINKLIBS 之后的 CMakeLists 中,如上所示。

功能测试

当测试或被测试的组件依赖于参数、uORB 消息和/或高级 GTest 功能时,应使用 GTest 功能测试。此外,功能测试可以包含 STL 数据结构的本地使用(尽管要注意 macOS 和 Linux 之间的平台差异)。
创建新功能测试的步骤如下:

  1. 一般来说(和单元测试类似),功能测试应该分为三个部分:设置、运行、检查结果。每个测试都应该测试一个非常具体的行为或设置案例,因此如果测试失败,很明显出了什么问题。请尽可能遵循这些标准。
  2. 将示例功能测试 ParameterTest (opens new window) 复制并重命名到要测试的代码所在的目录。
  3. 将类从 ParameterTest 重命名为更好地代表正在测试的代码的名称
  4. 将新文件添加到目录的 CMakeLists.txt。它应该类似于 px4_add_functional_gtest(SRC MyNewFunctionalTest.cpp LINKLIBS <library_to_be_tested>)
  5. 添加所需的测试功能。这将意味着包括特定测试所需的头文件,添加新测试(每个测试都有一个单独的名称)并放置测试设置的逻辑,运行要测试的代码并验证其行为是否符合预期。
  6. 如果需要额外的库依赖项,还应将它们添加到 LINKLIBS 之后的 CMakeLists 中,如上所示。
    可以通过 make 测试运行测试,之后您将在
    build/px4_sitl_test/functional-MyNewFunctional
    中找到二进制文件。它可以直接在调试器中运行,但是请注意使用
    –gtest_filter=
    参数在每个可执行调用中只运行一个测试,因为 uORB 和参数库的某些部分不会自行清理如果设置多次,可能会导致未定义的行为。

SITL 单元测试

当您特别需要所有飞行控制器组件(驱动程序、时间等)时,应使用 SITL 单元测试。这些测试运行速度较慢(每个新模块需要 1 秒以上),并且更难调试,因此通常只应在必要时使用它们。
创建新的 SITL 单元测试的步骤如下:

  1. 检查示例单元测试类(https://github.com/PX4/PX4-Autopilot/blob/master/src/include/unit_test.h)。
  2. 在测试中(PX4-Autopilot/src/systemcmds/tests/)。创建一个名为 test_[description].cpp 的新 .cpp 文件
  3. 在 test_[description].cpp 中包含基本的 unittest-class <unit_test.h> 以及为新功能编写测试所需的所有文件。
  4. 在 test_[description].cpp 中创建一个继承自 UnitTest 的类 [Description]Test。
  5. 在 [Description]Test 类中声明公共方法 virtual bool run_tests()。
  6. 在 [Description]Test 类中声明测试相关功能所需的所有私有方法(test1()、test2()、…)。
  7. 在 test_[description].cpp 中实现 run_tests() 方法,每个 test[1,2,…] 将在其中运行。
  8. 在 test_[description].cpp 中,实现各种测试。
  9. 在 test_[description].cpp 的底部声明测试:
    ut_declare_test_c(test_[description], [Description]Test)

完整例子如下:

#include <unit_test.h>
#include "[new feature].h"
...

class [Description]Test : public UnitTest
{
public:
    virtual bool run_tests();

private:
    bool test1();
    bool test2();
    ...
};

bool [Description]Test::run_tests()
{
    ut_run_test(test1)
    ut_run_test(test2)
    ...

    return (_tests_failed == 0);
}

bool [Description]Test::test1()
{
    ut_[name of one of the unit test functions](...
    ut_[name of one of the unit test functions](...
    ...

    return true;
}

bool [Description]Test::test2()
{
    ut_[name of one of the unit test functions](...
    ut_[name of one of the unit test functions](...
    ...

    return true;
}
...

ut_declare_test_c(test_[description], [Description]Test)

请注意,ut_[name of one of the unit test functions]对应于 unit_test.h 中定义的单元测试函数之一
10. 在 tests_main.h(打开新窗口)中定义新测试:

extern int test_[description](int argc, char *argv[]);
  1. 在tests_main.c 中添加描述名称、测试功能和选项
...
} tests[] = {
    {...
    {"[description]", test_[description], OPTION},
    ...
}

OPTION 可以是 OPT_NOALLTEST、OPT_NOJIGTEST 或 0,如果在 px4 shell 中调用了两个命令之一,则考虑:

pxh> tests all

或者:

pxh> tests jig

如果测试具有选项 OPT_NOALLTEST,则在调用所有测试时将排除该测试。调用命令test jig时,OPT_NOJITEST 也是如此。选项 0 意味着永远不会排除测试,这是大多数开发人员想要使用的。

本地测试

make tests

直接从 bash 运行 GTest 单元测试、GTest 功能测试和 SITL 单元测试的完整列表:

make tests

各个 GTest 测试二进制文件位于 build/px4_sitl_test/ 目录中,可以直接在大多数 IDE 的调试器中运行。

make tests TESTFILTER=<regex filter expression>

使用以下命令过滤以使用 ctest 名称的正则表达式仅运行一部分测试:

make tests TESTFILTER=<regex filter expression>

例如:

- make tests TESTFILTER=unit only run GTest unit tests
- make tests TESTFILTER=sitl only run simulation tests
- make tests TESTFILTER=Attitude only run the AttitudeControl test
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PX4的代码测试 的相关文章

  • 初学PX4之飞控算法

    通知 xff1a 如果你对本站无人机文章不熟悉 xff0c 建议查看无人机学习概览 xff01 xff01 xff01 注意 xff1a 基于参考原因 xff0c 本文参杂了APM的算法分析 本篇文章首先简述了下px4和apm调用姿态相关应
  • Ubuntu下PX4飞控开发环境搭建

    双清微电子 前言 xff1a PX4支持Pixhawk pixracer 高通骁龙飞控板 树莓派 派诺特等硬件 PX4是构建在Nuttx实时操作系统上的 第一步 xff1a 安装Linux基础软件 第二步 xff1a 下载源代码 第三步 安
  • pixhawk px4 spi设备驱动

    此篇blog是以nuttx官网介绍为出发点 xff0c 先分析如何初始化的 xff0c 再分析如何读取传感器数据的 xff0c 最后对比了字符型设备操作和spi驱动的实现方式的差别 如有错误还请指正 6 字符型设备 所有的结构体和API都在
  • ardupilot & px4 书写自己的app & drivers (二)

    新建任务列表任务 打印时间 任务列表 const AP Scheduler span class hljs tag Task span Copter span class hljs tag scheduler tasks span span
  • PX4二次开发中查无资料的踩坑总结

    写在前 xff1a 2021年9月下旬开始摸索px4飞控的二次开发 xff0c 从C 43 43 零基础到第一个修改算法后的版本稳定运行 xff0c 大概用了2个月 xff0c 从12月初改用新版本px4源码到现在又过去了约1个月 xff0
  • PX4通过I2C方式添加自定义传感器(2)

    PX4 I2C通信方式传感器驱动分析 xff08 以ets airspeed为例 xff09 1 说明 这篇文章我们就来看看I2C传感器的驱动过程 xff0c 当然里面也有很多东西我不是很理解 xff0c 所以仅谈我领悟的一些东西 我就以e
  • px4: v2的主板刷写v2的固件

    v2的主板刷写v2的固件 fengxuewei 64 fengxuewei Legion Y7000 2019 PG0 src Firmware changwei rc span class token function make span
  • Ubuntu18.04安装PX4踩坑、报错及解决方案整理

    笔者最近需要跑无人机巡检大坝的仿真 xff0c 于是在自己的Ubuntu2018 04中开始安装PX4 xff0c 问过不少之前已经装过PX4的师兄和同学 xff0c 都曾在PX4安装过程中踩过许多坑 xff0c 耗费了不少时间 xff0c
  • 关于PX4中的高度若干问题

    飞行的高度是如何测量的 xff1f 地面的高度和海平面的高度差别很大 xff0c 飞控又是如何有效判别进行降落的 xff1f 这是我脑子里的疑问 搜索的一圈发现很少有人讨论这方面的问题 xff0c 于是本次我就直接看一下源代码 xff0c
  • PX4 Bootloader下载及编译过程中的问题解决

    买来的雷迅的板子都是Bootloader已经烧进去了 xff0c Fireware也已经刷进去了 如果是自制的板子 xff0c 上位机根本没法识别板子 xff0c 必须先烧写下载Bootloader后编译好的bin文件 这篇记一下自己下载及
  • PX4飞控之PWM输出控制

    PX4飞控之PWM输出控制 多旋翼电调如好盈XRotor xff0c DJI通用电调等都支持PWM信号来传输控制信号 常用的400Hz电调信号对应周期2500us xff0c 一般使用高电平时间1000us 2000us为有效信号区间 xf
  • PX4 ---- Mixer

    文章目录 Mixer 混合控制 作用输入输出装载混控文件MAVROS代码解析总结示例MAINAUX Mixer 混合控制 作用 经过位置控制和姿态控制后 xff0c 控制量通过 actuator controls发布 xff0c 其中 co
  • PX4模块设计之六:PX4-Fast RTPS(DDS)简介

    64 TOC PX4模块设计之六 xff1a PX4 Fast RTPS DDS 简介 基于PX4开源软件框架简明简介的框架设计 xff0c 逐步分析内部模块功能设计 PX4 Fast RTPS DDS 具有实时发布 订阅uORB消息接口
  • PX4模块设计之十六:Hardfault模块

    PX4模块设计之十六 xff1a Hardfault模块 1 Hardfault模块初始化2 Hardfault模块主程序3 Hardfault命令3 1 hardfault check status3 2 hardfault rearm3
  • PX4飞控的PPM接收机

    xff08 一 xff09 原理图 xff1a PX4飞控的PPM输入捕获由协处理器完成 xff0c 接在A8引脚 xff0c 对应Timer1的通道1 xff08 二 xff09 PPM协议 xff1a PPM的每一帧数据间隔为20ms
  • PX4模块设计之二十七:LandDetector模块

    PX4模块设计之二十七 xff1a LandDetector模块 1 LandDetector模块简介2 模块入口函数2 1 主入口land detector main2 2 自定义子命令custom command 3 LandDetec
  • 无人机PX4使用动捕系统mocap的位置实现控制+MAVROS

    动捕系统Optitrack xff0c 有很高的定位精度 xff0c 能够给无人机提供比较精确的位置信息 xff0c 因此如果实验室有条件 xff0c 都可以买一套动捕系统 动捕系统的原理 xff1a 光学式动作捕捉依靠一整套精密而复杂的光
  • PX4:Policy “CMP0097“ is not known to this version of CMake.

    make px4 fmu v3 时报的错 CMake版本的问题 由https blog csdn net zhizhengguan article details 118380965推测 xff0c 删除cmake policy也没事 ma
  • 四、无人机知识笔记(初级:基本运动原理)

    笔记来源于 沈阳无距科技 工业级无人机的中国名片 编程外星人 目录 一 多旋翼直升机 二 基本飞行姿态 三 多旋翼飞行原理 四 反扭力与偏航运动 五 螺旋桨 六 有刷电机和无刷电机 七 电调与PWM信号 八 动力电池 九 遥控器 十 机架设
  • 大神浅谈无人机飞控软件设计 系统性总结

    写在前面 深感自己对飞控软件 算法的知识点过于杂乱 很久没有进行系统的总结了 因此决定写几篇文章记录一些飞控开发过程的知识点 主要是针对一些软件 算法部分进行讨论 如内容有错误 欢迎指出 1 飞控软件的基本模块 无人机能够飞行主要是依靠传感

随机推荐

  • 论文写作踩坑-Wiley杂志投稿-Latex模板使用Windows-Stix-fontinstaller安装Wiley stix-fonts字体出错

    投稿Wiley相关的杂志 xff0c 其LaTeX模板和elsevier及IEEE旗下杂志LaTeX模板不相同 xff0c 其中比较明显的区别是需要安装 特殊字体 xff0c 如果不安装要求的字体会报如下错 xff1a 在百度上可以查到的资
  • LaTex修改参考文献的颜色-BiBTeX-包括参考文献的序号颜色

    1 正文添加 xff1a 复制粘贴即可 xff0c 只需修改 文献1 xff0c 文献2 变成你自己的 usepackage xcolor usepackage xpatch makeatletter def changeBibColor
  • 自动化领域(控制领域)主要期刊汇总整理(SCI和EI)

    目录 IEEE旗下 Elsevier旗下 Springer旗下 Taylor amp Francis Online Wiley Online Library 国内期刊 IEEE旗下 IEEE Transactions on Automati
  • PCL点云分割算法及其测试代码-分割平面

    目录 nbsp 1 平台 2 PCD文件读取 3 算法 4 测试代码及注释 5 测试结果 1 平台 PCL1 8 0 VS2015 Win10 具体配置可以参照链接
  • 点云PCL入门基础

    目录 点云对象的声明 转换关系 示例 输入输出保存点云数据 点云对象的声明 pcl PointCloud lt pcl PointXYZ gt cloud 点云对象 pcl PointCloud lt pcl PointXYZ gt Ptr
  • 源自中国顶级开源软件再下一城!向量数据库公司Zilliz完成6000万美元B+轮融资

    中国开源届再次迎来一个好消息 xff01 北京时间 8 月 25 日 xff0c 向量数据库公司 Zilliz 宣布完成 6000 万美元的新 笔融资 xff0c 成功将其 B 轮融资规模进 步扩 1 03 亿美元 该笔融资由沙特阿美 xf
  • 耗散性、无源性、正实性

    耗散性和作为其特例的无源性概念广泛存在于物理学 应用数学以及力学等领域 研究耗散性和无源性理论的主要出发点在于他们运用基于能量多输入输出描述给出了控制系统分析和设计的新框架 xff0c 对系统控制的诸多方面都起到了很大的推动作用 不仅在控制
  • python学习笔记之tkinter中的label

    from tkinter import longtext 61 39 39 39 多行 文本 39 39 39 master 61 Tk master title 34 label学习 34 w0 61 Label master text
  • python做数据拟合

    项目中有涉及趋势预测的工作 xff0c 整理一下这3种拟合方法 xff1a 1 线性拟合 使用math import math def linefit x y N 61 float len x sx sy sxx syy sxy 61 0
  • 关于VS编译的程序内存分配只能用1.5~2G上限的优化方案

    关于VS编译的程序 内存分配只能用1 5 2G上限的优化方案 遇到的问题是这样的 xff1a 电脑内存32G xff0c VS2012编译的一个程序 xff0c 在程序运行过程中 xff0c 一旦程序的内存使用达到1 5G xff0c 就会
  • 对称矩阵及正定性

    对称阵是非常重要的矩阵 xff0c 对于实对称矩阵 xff0c 其特征值也为实数 xff0c 且特征向量是垂直的 注意这里的垂直是指 xff1a 如果特征值互不相同 xff0c 那么每个特征值对应的特征向量是在一条线上 xff0c 那些线之
  • C++变量前面加下划线的含义

    参考C 43 43 变量前面加下划线的含义 云 43 社区 腾讯云 C 43 43 变量前面加下划线和不加下划线都不会影响对变量的定义 xff0c 只是风格问题 xff0c 更喜欢将成员变量或者私有成员变量的前面加上下划线 以表示该变量是某
  • 对PX4参数THR_MDL_FAC的理解

    对参数THR MDL FAC的理解 home wp src PX Firmware src lib mixer module mixer module hpp 这里引入了参数THR MDL FAC的使用 DEFINE PARAMETERS
  • TX2安装ubuntu18,ROS

    设备 TX2 8G版本 ubuntu18 04笔记本一台 重要提示 请看完全文再安装 xff01 本文不是手把手教你安装类型教程 给TX2刷系统 看看我的参考博客1吧 最好参考最新的博客 xff0c 现在官网的新版本都不是这样 JetPac
  • px4的PWM是如何输出的

    如果有io芯片 xff0c 且使用了io作为输出PWM的设备 则fmu将mixer传输给io xff0c io进行混控计算并输出PWM xff0c 将pwm结果传递回fmu xff0c 此时无app订阅acuator outpus xff0
  • PX4的mix文件是怎么被使用的呢?

    启动 怎么到启动这里的就不说了 2 作为MIXER FILE被mixer load的 src systemcmds mixer mixer cpp实现mixer load Mixer load调用函数 xff1a load const ch
  • 诚迈科技发布OpenHarmony发行版鸿诚志远HongZOS

    2022年11月3日 xff0c 诚迈科技在东莞松山湖举办 鸿雁于飞 至诚志远 开源鸿蒙 诚迈科技HongZOS发布会 xff0c 发布基于OpenHarmony的商业发行版鸿诚志远 xff08 HongZOS xff09 xff0c 并推
  • PX4阅读开发小技巧

    1 基操 本文件搜索 全局搜索 后退 前进 ctrl 43 p xff0c 搜索文件名 右键 xff0c 书签功能 ctrl 43 单击 F12 xff0c 转到定义 大纲视图 vscode的Open Folder插件搜索文件夹名 2 利用
  • 一种基于接触性检查的全方位空中操作平台

    这里写自定义目录标题 摘要简介相关工作系统描述控制架构A 系统模型B 外部力估计C Interaction Control Selective Impedance 交互作用控制 xff1a 选择性阻抗D Surface Normal and
  • PX4的代码测试

    PX4的代码测试 写完代码总要测试一下吧 xff0c 自己先测试一下 xff0c 怎么用Test呢 xff1f 官方关于测试的概括说明 xff1a Platform Testing and Continuous Integration PX