mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-09 01:18:29 -04:00
Tools: add test for mount targetting
This commit is contained in:
parent
a893a5483c
commit
29fda1681b
@ -3079,10 +3079,12 @@ class AutoTestCopter(AutoTest):
|
|||||||
self.run_cmd_do_set_mode("ACRO")
|
self.run_cmd_do_set_mode("ACRO")
|
||||||
self.mav.motors_disarmed_wait()
|
self.mav.motors_disarmed_wait()
|
||||||
|
|
||||||
def test_mount_pitch(self, despitch, despitch_tolerance, timeout=10):
|
def test_mount_pitch(self, despitch, despitch_tolerance, timeout=10, hold=0):
|
||||||
tstart = self.get_sim_time()
|
tstart = self.get_sim_time()
|
||||||
|
success_start = 0
|
||||||
while True:
|
while True:
|
||||||
if self.get_sim_time_cached() - tstart > timeout:
|
now = self.get_sim_time_cached()
|
||||||
|
if now - tstart > timeout:
|
||||||
raise NotAchievedException("Mount pitch not achieved")
|
raise NotAchievedException("Mount pitch not achieved")
|
||||||
|
|
||||||
m = self.mav.recv_match(type='MOUNT_STATUS',
|
m = self.mav.recv_match(type='MOUNT_STATUS',
|
||||||
@ -3094,9 +3096,15 @@ class AutoTestCopter(AutoTest):
|
|||||||
if abs(despitch - mount_pitch) > despitch_tolerance:
|
if abs(despitch - mount_pitch) > despitch_tolerance:
|
||||||
self.progress("Mount pitch incorrect: %f != %f" %
|
self.progress("Mount pitch incorrect: %f != %f" %
|
||||||
(mount_pitch, despitch))
|
(mount_pitch, despitch))
|
||||||
|
success_start = 0
|
||||||
continue
|
continue
|
||||||
self.progress("Mount pitch correct: %f degrees == %f" %
|
self.progress("Mount pitch correct: %f degrees == %f" %
|
||||||
(mount_pitch, despitch))
|
(mount_pitch, despitch))
|
||||||
|
if success_start == 0:
|
||||||
|
success_start = now
|
||||||
|
continue
|
||||||
|
if now - success_start > hold:
|
||||||
|
self.progress("Mount pitch achieved")
|
||||||
return
|
return
|
||||||
|
|
||||||
def do_pitch(self, pitch):
|
def do_pitch(self, pitch):
|
||||||
@ -3115,6 +3123,9 @@ class AutoTestCopter(AutoTest):
|
|||||||
def test_mount(self):
|
def test_mount(self):
|
||||||
ex = None
|
ex = None
|
||||||
self.context_push()
|
self.context_push()
|
||||||
|
old_srcSystem = self.mav.mav.srcSystem
|
||||||
|
self.mav.mav.srcSystem = 250
|
||||||
|
self.set_parameter("DISARM_DELAY", 0)
|
||||||
try:
|
try:
|
||||||
'''start by disabling GCS failsafe, otherwise we immediately disarm
|
'''start by disabling GCS failsafe, otherwise we immediately disarm
|
||||||
due to (apparently) not receiving traffic from the GCS for
|
due to (apparently) not receiving traffic from the GCS for
|
||||||
@ -3308,9 +3319,11 @@ class AutoTestCopter(AutoTest):
|
|||||||
|
|
||||||
self.context_pop()
|
self.context_pop()
|
||||||
|
|
||||||
except Exception:
|
except Exception as e:
|
||||||
|
self.progress("Exception caught: %s" % (
|
||||||
|
self.get_exception_stacktrace(e)))
|
||||||
self.context_pop()
|
self.context_pop()
|
||||||
raise
|
raise e
|
||||||
|
|
||||||
self.progress("Testing mount ROI behaviour")
|
self.progress("Testing mount ROI behaviour")
|
||||||
self.drain_mav_unparsed()
|
self.drain_mav_unparsed()
|
||||||
@ -3382,7 +3395,75 @@ class AutoTestCopter(AutoTest):
|
|||||||
roi_alt,
|
roi_alt,
|
||||||
frame=mavutil.mavlink.MAV_FRAME_GLOBAL,
|
frame=mavutil.mavlink.MAV_FRAME_GLOBAL,
|
||||||
)
|
)
|
||||||
self.test_mount_pitch(-70, 1)
|
self.test_mount_pitch(-70, 1, hold=2)
|
||||||
|
|
||||||
|
self.run_cmd(mavutil.mavlink.MAV_CMD_DO_MOUNT_CONFIGURE,
|
||||||
|
mavutil.mavlink.MAV_MOUNT_MODE_NEUTRAL,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
self.test_mount_pitch(0, 0.1)
|
||||||
|
|
||||||
|
|
||||||
|
self.progress("Testing mount roi-sysid behaviour")
|
||||||
|
self.test_mount_pitch(0, 0.1)
|
||||||
|
start = self.mav.location()
|
||||||
|
self.progress("start=%s" % str(start))
|
||||||
|
(roi_lat, roi_lon) = mavextra.gps_offset(start.lat,
|
||||||
|
start.lng,
|
||||||
|
10,
|
||||||
|
20)
|
||||||
|
roi_alt = 0
|
||||||
|
self.progress("Using MAV_CMD_DO_SET_ROI_SYSID")
|
||||||
|
self.run_cmd(mavutil.mavlink.MAV_CMD_DO_SET_ROI_SYSID,
|
||||||
|
250,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
self.mav.mav.global_position_int_send(
|
||||||
|
0, # time boot ms
|
||||||
|
roi_lat * 1e7,
|
||||||
|
roi_lon * 1e7,
|
||||||
|
0 *1000, # mm alt amsl
|
||||||
|
0 *1000, # relalt mm UP!
|
||||||
|
0, # vx
|
||||||
|
0, # vy
|
||||||
|
0, # vz
|
||||||
|
0 # heading
|
||||||
|
);
|
||||||
|
self.test_mount_pitch(-89, 5, hold=2)
|
||||||
|
|
||||||
|
self.mav.mav.global_position_int_send(
|
||||||
|
0, # time boot ms
|
||||||
|
roi_lat * 1e7,
|
||||||
|
roi_lon * 1e7,
|
||||||
|
670 *1000, # mm alt amsl
|
||||||
|
100 *1000, # mm UP!
|
||||||
|
0, # vx
|
||||||
|
0, # vy
|
||||||
|
0, # vz
|
||||||
|
0 # heading
|
||||||
|
);
|
||||||
|
self.test_mount_pitch(68, 5, hold=2)
|
||||||
|
|
||||||
|
self.run_cmd(mavutil.mavlink.MAV_CMD_DO_MOUNT_CONFIGURE,
|
||||||
|
mavutil.mavlink.MAV_MOUNT_MODE_NEUTRAL,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
self.test_mount_pitch(0, 0.1)
|
||||||
|
|
||||||
self.progress("checking ArduCopter yaw-aircraft-for-roi")
|
self.progress("checking ArduCopter yaw-aircraft-for-roi")
|
||||||
try:
|
try:
|
||||||
@ -3424,6 +3505,7 @@ class AutoTestCopter(AutoTest):
|
|||||||
ex = e
|
ex = e
|
||||||
self.context_pop()
|
self.context_pop()
|
||||||
|
|
||||||
|
self.mav.mav.srcSystem = old_srcSystem
|
||||||
self.disarm_vehicle(force=True)
|
self.disarm_vehicle(force=True)
|
||||||
self.reboot_sitl() # to handle MNT_TYPE changing
|
self.reboot_sitl() # to handle MNT_TYPE changing
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user