Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Ardupilot
GitHub Repository: Ardupilot/ardupilot
Path: blob/master/Tools/autotest/sailboat.py
9865 views
1
'''
2
Drive a Sailboat in SITL
3
4
AP_FLAKE8_CLEAN
5
6
'''
7
8
import os
9
10
from rover import AutoTestRover
11
12
from vehicle_test_suite import AutoTestTimeoutException
13
from vehicle_test_suite import PreconditionFailedException
14
15
# get location of scripts
16
testdir = os.path.dirname(os.path.realpath(__file__))
17
18
19
def log_name(self):
20
return "Sailboat"
21
22
23
class AutoTestSailboat(AutoTestRover):
24
25
def vehicleinfo_key(self):
26
return "Rover"
27
28
def init(self):
29
if self.frame is None:
30
self.frame = 'sailboat'
31
super(AutoTestSailboat, self).init()
32
33
def DriveRTL(self, timeout=120):
34
'''Drive an RTL Mission'''
35
self.wait_ready_to_arm()
36
self.arm_vehicle()
37
38
self.load_mission("rtl.txt")
39
self.change_mode("AUTO")
40
41
tstart = self.get_sim_time()
42
while True:
43
now = self.get_sim_time_cached()
44
if now - tstart > timeout:
45
raise AutoTestTimeoutException("Didn't see wp 3")
46
m = self.assert_receive_message('MISSION_CURRENT', verbose=True)
47
if m.seq == 3:
48
break
49
50
self.drain_mav()
51
52
m = self.assert_receive_message('NAV_CONTROLLER_OUTPUT', timeout=1)
53
54
wp_dist_min = 5
55
if m.wp_dist < wp_dist_min:
56
raise PreconditionFailedException(
57
"Did not start at least %f metres from destination (is=%f)" %
58
(wp_dist_min, m.wp_dist))
59
60
self.progress("NAV_CONTROLLER_OUTPUT.wp_dist looks good (%u >= %u)" %
61
(m.wp_dist, wp_dist_min,))
62
63
# wait for mission to complete
64
self.wait_statustext("Mission Complete", timeout=70)
65
66
# sailboat loiters around RTL point indefinitely:
67
self.wait_groundspeed(0.5, 3, timeout=20, minimum_duration=10)
68
69
self.disarm_vehicle()
70
71
self.progress("RTL Mission OK")
72
73
def DriveMission(self):
74
'''sail a simple mission'''
75
self.drive_mission("balancebot1.txt", strict=False)
76
77
def tests(self):
78
'''return list of all tests'''
79
ret = ([])
80
81
ret.extend([
82
self.DriveRTL,
83
self.DriveMission,
84
])
85
return ret
86
87
def default_mode(self):
88
return 'MANUAL'
89
90