mavsdk_tests: add tests for GPS as height source

This commit is contained in:
Julian Oes 2020-07-02 14:29:00 +02:00 committed by Daniel Agar
parent c31246e13a
commit 20621e6744
3 changed files with 71 additions and 3 deletions

View File

@ -159,6 +159,18 @@ void AutopilotTester::set_takeoff_altitude(const float altitude_m)
CHECK(result.second == Approx(altitude_m));
}
void AutopilotTester::set_height_source(AutopilotTester::HeightSource height_source)
{
switch (height_source) {
case HeightSource::Baro:
CHECK(_param->set_param_int("EKF2_HGT_MODE", 0) == Param::Result::Success);
break;
case HeightSource::Gps:
CHECK(_param->set_param_int("EKF2_HGT_MODE", 1) == Param::Result::Success);
}
}
void AutopilotTester::arm()
{
const auto result = _action->arm();

View File

@ -61,12 +61,18 @@ public:
bool fly_through {false};
};
enum class HeightSource {
Baro,
Gps
};
void connect(const std::string uri);
void wait_until_ready();
void wait_until_ready_local_position_only();
void store_home();
void check_home_within(float acceptance_radius_m);
void set_takeoff_altitude(const float altitude_m);
void set_height_source(HeightSource height_source);
void arm();
void takeoff();
void land();

View File

@ -39,10 +39,28 @@
#include "autopilot_tester.h"
TEST_CASE("Land on GPS lost during mission", "[multicopter][vtol]")
TEST_CASE("Land on GPS lost during mission (baro height mode)", "[multicopter][vtol]")
{
AutopilotTester tester;
tester.connect(connection_url);
tester.set_height_source(AutopilotTester::HeightSource::Baro);
tester.wait_until_ready();
AutopilotTester::MissionOptions mission_options;
mission_options.rtl_at_end = true;
tester.prepare_square_mission(mission_options);
tester.arm();
tester.execute_mission_and_lose_gps();
tester.wait_until_disarmed();
}
TEST_CASE("Land on GPS lost during mission (GPS height mode)", "[multicopter][vtol]")
{
AutopilotTester tester;
tester.connect(connection_url);
tester.set_height_source(AutopilotTester::HeightSource::Gps);
tester.wait_until_ready();
AutopilotTester::MissionOptions mission_options;
@ -81,10 +99,11 @@ TEST_CASE("Continue on mag stuck during mission", "[multicopter][vtol]")
tester.wait_until_disarmed();
}
TEST_CASE("Continue on baro lost during mission", "[multicopter][vtol]")
TEST_CASE("Continue on baro lost during mission (baro height mode)", "[multicopter][vtol]")
{
AutopilotTester tester;
tester.connect(connection_url);
tester.set_height_source(AutopilotTester::HeightSource::Baro);
tester.wait_until_ready();
AutopilotTester::MissionOptions mission_options;
@ -95,10 +114,41 @@ TEST_CASE("Continue on baro lost during mission", "[multicopter][vtol]")
tester.wait_until_disarmed();
}
TEST_CASE("Continue on baro stuck during mission", "[multicopter][vtol]")
TEST_CASE("Continue on baro lost during mission (GPS height mode)", "[multicopter][vtol]")
{
AutopilotTester tester;
tester.connect(connection_url);
tester.set_height_source(AutopilotTester::HeightSource::Gps);
tester.wait_until_ready();
AutopilotTester::MissionOptions mission_options;
mission_options.rtl_at_end = true;
tester.prepare_square_mission(mission_options);
tester.arm();
tester.execute_mission_and_lose_baro();
tester.wait_until_disarmed();
}
TEST_CASE("Continue on baro stuck during mission (baro height mode)", "[multicopter][vtol]")
{
AutopilotTester tester;
tester.connect(connection_url);
tester.set_height_source(AutopilotTester::HeightSource::Baro);
tester.wait_until_ready();
AutopilotTester::MissionOptions mission_options;
mission_options.rtl_at_end = true;
tester.prepare_square_mission(mission_options);
tester.arm();
tester.execute_mission_and_get_baro_stuck();
tester.wait_until_disarmed();
}
TEST_CASE("Continue on baro stuck during mission (GPS height mode)", "[multicopter][vtol]")
{
AutopilotTester tester;
tester.connect(connection_url);
tester.set_height_source(AutopilotTester::HeightSource::Gps);
tester.wait_until_ready();
AutopilotTester::MissionOptions mission_options;