Created
July 4, 2019 20:09
-
-
Save JonasVautherin/66eacd179f7fff45bb09da2b64df2d3e to your computer and use it in GitHub Desktop.
A mission example using MAVSDK-Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import asyncio | |
from mavsdk import start_mavlink | |
from mavsdk import connect as mavsdk_connect | |
from mavsdk import (MissionItem) | |
start_mavlink("udp://:14550") | |
drone = mavsdk_connect(host="127.0.0.1") | |
async def run(): | |
mission_items = [] | |
mission_items.append(MissionItem(47.398039859999997, | |
8.5455725400000002, | |
25, | |
10, | |
True, | |
float('nan'), | |
float('nan'), | |
MissionItem.CameraAction.NONE, | |
float('nan'), | |
float('nan'))) | |
mission_items.append(MissionItem(47.398036222362471, | |
8.5450146439425509, | |
25, | |
10, | |
True, | |
float('nan'), | |
float('nan'), | |
MissionItem.CameraAction.NONE, | |
float('nan'), | |
float('nan'))) | |
mission_items.append(MissionItem(47.397825620791885, | |
8.5450092830163271, | |
25, | |
10, | |
True, | |
float('nan'), | |
float('nan'), | |
MissionItem.CameraAction.NONE, | |
float('nan'), | |
float('nan'))) | |
await drone.mission.set_return_to_launch_after_mission(True) | |
print("-- Uploading mission") | |
await drone.mission.upload_mission(mission_items) | |
print("-- Arming") | |
await drone.action.arm() | |
print("-- Starting mission") | |
await drone.mission.start_mission() | |
async def print_mission_progress(): | |
async for mission_progress in drone.mission.mission_progress(): | |
print(f"Mission progress: {mission_progress.current_item_index}/{mission_progress.mission_count}") | |
async def observe_is_in_air(): | |
""" Monitors whether the drone is flying or not and | |
returns after landing """ | |
was_in_air = False | |
async for is_in_air in drone.telemetry.in_air(): | |
if is_in_air: | |
was_in_air = is_in_air | |
if was_in_air and not is_in_air: | |
await asyncio.get_event_loop().shutdown_asyncgens() | |
return | |
async def print_position(): | |
async for position in drone.telemetry.position(): | |
print(position) | |
async def print_ground_speed_ned(): | |
async for ground_speed_ned in drone.telemetry.ground_speed_ned(): | |
print(ground_speed_ned) | |
async def print_gps_info(): | |
async for gps_info in drone.telemetry.gps_info(): | |
print(gps_info) | |
def setup_tasks(): | |
asyncio.ensure_future(run()) | |
asyncio.ensure_future(print_mission_progress()) | |
asyncio.ensure_future(print_position()) | |
asyncio.ensure_future(print_ground_speed_ned()) | |
asyncio.ensure_future(print_gps_info()) | |
if __name__ == "__main__": | |
setup_tasks() | |
asyncio.get_event_loop().run_until_complete(observe_is_in_air()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment