mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-03 06:28:27 -04:00
autotest: add test for OBSTACLE_DISTANCE_3D message
This commit is contained in:
parent
393ec5d6f7
commit
c2e310d75f
@ -13,6 +13,7 @@ import shutil
|
|||||||
|
|
||||||
from pymavlink import mavutil
|
from pymavlink import mavutil
|
||||||
from pymavlink import mavextra
|
from pymavlink import mavextra
|
||||||
|
from pymavlink import rotmat as pymavlink_rotmat
|
||||||
|
|
||||||
from pysim import util, rotmat
|
from pysim import util, rotmat
|
||||||
from pysim import vehicleinfo
|
from pysim import vehicleinfo
|
||||||
@ -4912,6 +4913,82 @@ class AutoTestCopter(AutoTest):
|
|||||||
self.set_rc(2, 1500)
|
self.set_rc(2, 1500)
|
||||||
self.do_RTL()
|
self.do_RTL()
|
||||||
|
|
||||||
|
def OBSTACLE_DISTANCE_3D_test_angle(self, angle):
|
||||||
|
now = self.get_sim_time_cached()
|
||||||
|
|
||||||
|
distance = 15
|
||||||
|
right = distance * math.sin(math.radians(angle))
|
||||||
|
front = distance * math.cos(math.radians(angle))
|
||||||
|
down = 0
|
||||||
|
|
||||||
|
expected_distance_cm = distance * 100
|
||||||
|
# expected orientation
|
||||||
|
expected_orientation = int((angle+22.5)/45) % 8
|
||||||
|
self.progress("Angle %f expected orient %u" %
|
||||||
|
(angle, expected_orientation))
|
||||||
|
|
||||||
|
tstart = self.get_sim_time()
|
||||||
|
last_send = 0
|
||||||
|
while True:
|
||||||
|
now = self.get_sim_time_cached()
|
||||||
|
if now - tstart > 10:
|
||||||
|
raise NotAchievedException("Did not get correct angle back")
|
||||||
|
|
||||||
|
if now - last_send > 0.1:
|
||||||
|
self.progress("ang=%f sending front=%f right=%f" %
|
||||||
|
(angle, front, right))
|
||||||
|
self.mav.mav.obstacle_distance_3d_send(
|
||||||
|
int(now*1000), # time_boot_ms
|
||||||
|
mavutil.mavlink.MAV_DISTANCE_SENSOR_LASER,
|
||||||
|
mavutil.mavlink.MAV_FRAME_BODY_FRD,
|
||||||
|
65535,
|
||||||
|
front, # x (m)
|
||||||
|
right, # y (m)
|
||||||
|
down, # z (m)
|
||||||
|
0, # min_distance (m)
|
||||||
|
20 # max_distance (m)
|
||||||
|
)
|
||||||
|
last_send = now
|
||||||
|
m = self.mav.recv_match(type="DISTANCE_SENSOR",
|
||||||
|
blocking=True,
|
||||||
|
timeout=1)
|
||||||
|
if m is None:
|
||||||
|
continue
|
||||||
|
# self.progress("Got (%s)" % str(m))
|
||||||
|
if m.orientation != expected_orientation:
|
||||||
|
# self.progress("Wrong orientation (want=%u got=%u)" %
|
||||||
|
# (expected_orientation, m.orientation))
|
||||||
|
continue
|
||||||
|
if abs(m.current_distance - expected_distance_cm) > 1:
|
||||||
|
# self.progress("Wrong distance (want=%f got=%f)" %
|
||||||
|
# (expected_distance_cm, m.current_distance))
|
||||||
|
continue
|
||||||
|
self.progress("distance-at-angle good")
|
||||||
|
break
|
||||||
|
|
||||||
|
def OBSTACLE_DISTANCE_3D(self):
|
||||||
|
self.context_push()
|
||||||
|
ex = None
|
||||||
|
try:
|
||||||
|
self.set_parameters({
|
||||||
|
"SERIAL5_PROTOCOL": 1,
|
||||||
|
"PRX_TYPE": 2,
|
||||||
|
})
|
||||||
|
self.reboot_sitl()
|
||||||
|
|
||||||
|
for angle in range(0, 360):
|
||||||
|
self.OBSTACLE_DISTANCE_3D_test_angle(angle)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
self.progress("Caught exception: %s" %
|
||||||
|
self.get_exception_stacktrace(e))
|
||||||
|
ex = e
|
||||||
|
self.context_pop()
|
||||||
|
self.disarm_vehicle(force=True)
|
||||||
|
self.reboot_sitl()
|
||||||
|
if ex is not None:
|
||||||
|
raise ex
|
||||||
|
|
||||||
def fly_proximity_avoidance_test(self):
|
def fly_proximity_avoidance_test(self):
|
||||||
self.context_push()
|
self.context_push()
|
||||||
ex = None
|
ex = None
|
||||||
@ -6145,6 +6222,10 @@ class AutoTestCopter(AutoTest):
|
|||||||
"Fly stability patch",
|
"Fly stability patch",
|
||||||
lambda: self.fly_stability_patch(30)), #17s
|
lambda: self.fly_stability_patch(30)), #17s
|
||||||
|
|
||||||
|
("OBSTACLE_DISTANCE_3D",
|
||||||
|
"Test proximity avoidance slide behaviour in 3D",
|
||||||
|
self.OBSTACLE_DISTANCE_3D), #??s
|
||||||
|
|
||||||
("AC_Avoidance_Proximity",
|
("AC_Avoidance_Proximity",
|
||||||
"Test proximity avoidance slide behaviour",
|
"Test proximity avoidance slide behaviour",
|
||||||
self.fly_proximity_avoidance_test), #41s
|
self.fly_proximity_avoidance_test), #41s
|
||||||
|
Loading…
Reference in New Issue
Block a user