# 使用 MAVSDK 进行集成测试
PX4 可以端到端测试,也可以使用基于以下内容的集成测试 MAVSDK (打开新窗口).
这些测试主要是针对 SITL 开发的,并在持续集成(CI)中运行。今后,我们计划将其推广到任何平台/硬件。
下面的说明介绍了如何在本地设置和运行测试。
# 先决条件
# 设置开发人员环境
如果你还没有这样做:
安装 利纳克斯 或 MacOS (不支持 Windows)。 经典仿真场景Gazebo 是必需的,默认情况下应该安装。
-
Git 克隆 https://github.com/PX4/PX4-Autopilot.git --recursive CD PX4-自动驾驶仪
# 构建 PX4 进行测试
要为模拟器测试构建 PX4 源代码,请使用
DONT_RUN=1 生产 px4_sitl gazebo-classic mavsdk_tests
# 安装 MAVSDK C++ 库
测试需要在整个系统中安装 MAVSDK C++ 库(例如在 /usr/lib
或 /usr/local/lib
).
从二进制文件或源代码安装:
- MAVSDK > C++ > C++ QuickStart (打开新窗口):在支持的平台上作为预编译库安装(推荐)
- MAVSDK > C++ 指南 > 从源代码构建 (打开新窗口):从源代码构建 C++ 库。
# 运行所有 PX4 测试
中定义的所有 SITL 测试。 sitl.json (打开新窗口)你会的
test/mavsdk_tests/mavsdk_test_runner.py test/mavsdk_tests/configs/sitl.json --speed-factor 10
这将列出所有测试,然后按顺序运行。
要查看所有可能的命令行参数,请使用 -h
争论:
test/mavsdk_tests/mavsdk_test_runner.py -h 使用方法: mavsdk_test_runner.py [-h] [--log-dir LOG_DIR] [--速度因子 SPEED_FACTOR] [--迭代] [--早] [--桂] [-模型 MODEL]
[--案例 CASE] [--调试器 DEBUGGER] [--verbose]
配置文件位置参数: config_file JSON 配置文件 文件 使用可选参数:-h、--help 显示此内容 帮助 信息和 出口
--log-dir LOG_DIR 目录 对于 日志文件 --speed-factor SPEED_FACTOR 运行模拟的速度 --iterations ITERATIONS 运行所有测试的频率 --abort-early 在第一次测试失败时终止测试 测试
--gui显示可视化 对于 模拟 --model MODEL 仅运行测试 对于 一个模型--案例 CASE 仅运行测试 对于 一种 个案
--从 valgrind、callgrind、gdb、lldb 中选择 DEBUGGER --verbose 以便 更多 冗长输出
# 运行一次测试
通过指定 模型
和测试 个案
作为命令行选项。例如,要在任务中测试尾随者的飞行,可以运行
test/mavsdk_tests/mavsdk_test_runner.py test/mavsdk_tests/configs/sitl.json --speed-factor 10 --模型 tailsitter --案例 VTOL 飞行任务
找出当前模型集及其相关测试用例的最简单方法是运行所有 PX4 测试 如上图 (注意,如果只想测试一个,可以取消构建)。
在撰写本报告时,运行所有测试后生成的清单如下:
即将为 3 个选定模型运行 39 个测试用例(1 次迭代):- 虹膜:- 降落在任务中丢失的 GPS 上(气压高度模式)' - 降落在任务中丢失的 GPS 上(GPS 高度模式)' - 继续降落在任务中丢失的弹匣上' - 继续降落在任务中丢失的气压计上(气压高度模式)' - 继续降落在任务中丢失的气压计上(GPS 高度模式)' - 继续降落在任务中卡住的气压计上(气压高度模式)' - 继续降落在任务中卡住的气压计上(GPS 高度模式继续执行任务中卡住的气压计(GPS 高度模式)' - '起飞和降落' - '方形多旋翼飞行任务(包括 RTL)' - '方形多旋翼飞行任务(手动 RTL)' - '直向多旋翼飞行任务' - '机外起飞和降落' - '机外位置控制' - '向前飞行位置控制' - '向前飞行高度控制' - standard_vtol:- 在任务中 GPS 丢失时着陆(气压高度模式)' - 在任务中 GPS 丢失时着陆(GPS 高度模式)' - 在任务中磁力计丢失时继续飞行' - 在任务中气压计丢失时继续飞行(气压高度模式)' - 在任务中气压计丢失时继续飞行(GPS 高度模式)' - 在任务中气压计卡住时继续飞行继续执行任务中卡住的气压计(气压计高度模式)' - '继续执行任务中卡住的气压计(GPS 高度模式)' - '起飞和降落' - '方形多旋翼飞行任务(包括 RTL)' - '方形多旋翼飞行任务(手动 RTL)' - '在位置控制中向前飞行' - '在高度控制中向前飞行' - 尾翼:- 降落在任务中丢失的 GPS 上(气压高度模式)' - 降落在任务中丢失的 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 测试用例 (打开新窗口).