mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-03 06:28:27 -04:00
autotest: Add a test for GLIDE_SLOPE_THR
This commit is contained in:
parent
a715472353
commit
71596c2c9f
@ -0,0 +1,13 @@
|
|||||||
|
QGC WPL 110
|
||||||
|
0 0 0 16 0.000000 0.000000 0.000000 0.000000 -35.363262 149.165237 584.090027 1
|
||||||
|
1 0 3 22 15.000000 0.000000 0.000000 0.000000 -35.361065 149.164916 48.849998 1
|
||||||
|
2 0 3 16 0.000000 0.000000 0.000000 0.000000 -35.359467 149.161697 100.000000 1
|
||||||
|
3 0 3 31 0.000000 0.000000 0.000000 0.000000 -35.359908 149.161790 200.000000 1
|
||||||
|
4 0 3 16 0.000000 0.000000 0.000000 0.000000 -35.361402 149.161984 200.000000 1
|
||||||
|
5 0 3 16 0.000000 0.000000 0.000000 0.000000 -35.361477 149.161986 99.550003 1
|
||||||
|
6 0 3 16 0.000000 0.000000 0.000000 0.000000 -35.363121 149.162222 200.000000 1
|
||||||
|
7 0 3 31 0.000000 0.000000 0.000000 0.000000 -35.365708 149.162588 100.000000 1
|
||||||
|
8 0 3 16 0.000000 0.000000 0.000000 0.000000 -35.366333 149.162659 80.000000 1
|
||||||
|
9 0 3 16 0.000000 0.000000 0.000000 0.000000 -35.366161 149.165617 50.000000 1
|
||||||
|
10 0 3 16 0.000000 0.000000 0.000000 0.000000 -35.365403 149.165512 30.000000 1
|
||||||
|
11 0 3 21 0.000000 0.000000 0.000000 1.000000 -35.362777 149.165172 0.000000 1
|
@ -3348,6 +3348,91 @@ function'''
|
|||||||
if m.intake_manifold_temperature < 20:
|
if m.intake_manifold_temperature < 20:
|
||||||
raise NotAchievedException("Bad intake manifold temperature")
|
raise NotAchievedException("Bad intake manifold temperature")
|
||||||
|
|
||||||
|
def test_glide_slope_threshold(self):
|
||||||
|
|
||||||
|
# Test that GLIDE_SLOPE_THRESHOLD correctly controls re-planning glide slope
|
||||||
|
# in the scenario that aircraft is above planned slope and slope is positive (climbing).
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Behaviour with GLIDE_SLOPE_THRESH = 0 (no slope replanning)
|
||||||
|
# (2).. __(4)
|
||||||
|
# | \..__/
|
||||||
|
# | __/
|
||||||
|
# (3)
|
||||||
|
#
|
||||||
|
# Behaviour with GLIDE_SLOPE_THRESH = 5 (slope replanning when >5m error)
|
||||||
|
# (2)........__(4)
|
||||||
|
# | __/
|
||||||
|
# | __/
|
||||||
|
# (3)
|
||||||
|
# Solid is plan, dots are actual flightpath.
|
||||||
|
|
||||||
|
self.load_mission('rapid-descent-then-climb.txt', strict=False)
|
||||||
|
|
||||||
|
self.set_current_waypoint(1)
|
||||||
|
self.change_mode('AUTO')
|
||||||
|
self.wait_ready_to_arm()
|
||||||
|
self.arm_vehicle()
|
||||||
|
|
||||||
|
#
|
||||||
|
# Initial run with GLIDE_SLOPE_THR = 5 (default).
|
||||||
|
#
|
||||||
|
self.set_parameter("GLIDE_SLOPE_THR", 5)
|
||||||
|
|
||||||
|
# Wait for waypoint commanding rapid descent, followed by climb.
|
||||||
|
self.wait_current_waypoint(5, timeout=1200)
|
||||||
|
|
||||||
|
# Altitude should not descend significantly below the initial altitude
|
||||||
|
init_altitude = self.get_altitude(relative=True, timeout=2)
|
||||||
|
timeout = 600
|
||||||
|
wpnum = 7
|
||||||
|
tstart = self.get_sim_time()
|
||||||
|
while True:
|
||||||
|
if self.get_sim_time() - tstart > timeout:
|
||||||
|
raise AutoTestTimeoutException("Did not get wanted current waypoint")
|
||||||
|
|
||||||
|
if (self.get_altitude(relative=True, timeout=2) - init_altitude) < -10:
|
||||||
|
raise NotAchievedException("Descended >10m before reaching desired waypoint,\
|
||||||
|
indicating slope was not replanned")
|
||||||
|
|
||||||
|
seq = self.mav.waypoint_current()
|
||||||
|
self.progress("Waiting for wp=%u current=%u" % (wpnum, seq))
|
||||||
|
if seq == wpnum:
|
||||||
|
break
|
||||||
|
|
||||||
|
self.set_current_waypoint(2)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Second run with GLIDE_SLOPE_THR = 0 (no re-plan).
|
||||||
|
#
|
||||||
|
self.set_parameter("GLIDE_SLOPE_THR", 0)
|
||||||
|
|
||||||
|
# Wait for waypoint commanding rapid descent, followed by climb.
|
||||||
|
self.wait_current_waypoint(5, timeout=1200)
|
||||||
|
|
||||||
|
# This time altitude should descend significantly below the initial altitude
|
||||||
|
init_altitude = self.get_altitude(relative=True, timeout=2)
|
||||||
|
timeout = 600
|
||||||
|
wpnum = 7
|
||||||
|
tstart = self.get_sim_time()
|
||||||
|
while True:
|
||||||
|
if self.get_sim_time() - tstart > timeout:
|
||||||
|
raise AutoTestTimeoutException("Did not get wanted altitude")
|
||||||
|
|
||||||
|
seq = self.mav.waypoint_current()
|
||||||
|
self.progress("Waiting for wp=%u current=%u" % (wpnum, seq))
|
||||||
|
if seq == wpnum:
|
||||||
|
raise NotAchievedException("Reached desired waypoint without first decending 10m,\
|
||||||
|
indicating slope was replanned unexpectedly")
|
||||||
|
|
||||||
|
if (self.get_altitude(relative=True, timeout=2) - init_altitude) < -10:
|
||||||
|
break
|
||||||
|
|
||||||
|
# Disarm
|
||||||
|
self.wait_disarmed(timeout=600)
|
||||||
|
|
||||||
|
self.progress("Mission OK")
|
||||||
|
|
||||||
def tests(self):
|
def tests(self):
|
||||||
'''return list of all tests'''
|
'''return list of all tests'''
|
||||||
ret = super(AutoTestPlane, self).tests()
|
ret = super(AutoTestPlane, self).tests()
|
||||||
@ -3601,6 +3686,10 @@ function'''
|
|||||||
"Test soaring speed-to-fly",
|
"Test soaring speed-to-fly",
|
||||||
self.fly_soaring_speed_to_fly),
|
self.fly_soaring_speed_to_fly),
|
||||||
|
|
||||||
|
("GlideSlopeThresh",
|
||||||
|
"Test rebuild glide slope if above and climbing",
|
||||||
|
self.test_glide_slope_threshold),
|
||||||
|
|
||||||
("LogUpload",
|
("LogUpload",
|
||||||
"Log upload",
|
"Log upload",
|
||||||
self.log_upload),
|
self.log_upload),
|
||||||
|
Loading…
Reference in New Issue
Block a user