Source code for base.proximity_testing

#! /usr/bin/env python
"""
This script tests the proximity sensor in MORSE.
"""

import sys
from morse.testing.testing import MorseTestCase
from pymorse import Morse

# Include this import to be able to use your test file as a regular 
# builder script, ie, usable with: 'morse [run|exec] base_testing.py
try:
    from morse.builder import *
except ImportError:
    pass

[docs]def send_dest(s, morse, x, y, yaw): s.publish({'x' : x, 'y' : y, 'z' : 0, 'yaw' : yaw, 'pitch' : 0.0, 'roll' : 0.0}) morse.sleep(0.1)
[docs]class ProximityTest(MorseTestCase):
[docs] def setUpEnv(self): """ Defines the test scenario, using the Builder API. """ robot = ATRV() proximity = Proximity() proximity.translate(z=0.5) proximity.properties(Track = "Catch_me") proximity.properties(Range = 2.0) robot.append(proximity) proximity.add_stream('socket') proximity.add_service('socket') pose = Pose() robot.append(pose) pose.add_stream('socket') motion = Teleport() robot.append(motion) motion.add_stream('socket') target1 = ATRV("Target1") target1.properties(Catch_me = True) target1.translate(x=10.0, y = 1.0) target2 = ATRV("Target2") target2.properties(Catch_me2 = True) target2.translate(x=10.0, y = -1.0) target3 = ATRV("Target3") target3.properties(Catch_me = True) target3.translate(x=-4.0, y = 0.0) env = Environment('empty', fastmode = True) env.set_camera_location( (9.952, -14.955, 12.48) ) env.set_camera_rotation( (0.867, 0, 0.428) ) env.add_service('socket')
[docs] def test_proximity(self): with Morse() as morse: prox_stream = morse.robot.proximity teleport_client = morse.robot.motion prox = prox_stream.get() self.assertEqual(len(prox['near_objects']), 0) # still emtpy send_dest(teleport_client, morse, 8.0, 0.0, 0.0) prox = prox_stream.get() self.assertEqual(len(prox['near_objects']), 0) # one more meter, must find target1. target2 is at equal # distance but don't have the good tag send_dest(teleport_client, morse, 9.0, 0.0, 0.0) prox = prox_stream.get() self.assertEqual(len(prox['near_objects']), 1) self.assertIn('Target1', prox['near_objects']) # Don't care about the direction, only check the distance send_dest(teleport_client, morse, -2.8, 0.0, 0.0) prox = prox_stream.get() self.assertEqual(len(prox['near_objects']), 1) self.assertIn('Target3', prox['near_objects']) # Call the set_range service and check if we can catch the # two objects prox_stream.set_range(20.0) morse.sleep(0.1) prox = prox_stream.get() self.assertEqual(len(prox['near_objects']), 2) self.assertIn('Target1', prox['near_objects']) self.assertIn('Target3', prox['near_objects']) # Call the set_tracked_tag service and check if we catch # target2 prox_stream.set_tracked_tag('Catch_me2') morse.sleep(0.1) prox = prox_stream.get() self.assertEqual(len(prox['near_objects']), 1) self.assertIn('Target2', prox['near_objects'])
########################## Run these tests ########################## if __name__ == "__main__": from morse.testing.testing import main main(ProximityTest)