跳至内容

使用 MAVSDK 进行集成测试

PX4 可以端到端测试,也可以使用基于以下内容的集成测试 MAVSDK.

这些测试主要是针对 SITL 开发的,并在持续集成(CI)中运行。今后,我们计划将其推广到任何平台/硬件。

下面的说明介绍了如何在本地设置和运行测试。

先决条件

设置开发人员环境

如果你还没有这样做:

构建 PX4 进行测试

要为模拟器测试构建 PX4 源代码,请使用

DONT_RUN=1 生产 px4_sitl 古董 mavsdk_tests

安装 MAVSDK C++ 库

测试需要在整个系统中安装 MAVSDK C++ 库(例如在 /usr/lib/usr/local/lib).

从二进制文件或源代码安装:

运行所有 PX4 测试

中定义的所有 SITL 测试。 sitl.json你会的

test/mavsdk_tests/mavsdk_test_runner.py test/mavsdk_tests/configs/sitl.json --速度系数 10

这将列出所有测试,然后按顺序运行。

要查看所有可能的命令行参数,请使用 -h 争论:

test/mavsdk_tests/mavsdk_test_runner.py -h

使用: mavsdk_test_runner.py [-h] [--log-dir LOG_DIR] [--speed-factor SPEED_FACTOR] [--iterations ITERATIONS] [--abort-early] [--gui] [--model MODEL]
                             [--case CASE] [--debugger DEBUGGER] [--verbose] [--case CASE] [--debugger DEBUGGER] [--verbose]
                             配置文件

位置 争论:
  配置文件           JSON 配置 文件 使用

可选的 争论:
  -h, --帮助            展览 帮助 信息 出口
  --日志路径 LOG_DIR     目录 对于 登录 文件
  --速度系数 速度系数
                        如何 运行 仿真
  --迭代 试 验
                        如何 时常 运行 一应俱全 试验
  --早         中止 关于 第一次 不成功 测试
  --桂                 展示 可视化 对于 a 仿真
  --模型 型号         只是 运行 试验 对于 一种 模型
  --案例 案例           只是 运行 试验 对于 一种 个案
  --调试器 调试器   选择 valgrind、 callgrind、 gdb、 lldb
  --verbose             以便 更多 冗长 产量

运行一次测试

通过指定 模型 和测试 个案 作为命令行选项。例如,要在任务中测试尾随者的飞行,可以运行

test/mavsdk_tests/mavsdk_test_runner.py test/mavsdk_tests/configs/sitl.json --速度系数 10 --模型 尾随者 --案例 执行 VTOL 任务;

找出当前模型集及其相关测试用例的最简单方法是运行所有 PX4 测试 如上图 (注意,如果只想测试一个,可以取消构建)。

在撰写本报告时,运行所有测试后生成的清单如下:

关于 运行 39 测试 案件 对于 3 选定的 模型 (1 迭代):
  - 鸢尾花
    - '任务期间 GPS 丢失时着陆(巴罗高度模式)';
    - '任务期间 GPS 丢失时着陆(GPS 高度模式)';
    - '继续执行任务时丢失的弹匣';
    - '继续执行任务期间丢失的气压计(气压计高度模式)';
    - '继续执行任务期间丢失的气压计(GPS 高度模式)';
    - '继续执行任务时卡住的气压计(气压计高度模式)';
    - '继续执行任务时卡住的气压计(GPS 高度模式)';
    - 起飞和降落';
    - '飞行方形多旋翼任务,包括 RTL';
    - '使用手动 RTL 执行方形多旋翼飞行任务';
    - '直飞多旋翼飞行任务';
    - '机外起降';
    - '机外位置控制';
    - '在位置控制中向前飞';
    - '控制高度向前飞行';
  - standard_vtol:
    - '任务期间 GPS 丢失时着陆(巴罗高度模式)';
    - '任务期间 GPS 丢失时着陆(GPS 高度模式)';
    - '继续执行任务时丢失的弹匣';
    - '继续执行任务期间丢失的气压计(气压计高度模式)';
    - '继续执行任务期间丢失的气压计(GPS 高度模式)';
    - '继续执行任务时卡住的气压计(气压计高度模式)';
    - '继续执行任务时卡住的气压计(GPS 高度模式)';
    - 起飞和降落';
    - '飞行方形多旋翼任务,包括 RTL';
    - '使用手动 RTL 执行方形多旋翼飞行任务';
    - '在位置控制中向前飞';
    - '控制高度向前飞行';
  - 尾随者
    - '任务期间 GPS 丢失时着陆(巴罗高度模式)';
    - '任务期间 GPS 丢失时着陆(GPS 高度模式)';
    - '继续执行任务时丢失的弹匣';
    - '继续执行任务期间丢失的气压计(气压计高度模式)';
    - '继续执行任务期间丢失的气压计(GPS 高度模式)';
    - '继续执行任务时卡住的气压计(气压计高度模式)';
    - '继续执行任务时卡住的气压计(GPS 高度模式)';
    - 起飞和降落';
    - '飞行方形多旋翼任务,包括 RTL';
    - '使用手动 RTL 执行方形多旋翼飞行任务';
    - '在位置控制中向前飞';
    - '控制高度向前飞行';

实施说明

  • 测试从测试运行脚本中调用 mavsdk_test_runner.py是用 Python 编写的。

    除 MAVSDK 外,该运行程序还会启动 px4 以及 Gazebo 进行 SITL 测试,并收集这些进程的日志。

  • 测试运行程序是一个 C++ 二进制文件,其中包含

    • 主要 函数来解析参数。
    • MAVSDK 的一个抽象概念,名为 自动驾驶测试仪.
    • 实际测试使用 MAVSDK 的抽象功能,例如 test_multicopter_mission.cpp.
    • 测试使用 捕获2 单元测试框架。使用该框架的原因如下
      • 断言 (要求)可以放在函数内部(而不只是在顶层测试中,如 gtest 的情况).
      • 依赖关系管理更容易,因为 捕获2 可以只作为头文件库。
      • Catch2 支持 标记这样就可以灵活地组成测试。

使用的术语:

  • "型号":这是选定的仿真场景Gazebo型号,例如 马兰花.
  • 测试用例":这是一个 catch2 测试用例.