Tools: add ability to simulate more than 2 GPSs

This commit is contained in:
Peter Barker 2024-11-12 08:49:13 +11:00 committed by Peter Barker
parent fab1ef7a87
commit 7b64263562
11 changed files with 98 additions and 104 deletions

View File

@ -552,13 +552,13 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
self.start_subtest("Radio failsafe RTL fails into land mode due to bad position.") self.start_subtest("Radio failsafe RTL fails into land mode due to bad position.")
self.set_parameter('FS_THR_ENABLE', 1) self.set_parameter('FS_THR_ENABLE', 1)
self.takeoffAndMoveAway() self.takeoffAndMoveAway()
self.set_parameter('SIM_GPS_DISABLE', 1) self.set_parameter('SIM_GPS1_ENABLE', 0)
self.delay_sim_time(5) self.delay_sim_time(5)
self.set_parameter("SIM_RC_FAIL", 1) self.set_parameter("SIM_RC_FAIL", 1)
self.wait_mode("LAND") self.wait_mode("LAND")
self.wait_landed_and_disarmed() self.wait_landed_and_disarmed()
self.set_parameter("SIM_RC_FAIL", 0) self.set_parameter("SIM_RC_FAIL", 0)
self.set_parameter('SIM_GPS_DISABLE', 0) self.set_parameter('SIM_GPS1_ENABLE', 1)
self.wait_ekf_happy() self.wait_ekf_happy()
self.end_subtest("Completed Radio failsafe RTL fails into land mode due to bad position.") self.end_subtest("Completed Radio failsafe RTL fails into land mode due to bad position.")
@ -567,13 +567,13 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
self.start_subtest("Radio failsafe SmartRTL->RTL fails into land mode due to bad position.") self.start_subtest("Radio failsafe SmartRTL->RTL fails into land mode due to bad position.")
self.set_parameter('FS_THR_ENABLE', 4) self.set_parameter('FS_THR_ENABLE', 4)
self.takeoffAndMoveAway() self.takeoffAndMoveAway()
self.set_parameter('SIM_GPS_DISABLE', 1) self.set_parameter('SIM_GPS1_ENABLE', 0)
self.delay_sim_time(5) self.delay_sim_time(5)
self.set_parameter("SIM_RC_FAIL", 1) self.set_parameter("SIM_RC_FAIL", 1)
self.wait_mode("LAND") self.wait_mode("LAND")
self.wait_landed_and_disarmed() self.wait_landed_and_disarmed()
self.set_parameter("SIM_RC_FAIL", 0) self.set_parameter("SIM_RC_FAIL", 0)
self.set_parameter('SIM_GPS_DISABLE', 0) self.set_parameter('SIM_GPS1_ENABLE', 1)
self.wait_ekf_happy() self.wait_ekf_happy()
self.end_subtest("Completed Radio failsafe SmartRTL->RTL fails into land mode due to bad position.") self.end_subtest("Completed Radio failsafe SmartRTL->RTL fails into land mode due to bad position.")
@ -582,13 +582,13 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
self.start_subtest("Radio failsafe SmartRTL->LAND fails into land mode due to bad position.") self.start_subtest("Radio failsafe SmartRTL->LAND fails into land mode due to bad position.")
self.set_parameter('FS_THR_ENABLE', 5) self.set_parameter('FS_THR_ENABLE', 5)
self.takeoffAndMoveAway() self.takeoffAndMoveAway()
self.set_parameter('SIM_GPS_DISABLE', 1) self.set_parameter('SIM_GPS1_ENABLE', 0)
self.delay_sim_time(5) self.delay_sim_time(5)
self.set_parameter("SIM_RC_FAIL", 1) self.set_parameter("SIM_RC_FAIL", 1)
self.wait_mode("LAND") self.wait_mode("LAND")
self.wait_landed_and_disarmed() self.wait_landed_and_disarmed()
self.set_parameter("SIM_RC_FAIL", 0) self.set_parameter("SIM_RC_FAIL", 0)
self.set_parameter('SIM_GPS_DISABLE', 0) self.set_parameter('SIM_GPS1_ENABLE', 1)
self.wait_ekf_happy() self.wait_ekf_happy()
self.end_subtest("Completed Radio failsafe SmartRTL->LAND fails into land mode due to bad position.") self.end_subtest("Completed Radio failsafe SmartRTL->LAND fails into land mode due to bad position.")
@ -597,9 +597,9 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
self.start_subtest("Radio failsafe SmartRTL->RTL fails into RTL mode due to no path.") self.start_subtest("Radio failsafe SmartRTL->RTL fails into RTL mode due to no path.")
self.set_parameter('FS_THR_ENABLE', 4) self.set_parameter('FS_THR_ENABLE', 4)
self.takeoffAndMoveAway() self.takeoffAndMoveAway()
self.set_parameter('SIM_GPS_DISABLE', 1) self.set_parameter('SIM_GPS1_ENABLE', 0)
self.wait_statustext("SmartRTL deactivated: bad position", timeout=60) self.wait_statustext("SmartRTL deactivated: bad position", timeout=60)
self.set_parameter('SIM_GPS_DISABLE', 0) self.set_parameter('SIM_GPS1_ENABLE', 1)
self.wait_ekf_happy() self.wait_ekf_happy()
self.delay_sim_time(5) self.delay_sim_time(5)
self.set_parameter("SIM_RC_FAIL", 1) self.set_parameter("SIM_RC_FAIL", 1)
@ -613,9 +613,9 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
self.start_subtest("Radio failsafe SmartRTL->LAND fails into land mode due to no path.") self.start_subtest("Radio failsafe SmartRTL->LAND fails into land mode due to no path.")
self.set_parameter('FS_THR_ENABLE', 5) self.set_parameter('FS_THR_ENABLE', 5)
self.takeoffAndMoveAway() self.takeoffAndMoveAway()
self.set_parameter('SIM_GPS_DISABLE', 1) self.set_parameter('SIM_GPS1_ENABLE', 0)
self.wait_statustext("SmartRTL deactivated: bad position", timeout=60) self.wait_statustext("SmartRTL deactivated: bad position", timeout=60)
self.set_parameter('SIM_GPS_DISABLE', 0) self.set_parameter('SIM_GPS1_ENABLE', 1)
self.wait_ekf_happy() self.wait_ekf_happy()
self.delay_sim_time(5) self.delay_sim_time(5)
self.set_parameter("SIM_RC_FAIL", 1) self.set_parameter("SIM_RC_FAIL", 1)
@ -1958,8 +1958,8 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
glitch_current = 0 glitch_current = 0
self.progress("Apply first glitch") self.progress("Apply first glitch")
self.set_parameters({ self.set_parameters({
"SIM_GPS_GLITCH_X": glitch_lat[glitch_current], "SIM_GPS1_GLTCH_X": glitch_lat[glitch_current],
"SIM_GPS_GLITCH_Y": glitch_lon[glitch_current], "SIM_GPS1_GLTCH_Y": glitch_lon[glitch_current],
}) })
# record position for 30 seconds # record position for 30 seconds
@ -1973,15 +1973,15 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
glitch_current = -1 glitch_current = -1
self.progress("Completed Glitches") self.progress("Completed Glitches")
self.set_parameters({ self.set_parameters({
"SIM_GPS_GLITCH_X": 0, "SIM_GPS1_GLTCH_X": 0,
"SIM_GPS_GLITCH_Y": 0, "SIM_GPS1_GLTCH_Y": 0,
}) })
else: else:
self.progress("Applying glitch %u" % glitch_current) self.progress("Applying glitch %u" % glitch_current)
# move onto the next glitch # move onto the next glitch
self.set_parameters({ self.set_parameters({
"SIM_GPS_GLITCH_X": glitch_lat[glitch_current], "SIM_GPS1_GLTCH_X": glitch_lat[glitch_current],
"SIM_GPS_GLITCH_Y": glitch_lon[glitch_current], "SIM_GPS1_GLTCH_Y": glitch_lon[glitch_current],
}) })
# start displaying distance moved after all glitches applied # start displaying distance moved after all glitches applied
@ -2002,8 +2002,8 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
# disable gps glitch # disable gps glitch
if glitch_current != -1: if glitch_current != -1:
self.set_parameters({ self.set_parameters({
"SIM_GPS_GLITCH_X": 0, "SIM_GPS1_GLTCH_X": 0,
"SIM_GPS_GLITCH_Y": 0, "SIM_GPS1_GLTCH_Y": 0,
}) })
if self.use_map: if self.use_map:
self.show_gps_and_sim_positions(False) self.show_gps_and_sim_positions(False)
@ -2024,7 +2024,7 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
self.wait_attitude(desroll=0, despitch=0, timeout=10, tolerance=1) self.wait_attitude(desroll=0, despitch=0, timeout=10, tolerance=1)
# apply glitch # apply glitch
self.set_parameter("SIM_GPS_GLITCH_X", 0.001) self.set_parameter("SIM_GPS1_GLTCH_X", 0.001)
# check lean angles remain stable for 20 seconds # check lean angles remain stable for 20 seconds
tstart = self.get_sim_time() tstart = self.get_sim_time()
@ -2098,11 +2098,11 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
# stop and test loss of GPS for a short time - it should resume GPS use without falling back into a non aiding mode # stop and test loss of GPS for a short time - it should resume GPS use without falling back into a non aiding mode
self.change_mode("LOITER") self.change_mode("LOITER")
self.set_parameters({ self.set_parameters({
"SIM_GPS_DISABLE": 1, "SIM_GPS1_ENABLE": 0,
}) })
self.delay_sim_time(2) self.delay_sim_time(2)
self.set_parameters({ self.set_parameters({
"SIM_GPS_DISABLE": 0, "SIM_GPS1_ENABLE": 1,
}) })
# regaining GPS should not result in it falling back to a non-navigation mode # regaining GPS should not result in it falling back to a non-navigation mode
self.wait_ekf_flags(mavutil.mavlink.ESTIMATOR_POS_HORIZ_ABS, 0, timeout=1) self.wait_ekf_flags(mavutil.mavlink.ESTIMATOR_POS_HORIZ_ABS, 0, timeout=1)
@ -2118,8 +2118,8 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
glitch_current = 0 glitch_current = 0
self.progress("Apply first glitch") self.progress("Apply first glitch")
self.set_parameters({ self.set_parameters({
"SIM_GPS_GLITCH_X": glitch_lat[glitch_current], "SIM_GPS1_GLTCH_X": glitch_lat[glitch_current],
"SIM_GPS_GLITCH_Y": glitch_lon[glitch_current], "SIM_GPS1_GLTCH_Y": glitch_lon[glitch_current],
}) })
# record position for 30 seconds # record position for 30 seconds
@ -2132,15 +2132,15 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
if glitch_current < glitch_num: if glitch_current < glitch_num:
self.progress("Applying glitch %u" % glitch_current) self.progress("Applying glitch %u" % glitch_current)
self.set_parameters({ self.set_parameters({
"SIM_GPS_GLITCH_X": glitch_lat[glitch_current], "SIM_GPS1_GLTCH_X": glitch_lat[glitch_current],
"SIM_GPS_GLITCH_Y": glitch_lon[glitch_current], "SIM_GPS1_GLTCH_Y": glitch_lon[glitch_current],
}) })
# turn off glitching # turn off glitching
self.progress("Completed Glitches") self.progress("Completed Glitches")
self.set_parameters({ self.set_parameters({
"SIM_GPS_GLITCH_X": 0, "SIM_GPS1_GLTCH_X": 0,
"SIM_GPS_GLITCH_Y": 0, "SIM_GPS1_GLTCH_Y": 0,
}) })
# continue with the mission # continue with the mission
@ -2526,7 +2526,7 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
self.set_parameters({ self.set_parameters({
"SIM_FLOW_ENABLE": 1, "SIM_FLOW_ENABLE": 1,
"FLOW_TYPE": 10, "FLOW_TYPE": 10,
"SIM_GPS_DISABLE": 1, "SIM_GPS1_ENABLE": 0,
"SIM_TERRAIN": 0, "SIM_TERRAIN": 0,
}) })
@ -2980,13 +2980,13 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
'''fly a mission far from the vehicle origin''' '''fly a mission far from the vehicle origin'''
# Fly mission #1 # Fly mission #1
self.set_parameters({ self.set_parameters({
"SIM_GPS_DISABLE": 1, "SIM_GPS1_ENABLE": 0,
}) })
self.reboot_sitl() self.reboot_sitl()
nz = mavutil.location(-43.730171, 169.983118, 1466.3, 270) nz = mavutil.location(-43.730171, 169.983118, 1466.3, 270)
self.set_origin(nz) self.set_origin(nz)
self.set_parameters({ self.set_parameters({
"SIM_GPS_DISABLE": 0, "SIM_GPS1_ENABLE": 1,
}) })
self.progress("# Load copter_mission") self.progress("# Load copter_mission")
# load the waypoint count # load the waypoint count
@ -3028,8 +3028,8 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
"GPS1_TYPE": 9, "GPS1_TYPE": 9,
"GPS2_TYPE": 9, "GPS2_TYPE": 9,
# disable simulated GPS, so only via DroneCAN # disable simulated GPS, so only via DroneCAN
"SIM_GPS_DISABLE": 1, "SIM_GPS1_ENABLE": 0,
"SIM_GPS2_DISABLE": 1, "SIM_GPS2_ENABLE": 0,
# this ensures we use DroneCAN baro and compass # this ensures we use DroneCAN baro and compass
"SIM_BARO_COUNT" : 0, "SIM_BARO_COUNT" : 0,
"SIM_MAG1_DEVID" : 0, "SIM_MAG1_DEVID" : 0,
@ -3206,7 +3206,7 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
"EK3_SRC1_POSZ": 3, "EK3_SRC1_POSZ": 3,
"EK3_AFFINITY" : 1, "EK3_AFFINITY" : 1,
"GPS2_TYPE" : 1, "GPS2_TYPE" : 1,
"SIM_GPS2_DISABLE" : 0, "SIM_GPS2_ENABLE" : 1,
"SIM_GPS2_GLTCH_Z" : -30 "SIM_GPS2_GLTCH_Z" : -30
}) })
self.reboot_sitl() self.reboot_sitl()
@ -7245,7 +7245,7 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
self.context_push() self.context_push()
self.set_parameters({ self.set_parameters({
"GPS1_TYPE": 2, "GPS1_TYPE": 2,
"SIM_GPS_DISABLE": 1, "SIM_GPS1_ENABLE": 0,
}) })
# if there is no GPS at all then we must direct EK3 to not use # if there is no GPS at all then we must direct EK3 to not use
# it at all. Otherwise it will never initialise, as it wants # it at all. Otherwise it will never initialise, as it wants
@ -8986,7 +8986,7 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
"RNGFND1_POS_Y": -0.07, "RNGFND1_POS_Y": -0.07,
"RNGFND1_POS_Z": -0.005, "RNGFND1_POS_Z": -0.005,
"SIM_SONAR_SCALE": 30, "SIM_SONAR_SCALE": 30,
"SIM_GPS2_DISABLE": 0, "SIM_GPS2_ENABLE": 1,
}) })
self.reboot_sitl() self.reboot_sitl()
@ -9045,7 +9045,7 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
self.set_parameters({ self.set_parameters({
"GPS2_TYPE": 1, "GPS2_TYPE": 1,
"SIM_GPS2_TYPE": 1, "SIM_GPS2_TYPE": 1,
"SIM_GPS2_DISABLE": 0, "SIM_GPS2_ENABLE": 1,
"GPS_AUTO_SWITCH": 2, "GPS_AUTO_SWITCH": 2,
}) })
self.reboot_sitl() self.reboot_sitl()
@ -9116,9 +9116,9 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
"WP_YAW_BEHAVIOR": 0, # do not yaw "WP_YAW_BEHAVIOR": 0, # do not yaw
"GPS2_TYPE": 1, "GPS2_TYPE": 1,
"SIM_GPS2_TYPE": 1, "SIM_GPS2_TYPE": 1,
"SIM_GPS2_DISABLE": 0, "SIM_GPS2_ENABLE": 1,
"SIM_GPS_POS_X": 1.0, "SIM_GPS1_POS_X": 1.0,
"SIM_GPS_POS_Y": -1.0, "SIM_GPS1_POS_Y": -1.0,
"SIM_GPS2_POS_X": -1.0, "SIM_GPS2_POS_X": -1.0,
"SIM_GPS2_POS_Y": 1.0, "SIM_GPS2_POS_Y": 1.0,
"GPS_AUTO_SWITCH": 2, "GPS_AUTO_SWITCH": 2,
@ -9176,9 +9176,9 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
"WP_YAW_BEHAVIOR": 0, # do not yaw "WP_YAW_BEHAVIOR": 0, # do not yaw
"GPS2_TYPE": 1, "GPS2_TYPE": 1,
"SIM_GPS2_TYPE": 1, "SIM_GPS2_TYPE": 1,
"SIM_GPS2_DISABLE": 0, "SIM_GPS2_ENABLE": 1,
"SIM_GPS_POS_X": 1.0, "SIM_GPS1_POS_X": 1.0,
"SIM_GPS_POS_Y": -1.0, "SIM_GPS1_POS_Y": -1.0,
"SIM_GPS2_POS_X": -1.0, "SIM_GPS2_POS_X": -1.0,
"SIM_GPS2_POS_Y": 1.0, "SIM_GPS2_POS_Y": 1.0,
"GPS_AUTO_SWITCH": 2, "GPS_AUTO_SWITCH": 2,
@ -9186,8 +9186,8 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
# configure velocity errors such that the 1st GPS should be # configure velocity errors such that the 1st GPS should be
# 4/5, second GPS 1/5 of result (0.5**2)/((0.5**2)+(1.0**2)) # 4/5, second GPS 1/5 of result (0.5**2)/((0.5**2)+(1.0**2))
self.set_parameters({ self.set_parameters({
"SIM_GPS_VERR_X": 0.3, # m/s "SIM_GPS1_VERR_X": 0.3, # m/s
"SIM_GPS_VERR_Y": 0.4, "SIM_GPS1_VERR_Y": 0.4,
"SIM_GPS2_VERR_X": 0.6, # m/s "SIM_GPS2_VERR_X": 0.6, # m/s
"SIM_GPS2_VERR_Y": 0.8, "SIM_GPS2_VERR_Y": 0.8,
"GPS_BLEND_MASK": 4, # use only speed for blend calculations "GPS_BLEND_MASK": 4, # use only speed for blend calculations
@ -9243,9 +9243,9 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
"WP_YAW_BEHAVIOR": 0, # do not yaw "WP_YAW_BEHAVIOR": 0, # do not yaw
"GPS2_TYPE": 1, "GPS2_TYPE": 1,
"SIM_GPS2_TYPE": 1, "SIM_GPS2_TYPE": 1,
"SIM_GPS2_DISABLE": 0, "SIM_GPS2_ENABLE": 1,
"SIM_GPS_POS_X": 1.0, "SIM_GPS1_POS_X": 1.0,
"SIM_GPS_POS_Y": -1.0, "SIM_GPS1_POS_Y": -1.0,
"SIM_GPS2_POS_X": -1.0, "SIM_GPS2_POS_X": -1.0,
"SIM_GPS2_POS_Y": 1.0, "SIM_GPS2_POS_Y": 1.0,
"GPS_AUTO_SWITCH": 2, "GPS_AUTO_SWITCH": 2,
@ -11739,7 +11739,7 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
'''ensure Guided acts appropriately when force-armed''' '''ensure Guided acts appropriately when force-armed'''
self.set_parameters({ self.set_parameters({
"EK3_SRC2_VELXY": 5, "EK3_SRC2_VELXY": 5,
"SIM_GPS_DISABLE": 1, "SIM_GPS1_ENABLE": 0,
}) })
self.load_default_params_file("copter-optflow.parm") self.load_default_params_file("copter-optflow.parm")
self.reboot_sitl() self.reboot_sitl()
@ -11926,7 +11926,7 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
'''check FlightOption::REQUIRE_POSITION_FOR_ARMING works''' '''check FlightOption::REQUIRE_POSITION_FOR_ARMING works'''
self.context_push() self.context_push()
self.set_parameters({ self.set_parameters({
"SIM_GPS_NUMSATS": 3, # EKF does not like < 6 "SIM_GPS1_NUMSATS": 3, # EKF does not like < 6
}) })
self.reboot_sitl() self.reboot_sitl()
self.change_mode('STABILIZE') self.change_mode('STABILIZE')
@ -12127,7 +12127,7 @@ class AutoTestCopter(vehicle_test_suite.TestSuite):
# switch to EKF3 # switch to EKF3
self.set_parameters({ self.set_parameters({
'SIM_GPS_GLITCH_X' : 0.001, # about 100m 'SIM_GPS1_GLTCH_X' : 0.001, # about 100m
'EK3_CHECK_SCALE' : 100, 'EK3_CHECK_SCALE' : 100,
'AHRS_EKF_TYPE' : 3}) 'AHRS_EKF_TYPE' : 3})

View File

@ -185,7 +185,7 @@ class AutoTestPlane(vehicle_test_suite.TestSuite):
def NeedEKFToArm(self): def NeedEKFToArm(self):
"""Ensure the EKF must be healthy for the vehicle to arm.""" """Ensure the EKF must be healthy for the vehicle to arm."""
self.progress("Ensuring we need EKF to be healthy to arm") self.progress("Ensuring we need EKF to be healthy to arm")
self.set_parameter("SIM_GPS_DISABLE", 1) self.set_parameter("SIM_GPS1_ENABLE", 0)
self.context_collect("STATUSTEXT") self.context_collect("STATUSTEXT")
tstart = self.get_sim_time() tstart = self.get_sim_time()
success = False success = False
@ -201,7 +201,7 @@ class AutoTestPlane(vehicle_test_suite.TestSuite):
except AutoTestTimeoutException: except AutoTestTimeoutException:
pass pass
self.set_parameter("SIM_GPS_DISABLE", 0) self.set_parameter("SIM_GPS1_ENABLE", 1)
self.wait_ready_to_arm() self.wait_ready_to_arm()
def fly_LOITER(self, num_circles=4): def fly_LOITER(self, num_circles=4):
@ -2046,14 +2046,14 @@ class AutoTestPlane(vehicle_test_suite.TestSuite):
self.delay_sim_time(60) self.delay_sim_time(60)
else: else:
self.delay_sim_time(20) self.delay_sim_time(20)
self.set_parameter("SIM_GPS_DISABLE", 1) self.set_parameter("SIM_GPS1_ENABLE", 0)
self.progress("Continue orbit without GPS") self.progress("Continue orbit without GPS")
self.delay_sim_time(20) self.delay_sim_time(20)
self.change_mode("RTL") self.change_mode("RTL")
self.wait_distance_to_home(100, 200, timeout=200) self.wait_distance_to_home(100, 200, timeout=200)
# go into LOITER to create additonal time for a GPS re-enable test # go into LOITER to create additonal time for a GPS re-enable test
self.change_mode("LOITER") self.change_mode("LOITER")
self.set_parameter("SIM_GPS_DISABLE", 0) self.set_parameter("SIM_GPS1_ENABLE", 1)
t_enabled = self.get_sim_time() t_enabled = self.get_sim_time()
# The EKF should wait for GPS checks to pass when we are still able to navigate using dead reckoning # The EKF should wait for GPS checks to pass when we are still able to navigate using dead reckoning
# to prevent bad GPS being used when coming back after loss of lock due to interence. # to prevent bad GPS being used when coming back after loss of lock due to interence.
@ -2064,9 +2064,9 @@ class AutoTestPlane(vehicle_test_suite.TestSuite):
self.delay_sim_time(20) self.delay_sim_time(20)
self.set_parameter("AHRS_OPTIONS", 1) self.set_parameter("AHRS_OPTIONS", 1)
self.set_parameter("SIM_GPS_JAM", 1) self.set_parameter("SIM_GPS1_JAM", 1)
self.delay_sim_time(10) self.delay_sim_time(10)
self.set_parameter("SIM_GPS_JAM", 0) self.set_parameter("SIM_GPS1_JAM", 0)
t_enabled = self.get_sim_time() t_enabled = self.get_sim_time()
# The EKF should wait for GPS checks to pass when we are still able to navigate using dead reckoning # The EKF should wait for GPS checks to pass when we are still able to navigate using dead reckoning
# to prevent bad GPS being used when coming back after loss of lock due to interence. # to prevent bad GPS being used when coming back after loss of lock due to interence.
@ -3325,7 +3325,7 @@ class AutoTestPlane(vehicle_test_suite.TestSuite):
"EK3_AFFINITY": 15, # enable affinity for all sensors "EK3_AFFINITY": 15, # enable affinity for all sensors
"EK3_IMU_MASK": 3, # use only 2 IMUs "EK3_IMU_MASK": 3, # use only 2 IMUs
"GPS2_TYPE": 1, "GPS2_TYPE": 1,
"SIM_GPS2_DISABLE": 0, "SIM_GPS2_ENABLE": 1,
"SIM_BARO_COUNT": 2, "SIM_BARO_COUNT": 2,
"SIM_BAR2_DISABLE": 0, "SIM_BAR2_DISABLE": 0,
"ARSPD2_TYPE": 2, "ARSPD2_TYPE": 2,
@ -3400,9 +3400,9 @@ class AutoTestPlane(vehicle_test_suite.TestSuite):
# noise on each axis # noise on each axis
def sim_gps_verr(): def sim_gps_verr():
self.set_parameters({ self.set_parameters({
"SIM_GPS_VERR_X": self.get_parameter("SIM_GPS_VERR_X") + 2, "SIM_GPS1_VERR_X": self.get_parameter("SIM_GPS1_VERR_X") + 2,
"SIM_GPS_VERR_Y": self.get_parameter("SIM_GPS_VERR_Y") + 2, "SIM_GPS1_VERR_Y": self.get_parameter("SIM_GPS1_VERR_Y") + 2,
"SIM_GPS_VERR_Z": self.get_parameter("SIM_GPS_VERR_Z") + 2, "SIM_GPS1_VERR_Z": self.get_parameter("SIM_GPS1_VERR_Z") + 2,
}) })
self.wait_statustext(text="EKF3 lane switch", timeout=30, the_function=sim_gps_verr, check_context=True) self.wait_statustext(text="EKF3 lane switch", timeout=30, the_function=sim_gps_verr, check_context=True)
if self.lane_switches != [1, 0, 1]: if self.lane_switches != [1, 0, 1]:
@ -4870,8 +4870,8 @@ class AutoTestPlane(vehicle_test_suite.TestSuite):
self.context_collect('STATUSTEXT') self.context_collect('STATUSTEXT')
self.set_parameters({ self.set_parameters({
"EK3_POS_I_GATE": 0, "EK3_POS_I_GATE": 0,
"SIM_GPS_HZ": 1, "SIM_GPS1_HZ": 1,
"SIM_GPS_LAG_MS": 1000, "SIM_GPS1_LAG_MS": 1000,
}) })
self.wait_statustext("DCM Active", check_context=True, timeout=60) self.wait_statustext("DCM Active", check_context=True, timeout=60)
self.wait_statustext("EKF3 Active", check_context=True) self.wait_statustext("EKF3 Active", check_context=True)
@ -5530,8 +5530,8 @@ class AutoTestPlane(vehicle_test_suite.TestSuite):
def AltResetBadGPS(self): def AltResetBadGPS(self):
'''Tests the handling of poor GPS lock pre-arm alt resets''' '''Tests the handling of poor GPS lock pre-arm alt resets'''
self.set_parameters({ self.set_parameters({
"SIM_GPS_GLITCH_Z": 0, "SIM_GPS1_GLTCH_Z": 0,
"SIM_GPS_ACC": 0.3, "SIM_GPS1_ACC": 0.3,
}) })
self.wait_ready_to_arm() self.wait_ready_to_arm()
@ -5541,8 +5541,8 @@ class AutoTestPlane(vehicle_test_suite.TestSuite):
raise NotAchievedException("Bad relative alt %.1f" % relalt) raise NotAchievedException("Bad relative alt %.1f" % relalt)
self.progress("Setting low accuracy, glitching GPS") self.progress("Setting low accuracy, glitching GPS")
self.set_parameter("SIM_GPS_ACC", 40) self.set_parameter("SIM_GPS1_ACC", 40)
self.set_parameter("SIM_GPS_GLITCH_Z", -47) self.set_parameter("SIM_GPS1_GLTCH_Z", -47)
self.progress("Waiting 10s for height update") self.progress("Waiting 10s for height update")
self.delay_sim_time(10) self.delay_sim_time(10)
@ -6119,7 +6119,7 @@ class AutoTestPlane(vehicle_test_suite.TestSuite):
self.takeoff(50) self.takeoff(50)
self.change_mode('GUIDED') self.change_mode('GUIDED')
self.context_push() self.context_push()
self.set_parameter('SIM_GPS_DISABLE', 1) self.set_parameter('SIM_GPS1_ENABLE', 0)
self.delay_sim_time(30) self.delay_sim_time(30)
self.set_attitude_target() self.set_attitude_target()
self.context_pop() self.context_pop()
@ -6196,7 +6196,7 @@ class AutoTestPlane(vehicle_test_suite.TestSuite):
def ForceArm(self): def ForceArm(self):
'''check force-arming functionality''' '''check force-arming functionality'''
self.set_parameter("SIM_GPS_DISABLE", 1) self.set_parameter("SIM_GPS1_ENABLE", 0)
# 21196 is the mavlink standard, 2989 is legacy # 21196 is the mavlink standard, 2989 is legacy
for magic_value in 21196, 2989: for magic_value in 21196, 2989:
self.wait_sensor_state(mavutil.mavlink.MAV_SYS_STATUS_PREARM_CHECK, self.wait_sensor_state(mavutil.mavlink.MAV_SYS_STATUS_PREARM_CHECK,

View File

@ -18,7 +18,7 @@ WPNAV_SPEED_DN 300
WPNAV_SPEED 2000 WPNAV_SPEED 2000
RTL_ALT 2500 RTL_ALT 2500
ANGLE_MAX 3000 ANGLE_MAX 3000
SIM_GPS_LAG_MS 0 SIM_GPS1_LAG_MS 0
GPS_DELAY_MS 20 GPS_DELAY_MS 20
INS_GYRO_FILTER 50 INS_GYRO_FILTER 50
INS_ACCEL_FILTER 50 INS_ACCEL_FILTER 50

View File

@ -1,5 +1,5 @@
# SITL GPS-for-yaw using a single simulated NMEA GPS # SITL GPS-for-yaw using a single simulated NMEA GPS
EK3_SRC1_YAW 2 EK3_SRC1_YAW 2
GPS1_TYPE 5 GPS1_TYPE 5
SIM_GPS_TYPE 5 SIM_GPS1_TYPE 5
SIM_GPS_HDG 1 SIM_GPS1_HDG 1

View File

@ -5,7 +5,8 @@ GPS1_TYPE 17
GPS2_TYPE 18 GPS2_TYPE 18
GPS1_POS_Y -0.2 GPS1_POS_Y -0.2
GPS2_POS_Y 0.2 GPS2_POS_Y 0.2
SIM_GPS_POS_Y -0.2 SIM_GPS1_POS_Y -0.2
SIM_GPS2_POS_Y 0.2 SIM_GPS2_POS_Y 0.2
SIM_GPS2_DISABLE 0 SIM_GPS2_ENABLE 1
SIM_GPS2_HDG 1 SIM_GPS2_HDG 1
SIM_GPS1_HDG 4

View File

@ -5,7 +5,8 @@ GPS1_TYPE 17
GPS2_TYPE 18 GPS2_TYPE 18
GPS1_POS_Y -0.2 GPS1_POS_Y -0.2
GPS2_POS_Y 0.2 GPS2_POS_Y 0.2
SIM_GPS_POS_Y -0.2 SIM_GPS1_POS_Y -0.2
SIM_GPS2_POS_Y 0.2 SIM_GPS2_POS_Y 0.2
SIM_GPS2_DISABLE 0 SIM_GPS2_ENABLE 1
SIM_GPS2_HDG 1 SIM_GPS2_HDG 1
SIM_GPS1_HDG 4

View File

@ -628,19 +628,12 @@ SIM_FLOW_POS_X,0
SIM_FLOW_POS_Y,0 SIM_FLOW_POS_Y,0
SIM_FLOW_POS_Z,0 SIM_FLOW_POS_Z,0
SIM_FLOW_RATE,10 SIM_FLOW_RATE,10
SIM_GP2_GLITCH_X,0 SIM_GPS1_BYTELOSS,0
SIM_GP2_GLITCH_Y,0 SIM_GPS1_DRIFTALT,0
SIM_GP2_GLITCH_Z,0 SIM_GPS1_HZ,5
SIM_GPS_BYTELOSS,0 SIM_GPS1_NOISE,0
SIM_GPS_DISABLE,0 SIM_GPS1_NUMSATS,10
SIM_GPS_DRIFTALT,0 SIM_GPS1_TYPE,1
SIM_GPS_GLITCH_X,0
SIM_GPS_GLITCH_Y,0
SIM_GPS_GLITCH_Z,0
SIM_GPS_HZ,5
SIM_GPS_NOISE,0
SIM_GPS_NUMSATS,10
SIM_GPS_TYPE,1
SIM_GPS2_ENABLE,0 SIM_GPS2_ENABLE,0
SIM_IMU_POS_X,0 SIM_IMU_POS_X,0
SIM_IMU_POS_Y,0 SIM_IMU_POS_Y,0

View File

@ -1764,8 +1764,8 @@ class AutoTestQuadPlane(vehicle_test_suite.TestSuite):
# Kill any GPSs # Kill any GPSs
self.set_parameters({ self.set_parameters({
'SIM_GPS_DISABLE': 1, 'SIM_GPS1_ENABLE': 0,
'SIM_GPS2_DISABLE': 1, 'SIM_GPS2_ENABLE': 0,
}) })
self.delay_sim_time(5) self.delay_sim_time(5)

View File

@ -6807,7 +6807,7 @@ Brakes have negligible effect (with=%0.2fm without=%0.2fm delta=%0.2fm)
'''Test jamming simulation works''' '''Test jamming simulation works'''
self.wait_ready_to_arm() self.wait_ready_to_arm()
start_loc = self.assert_receive_message('GPS_RAW_INT') start_loc = self.assert_receive_message('GPS_RAW_INT')
self.set_parameter("SIM_GPS_JAM", 1) self.set_parameter("SIM_GPS1_JAM", 1)
class Requirement(): class Requirement():
def __init__(self, field, min_value): def __init__(self, field, min_value):

View File

@ -3665,7 +3665,7 @@ class TestSuite(ABC):
if (m.failure_flags & mavutil.mavlink.HL_FAILURE_FLAG_GPS) != 0: if (m.failure_flags & mavutil.mavlink.HL_FAILURE_FLAG_GPS) != 0:
raise NotAchievedException("Expected GPS to be OK") raise NotAchievedException("Expected GPS to be OK")
self.assert_sensor_state(mavutil.mavlink.MAV_SYS_STATUS_SENSOR_GPS, True, True, True) self.assert_sensor_state(mavutil.mavlink.MAV_SYS_STATUS_SENSOR_GPS, True, True, True)
self.set_parameter("SIM_GPS_TYPE", 0) self.set_parameter("SIM_GPS1_TYPE", 0)
self.delay_sim_time(10) self.delay_sim_time(10)
self.assert_sensor_state(mavutil.mavlink.MAV_SYS_STATUS_SENSOR_GPS, False, False, False) self.assert_sensor_state(mavutil.mavlink.MAV_SYS_STATUS_SENSOR_GPS, False, False, False)
m = self.poll_message("HIGH_LATENCY2") m = self.poll_message("HIGH_LATENCY2")
@ -3674,7 +3674,7 @@ class TestSuite(ABC):
raise NotAchievedException("Expected GPS to be failed") raise NotAchievedException("Expected GPS to be failed")
self.start_subtest("HIGH_LATENCY2 location") self.start_subtest("HIGH_LATENCY2 location")
self.set_parameter("SIM_GPS_TYPE", 1) self.set_parameter("SIM_GPS1_TYPE", 1)
self.delay_sim_time(10) self.delay_sim_time(10)
m = self.poll_message("HIGH_LATENCY2") m = self.poll_message("HIGH_LATENCY2")
self.progress(self.dump_message_verbose(m)) self.progress(self.dump_message_verbose(m))
@ -8471,7 +8471,7 @@ Also, ignores heartbeats not from our target system'''
def wait_gps_disable(self, position_horizontal=True, position_vertical=False, timeout=30): def wait_gps_disable(self, position_horizontal=True, position_vertical=False, timeout=30):
"""Disable GPS and wait for EKF to report the end of assistance from GPS.""" """Disable GPS and wait for EKF to report the end of assistance from GPS."""
self.set_parameter("SIM_GPS_DISABLE", 1) self.set_parameter("SIM_GPS1_ENABLE", 0)
tstart = self.get_sim_time() tstart = self.get_sim_time()
""" if using SITL estimates directly """ """ if using SITL estimates directly """
@ -10683,7 +10683,7 @@ Also, ignores heartbeats not from our target system'''
p1=1, # ARM p1=1, # ARM
want_result=mavutil.mavlink.MAV_RESULT_FAILED, want_result=mavutil.mavlink.MAV_RESULT_FAILED,
) )
self.set_parameter("SIM_GPS_DISABLE", 0) self.set_parameter("SIM_GPS1_ENABLE", 1)
self.wait_ekf_happy() # EKF may stay unhappy for a while self.wait_ekf_happy() # EKF may stay unhappy for a while
self.progress("PASS not able to arm without Position in mode : %s" % mode) self.progress("PASS not able to arm without Position in mode : %s" % mode)
if mode in self.get_no_position_not_settable_modes_list(): if mode in self.get_no_position_not_settable_modes_list():
@ -10693,10 +10693,10 @@ Also, ignores heartbeats not from our target system'''
try: try:
self.change_mode(mode, timeout=15) self.change_mode(mode, timeout=15)
except AutoTestTimeoutException: except AutoTestTimeoutException:
self.set_parameter("SIM_GPS_DISABLE", 0) self.set_parameter("SIM_GPS1_ENABLE", 1)
self.progress("PASS not able to set mode without Position : %s" % mode) self.progress("PASS not able to set mode without Position : %s" % mode)
except ValueError: except ValueError:
self.set_parameter("SIM_GPS_DISABLE", 0) self.set_parameter("SIM_GPS1_ENABLE", 1)
self.progress("PASS not able to set mode without Position : %s" % mode) self.progress("PASS not able to set mode without Position : %s" % mode)
if mode == "FOLLOW": if mode == "FOLLOW":
self.set_parameter("FOLL_ENABLE", 0) self.set_parameter("FOLL_ENABLE", 0)
@ -12531,7 +12531,7 @@ switch value'''
self.context_collect("STATUSTEXT") self.context_collect("STATUSTEXT")
self.set_parameters({ self.set_parameters({
"AFS_MAX_GPS_LOSS": 1, "AFS_MAX_GPS_LOSS": 1,
"SIM_GPS_DISABLE": 1, "SIM_GPS1_ENABLE": 0,
}) })
self.wait_statustext("AFS State: GPS_LOSS", check_context=True) self.wait_statustext("AFS State: GPS_LOSS", check_context=True)
self.context_pop() self.context_pop()
@ -14160,7 +14160,7 @@ switch value'''
self.context_collect("STATUSTEXT") self.context_collect("STATUSTEXT")
for (sim_gps_type, name, gps_type, detect_name, serial_protocol, detect_prefix) in sim_gps: for (sim_gps_type, name, gps_type, detect_name, serial_protocol, detect_prefix) in sim_gps:
self.start_subtest("Checking GPS type %s" % name) self.start_subtest("Checking GPS type %s" % name)
self.set_parameter("SIM_GPS_TYPE", sim_gps_type) self.set_parameter("SIM_GPS1_TYPE", sim_gps_type)
self.set_parameter("SERIAL3_PROTOCOL", serial_protocol) self.set_parameter("SERIAL3_PROTOCOL", serial_protocol)
if gps_type is None: if gps_type is None:
gps_type = 1 # auto-detect gps_type = 1 # auto-detect
@ -14265,7 +14265,7 @@ switch value'''
self.start_subtest("Ensure detection when sim gps connected") self.start_subtest("Ensure detection when sim gps connected")
self.set_parameter("SIM_GPS2_TYPE", 1) self.set_parameter("SIM_GPS2_TYPE", 1)
self.set_parameter("SIM_GPS2_DISABLE", 0) self.set_parameter("SIM_GPS2_ENABLE", 1)
# a reboot is required after setting GPS2_TYPE. We start # a reboot is required after setting GPS2_TYPE. We start
# sending GPS2_RAW out, once the parameter is set, but a # sending GPS2_RAW out, once the parameter is set, but a
# reboot is required because _port[1] is only set in # reboot is required because _port[1] is only set in
@ -14281,9 +14281,9 @@ switch value'''
raise NotAchievedException("Incorrect fix type") raise NotAchievedException("Incorrect fix type")
self.start_subtest("Check parameters are per-GPS") self.start_subtest("Check parameters are per-GPS")
self.assert_parameter_value("SIM_GPS_NUMSATS", 10) self.assert_parameter_value("SIM_GPS1_NUMSATS", 10)
self.assert_gps_satellite_count("GPS_RAW_INT", 10) self.assert_gps_satellite_count("GPS_RAW_INT", 10)
self.set_parameter("SIM_GPS_NUMSATS", 13) self.set_parameter("SIM_GPS1_NUMSATS", 13)
self.assert_gps_satellite_count("GPS_RAW_INT", 13) self.assert_gps_satellite_count("GPS_RAW_INT", 13)
self.assert_parameter_value("SIM_GPS2_NUMSATS", 10) self.assert_parameter_value("SIM_GPS2_NUMSATS", 10)
@ -14311,7 +14311,7 @@ switch value'''
if abs(gpi_alt - new_gpi_alt) > 100: if abs(gpi_alt - new_gpi_alt) > 100:
raise NotAchievedException("alt moved unexpectedly") raise NotAchievedException("alt moved unexpectedly")
self.progress("Killing first GPS") self.progress("Killing first GPS")
self.set_parameter("SIM_GPS_DISABLE", 1) self.set_parameter("SIM_GPS1_ENABLE", 0)
self.delay_sim_time(1) self.delay_sim_time(1)
self.progress("Checking altitude now matches second GPS") self.progress("Checking altitude now matches second GPS")
m = self.assert_receive_message("GLOBAL_POSITION_INT") m = self.assert_receive_message("GLOBAL_POSITION_INT")

View File

@ -17,7 +17,6 @@ module load graph
@alias add odroidpower relay set 0 @alias add odroidpower relay set 0
@alias add neutral2 servo set 12 1500 @alias add neutral2 servo set 12 1500
@alias add ekf param set AHRS_EKF_USE @alias add ekf param set AHRS_EKF_USE
@alias add gpsdisable param set SIM_GPS_DISABLE
@alias add bb status gps* scaled* raw* @alias add bb status gps* scaled* raw*
@alias add g graph @alias add g graph
@alias add grc3 g RC_CHANNELS.chan3_raw SERVO_OUTPUT_RAW.servo3_raw @alias add grc3 g RC_CHANNELS.chan3_raw SERVO_OUTPUT_RAW.servo3_raw