Source code for payloadcomputerdroneprojekt.test.mission_computer.test_land

from payloadcomputerdroneprojekt.mission_computer import MissionComputer
from payloadcomputerdroneprojekt.camera.gazebo_sitl import GazeboCamera
from payloadcomputerdroneprojekt.image_analysis import ImageAnalysis
from payloadcomputerdroneprojekt.communications.helper \
    import rotation_matrix_yaw
from payloadcomputerdroneprojekt.test.image_analysis.helper import FILE_PATH
import numpy as np
import json
import os
import unittest
import asyncio
from random import random


[docs] class image(ImageAnalysis): def __init__(self, config, camera, comms): super().__init__(config, camera, comms)
[docs] async def get_current_offset_closest(self, color, shape, yaw_0=True, indoor=False): cur_pos = await self._comms.get_position_xyz() yaw_cur = cur_pos[5] cur_pos = np.array(cur_pos[:3]) pos = (rotation_matrix_yaw(-yaw_cur) @ cur_pos)[0] * (1+(random()-0.5)/25) yaw_target = -90 await asyncio.sleep(0.5) return [-pos[0], -pos[1]], -pos[2], yaw_target - yaw_cur
[docs] async def mission(): port = "udp://:14540" with open(os.path.join(FILE_PATH, "test_config_2.json")) as f: config = json.load(f) config.setdefault("communications", {})["allowed_arm"] = True computer = MissionComputer( config=config, camera=GazeboCamera, port=port, image_analysis=image) computer.current_mission_plan = { "parameter": { "decision_height": 2 } } await computer._comms.connect() await computer.takeoff({"height": 15}) print("takeoff done") await computer._comms.mov_by_xyz([4, 5.5, 0], 60) print("moved") await asyncio.sleep(2) await computer.land({"shape": "", "color": ""})
[docs] class TestLand(unittest.TestCase):
[docs] def test_land_easy(self): asyncio.run(mission())
if __name__ == "__main__": unittest.main()