Skip to content

Instantly share code, notes, and snippets.

@JonasVautherin
Created July 4, 2019 20:09
Show Gist options
  • Save JonasVautherin/66eacd179f7fff45bb09da2b64df2d3e to your computer and use it in GitHub Desktop.
Save JonasVautherin/66eacd179f7fff45bb09da2b64df2d3e to your computer and use it in GitHub Desktop.
A mission example using MAVSDK-Python
#!/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