mirror of https://github.com/ArduPilot/ardupilot
Tools: autotest: add test for Copter onboard mag calibration
This commit is contained in:
parent
aae9dc55e3
commit
27f642014c
|
@ -2846,6 +2846,76 @@ class AutoTestCopter(AutoTest):
|
||||||
(tdelta, max_good_tdelta))
|
(tdelta, max_good_tdelta))
|
||||||
self.progress("Vehicle returned")
|
self.progress("Vehicle returned")
|
||||||
|
|
||||||
|
def test_onboard_compass_calibration(self, timeout=240):
|
||||||
|
twist_x = 2.1
|
||||||
|
twist_y = 2.2
|
||||||
|
twist_z = 2.3
|
||||||
|
ex = None
|
||||||
|
self.context_push()
|
||||||
|
try:
|
||||||
|
self.set_parameter("SIM_GND_BEHAV", 0)
|
||||||
|
self.set_parameter("AHRS_EKF_TYPE", 10)
|
||||||
|
self.reboot_sitl()
|
||||||
|
|
||||||
|
report = self.mav.messages.get("MAG_CAL_REPORT", None)
|
||||||
|
if report is not None:
|
||||||
|
raise PreconditionFailedException("MAG_CAL_REPORT found")
|
||||||
|
|
||||||
|
self.run_cmd(mavutil.mavlink.MAV_CMD_DO_START_MAG_CAL,
|
||||||
|
1, # bitmask of compasses to calibrate
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
timeout=1)
|
||||||
|
tstart = self.get_sim_time()
|
||||||
|
last_twist_time = 0
|
||||||
|
while True:
|
||||||
|
now = self.get_sim_time_cached()
|
||||||
|
if now - tstart > timeout:
|
||||||
|
raise NotAchievedException("timeout before cal complete")
|
||||||
|
report = self.mav.messages.get("MAG_CAL_REPORT", None)
|
||||||
|
if report is not None:
|
||||||
|
print("Report: %s" % str(report))
|
||||||
|
break
|
||||||
|
if now - last_twist_time > 5:
|
||||||
|
last_twist_time = now
|
||||||
|
twist_x *= 1.1
|
||||||
|
twist_y *= 1.2
|
||||||
|
twist_z *= 1.3
|
||||||
|
if abs(twist_x) > 10:
|
||||||
|
twist_x /= -2
|
||||||
|
if abs(twist_y) > 10:
|
||||||
|
twist_y /= -2
|
||||||
|
if abs(twist_z) > 10:
|
||||||
|
twist_z /= -2
|
||||||
|
self.set_parameter("SIM_TWIST_X", twist_x)
|
||||||
|
self.set_parameter("SIM_TWIST_Y", twist_y)
|
||||||
|
self.set_parameter("SIM_TWIST_Z", twist_z)
|
||||||
|
try:
|
||||||
|
self.set_parameter("SIM_TWIST_TIME", 100)
|
||||||
|
except ValueError as e:
|
||||||
|
# the shove resets this to zero
|
||||||
|
pass
|
||||||
|
|
||||||
|
m = self.mav.recv_match(type="MAG_CAL_PROGRESS", timeout=1)
|
||||||
|
self.progress("progress: %s" % str(m))
|
||||||
|
if m is None:
|
||||||
|
continue
|
||||||
|
att = self.mav.messages.get("ATTITUDE", None)
|
||||||
|
self.progress("Attitude: %f %f %f" %
|
||||||
|
(math.degrees(att.roll), math.degrees(att.pitch), math.degrees(att.yaw)))
|
||||||
|
except Exception as e:
|
||||||
|
print("Exception caught: %s" % str(e))
|
||||||
|
ex = e
|
||||||
|
|
||||||
|
self.context_pop()
|
||||||
|
self.reboot_sitl()
|
||||||
|
if ex is not None:
|
||||||
|
raise ex
|
||||||
|
|
||||||
def fly_brake_mode(self):
|
def fly_brake_mode(self):
|
||||||
# test brake mode
|
# test brake mode
|
||||||
self.progress("Testing brake mode")
|
self.progress("Testing brake mode")
|
||||||
|
@ -3237,6 +3307,10 @@ class AutoTestCopter(AutoTest):
|
||||||
"Fly POSHOLD takeoff",
|
"Fly POSHOLD takeoff",
|
||||||
self.fly_poshold_takeoff),
|
self.fly_poshold_takeoff),
|
||||||
|
|
||||||
|
("OnboardCompassCalibration",
|
||||||
|
"Test onboard compass calibration",
|
||||||
|
self.test_onboard_compass_calibration),
|
||||||
|
|
||||||
("LogDownLoad",
|
("LogDownLoad",
|
||||||
"Log download",
|
"Log download",
|
||||||
lambda: self.log_download(
|
lambda: self.log_download(
|
||||||
|
|
Loading…
Reference in New Issue