def test_camera_thumbs(mpstate, image_file): '''Send some thumbnails to the view via the camera_air module''' loadedModuleAir = camera_air.init(mpstate) parms = "/data/ChameleonArecort/params.json" loadedModuleAir.cmd_camera(["set", "camparms", parms]) loadedModuleAir.cmd_camera(["set", "imagefile", image_file]) loadedModuleAir.cmd_camera(["set", "minscore", "0"]) loadedModuleAir.cmd_camera(["set", "gcs_address", "127.0.0.1:14000:15000:45, 127.0.0.1:14500:15500:60000"]) loadedModuleGround = camera_ground.init(mpstate) loadedModuleGround.cmd_camera(["set", "camparms", parms]) loadedModuleGround.cmd_camera(["set", "air_address", "127.0.0.1:15000:14000:45, 127.0.0.1:15500:14500:60000"]) loadedModuleGround.cmd_camera(["view"]) #start the image stream and modules capture_thread = sim_camera() time.sleep(0.05) loadedModuleAir.cmd_camera(["start"]) time.sleep(2.0) #and request a fullsize image filename = os.path.join(os.getcwd(), 'tests', 'testdata', 'raw2016111223465160Z.png') frame_time = cuav_util.parse_frame_time(filename) loadedModuleGround.mosaic.image_requests[frame_time] = 'fetchImageFull' time.sleep(2.0) loadedModuleAir.unload() loadedModuleGround.unload() capture_thread.join(1.0) #and do the asserts assert loadedModuleAir.region_count > 0 assert loadedModuleGround.region_count > 0 assert loadedModuleGround.thumb_count > 0 assert loadedModuleGround.image_count > 0
def test_module_settings(mpstate): '''try changing module settings via MAVProxy CLI''' loadedModule = camera_air.init(mpstate) parms = "/data/ChameleonArecort/params.json" loadedModule.cmd_camera(["set", "camparms", parms]) assert loadedModule.camera_settings.camparms == parms image = str(os.path.join(os.getcwd(), 'tests', 'testdata', 'raw2016111223465120Z.png')) loadedModule.cmd_camera(["set", "imagefile", image]) assert loadedModule.camera_settings.imagefile == image loadedModule.cmd_camera(["set", "gcs_address", "127.0.0.1:14550:45, 127.0.0.1:1234:6000"]) assert loadedModule.camera_settings.gcs_address == "127.0.0.1:14550:45, 127.0.0.1:1234:6000" loadedModule.unload()
def test_camera_image_request(mpstate, image_file): '''image request via the block_xmit''' loadedModule = camera_air.init(mpstate) parms = "/data/ChameleonArecort/params.json" loadedModule.cmd_camera(["set", "camparms", parms]) loadedModule.cmd_camera(["set", "imagefile", image_file]) loadedModule.cmd_camera(["set", "minscore", "0"]) loadedModule.cmd_camera(["set", "gcs_address", "127.0.0.1:14550:14560:2000000"]) filename = os.path.join(os.getcwd(), 'tests', 'testdata', 'raw2016111223465160Z.png') pkt = cuav_command.ImageRequest(cuav_util.parse_frame_time(filename), True) buf = cPickle.dumps(pkt, cPickle.HIGHEST_PROTOCOL) capture_thread = sim_camera() time.sleep(0.05) loadedModule.cmd_camera(["start"]) time.sleep(0.8) loadedModule.cmd_camera(["status"]) #don't load the block xmit until afterwards b1 = block_xmit.BlockSender(dest_ip='127.0.0.1', port = 14550, dest_port = 14560) b1.tick() b1.send(buf) #b1.tick() time.sleep(0.1) blkret = [] while True: try: b1.tick() blk = cPickle.loads(str(b1.recv(0.01, True))) #only want paricular packets - discard all the heartbeats, etc if isinstance(blk, cuav_command.ImagePacket): blkret.append(blk) break time.sleep(0.05) except cPickle.UnpicklingError: continue loadedModule.cmd_camera(["stop"]) loadedModule.unload() capture_thread.join(1.0) assert len(blkret) == 1 #not sure if the last or 2nd last packed will contain the image - depends on the exact thread timing assert isinstance(blkret[0], cuav_command.ImagePacket) assert blkret[0].jpeg is not None
def test_camera_start(mpstate, image_file): '''put a few images through the module and check they come out via the block xmit''' loadedModule = camera_air.init(mpstate) parms = "/data/ChameleonArecort/params.json" loadedModule.cmd_camera(["set", "camparms", parms]) loadedModule.cmd_camera(["set", "imagefile", image_file]) loadedModule.cmd_camera(["set", "minscore", "0"]) loadedModule.cmd_camera(["set", "gcs_address", "127.0.0.1:14550:14560:9000, 127.0.0.1:14650:14660:15000"]) #Set up the ground side recievers b1 = block_xmit.BlockSender(dest_ip='127.0.0.1', port = 14550, dest_port = 14560) b2 = block_xmit.BlockSender(dest_ip='127.0.0.1', port = 14650, dest_port = 14660) blk1 = None blk2 = None b2.tick() b1.tick() capture_thread = sim_camera() time.sleep(0.05) loadedModule.cmd_camera(["start"]) time.sleep(0.8) loadedModule.cmd_camera(["status"]) loadedModule.cmd_camera(["queue"]) #get the sent data b2.tick() b1.tick() blk1 = cPickle.loads(str(b1.recv(0.1))) blk2 = cPickle.loads(str(b2.recv(0.1))) time.sleep(0.05) loadedModule.cmd_camera(["status"]) loadedModule.cmd_camera(["stop"]) loadedModule.unload() capture_thread.join(1.0) assert loadedModule.capture_count == 3 assert loadedModule.scan_count == 3 assert loadedModule.region_count > 0 assert isinstance(blk1, cuav_command.StampedCommand) assert isinstance(blk2, cuav_command.StampedCommand) assert abs(blk1.timestamp - blk2.timestamp) < 0.01
def test_camera_thumbs(mpstate, image_file): '''Send some thumbnails to the view via the camera_air module''' loadedModuleAir = camera_air.init(mpstate) parms = "/data/ChameleonArecort/params.json" loadedModuleAir.cmd_camera(["set", "camparms", parms]) loadedModuleAir.cmd_camera(["set", "imagefile", image_file]) loadedModuleAir.cmd_camera(["set", "minscore", "0"]) loadedModuleAir.cmd_camera([ "set", "gcs_address", "127.0.0.1:14000:15000:45, 127.0.0.1:14500:15500:60000" ]) loadedModuleGround = camera_ground.init(mpstate) loadedModuleGround.cmd_camera(["set", "camparms", parms]) loadedModuleGround.cmd_camera([ "set", "air_address", "127.0.0.1:15000:14000:45, 127.0.0.1:15500:14500:60000" ]) loadedModuleGround.cmd_camera(["view"]) #start the image stream and modules capture_thread = sim_camera() time.sleep(0.05) loadedModuleAir.cmd_camera(["start"]) time.sleep(2.0) #and request a fullsize image filename = os.path.join(os.getcwd(), 'tests', 'testdata', 'raw2016111223465160Z.png') frame_time = cuav_util.parse_frame_time(filename) loadedModuleGround.mosaic.image_requests[frame_time] = 'fetchImageFull' time.sleep(2.0) loadedModuleAir.unload() loadedModuleGround.unload() capture_thread.join(1.0) #and do the asserts assert loadedModuleAir.region_count > 0 assert loadedModuleGround.region_count > 0 assert loadedModuleGround.thumb_count > 0 assert loadedModuleGround.image_count > 0
def test_camera_airstart(mpstate, image_file): '''test the airstart - that cauv auto starts after vehicle has taken off''' loadedModule = camera_air.init(mpstate) parms = "/data/ChameleonArecort/params.json" loadedModule.cmd_camera(["set", "camparms", parms]) loadedModule.cmd_camera(["set", "imagefile", image_file]) loadedModule.cmd_camera(["set", "minspeed", "20"]) loadedModule.cmd_camera(["set", "gcs_address", "127.0.0.1:14550:14560:2000000"]) #load the other side of the xmit link b1 = block_xmit.BlockSender(dest_ip='127.0.0.1', port = 14550, dest_port = 14560) blkret = [] b1.tick() loadedModule.cmd_camera(["airstart"]) #send a mavlink packet of VFR_HUD that the airspeed is above the threshold #See "common.py" in pymavlink dialects for message classes msg = common.MAVLink_vfr_hud_message(airspeed=21, groundspeed=15, heading=90, throttle=80, alt=30, climb=3.2) msg._timestamp = time.time() loadedModule.mavlink_packet(msg) #get the packets time.sleep(0.1) while True: try: b1.tick() blk = cPickle.loads(str(b1.recv(0.01, True))) if isinstance(blk, cuav_command.CommandResponse) or isinstance(blk, cuav_command.CameraMessage): blkret.append(blk) time.sleep(0.05) except cPickle.UnpicklingError: break loadedModule.cmd_camera(["stop"]) loadedModule.unload() assert len(blkret) == 2 assert blkret[0].msg == "cuav airstart ready" assert blkret[1].msg == "Started cuav running"
def test_camera_command(mpstate, image_file): '''send some commands via the block_xmit''' loadedModule = camera_air.init(mpstate) parms = "/data/ChameleonArecort/params.json" loadedModule.cmd_camera(["set", "camparms", parms]) loadedModule.cmd_camera(["set", "imagefile", image_file]) loadedModule.cmd_camera(["set", "minscore", "0"]) loadedModule.cmd_camera(["set", "gcs_address", "127.0.0.1:14550:14560:9000"]) pkt = cuav_command.ChangeCameraSetting("minscore", 50) b1 = block_xmit.BlockSender(dest_ip='127.0.0.1', port = 14550, dest_port = 14560) buf = cPickle.dumps(pkt, cPickle.HIGHEST_PROTOCOL) loadedModule.cmd_camera(["start"]) time.sleep(0.1) b1.tick() b1.send(buf) b1.tick() time.sleep(0.1) loadedModule.cmd_camera(["stop"]) loadedModule.unload() assert loadedModule.camera_settings.minscore == 50
def test_load_module(mpstate): '''Just initialise the module''' loadedModule = camera_air.init(mpstate) loadedModule.unload()