def test_110(connpath): v = connect(connpath, await_params=True) # NOTE these are *very inappropriate settings* # to make on a real vehicle. They are leveraged # exclusively for simulation. Take heed!!! v.parameters['ARMING_CHECK'] = 0 v.parameters['FS_THR_ENABLE'] = 0 v.parameters['FS_GCS_ENABLE'] = 0 v.parameters['EKF_CHECK_THRESH'] = 0 # Change the vehicle into STABILIZE mode v.mode = VehicleMode("STABILIZE") # NOTE wait crudely for ACK on mode update time.sleep(3) # Define example callback for mode def armed_callback(attribute): armed_callback.called += 1 armed_callback.called = 0 # When the same (event, callback) pair is passed to add_attribute_observer, # only one instance of the observer callback should be added. v.add_attribute_observer('armed', armed_callback) v.add_attribute_observer('armed', armed_callback) v.add_attribute_observer('armed', armed_callback) v.add_attribute_observer('armed', armed_callback) v.add_attribute_observer('armed', armed_callback) # Disarm and see update. v.armed = False v.flush() # Wait for ACK. time.sleep(3) # Ensure the callback was called. assert armed_callback.called > 0, "Callback should have been called." # Rmove all observers. The first call should remove all listeners # we've added; the second call should be ignored and not throw. # NOTE: We test if armed_callback were treating adding each additional callback # and remove_attribute_observer were removing them one at a time; in this # case, there would be three callbacks still attached. v.remove_attribute_observer('armed', armed_callback) v.remove_attribute_observer('armed', armed_callback) callcount = armed_callback.called # Re-arm and see update. v.armed = True v.flush() # Wait for ack time.sleep(3) # Ensure the callback was called zero times. assert_equals(armed_callback.called, callcount, "Callback should not have been called once removed.")
def test_timeout(connpath): v = connect(connpath, await_params=True) value = v.parameters['THR_MIN'] assert_equals(type(value), float) start = current_milli_time() v.parameters['THR_MIN'] = value + 10 end = current_milli_time() newvalue = v.parameters['THR_MIN'] assert_equals(type(newvalue), float) assert_equals(newvalue, value + 10)
def test_mode(connpath): v = connect(connpath, await_params=True) # Ensure Mode is an instance of VehicleMode assert isinstance(v.mode, VehicleMode)
def test_parameter(connpath): v = connect(connpath, await_params=True) # Perform a simple parameter check assert_equals(type(v.parameters['THR_MIN']), float)
DURATION=5 def goto(lat, lon, alt=30): print 'GOING TO', (lat, lon) for i in range(0, 5): time.sleep(.1) # Set mode to guided - this is optional as the goto method will change the mode if needed. vehicle.mode = VehicleMode("GUIDED") # Set the target location and then call flush() a_location = Location(lat, lon, alt, is_relative=True) vehicle.commands.goto(a_location) vehicle.flush() print 'connecting...' vehicle = connect('udpout:10.1.1.10:14560') print 'connected to drone.' def location_msg(): return {"lat": vehicle.location.lat, "lon": vehicle.location.lon} app = Flask(__name__) @app.route("/") def home(): return render_template('index.html') listeners_location = [] from threading import Thread import time
from droneapi import connect from droneapi.lib import VehicleMode from pymavlink import mavutil import time # Connect to UDP endpoint vehicle = connect("udpin:0.0.0.0:14550") # Wait for parameters to accumulate. time.sleep(5) # Get all vehicle attributes (state) print "\nGet all vehicle attribute values:" print " Location: %s" % vehicle.location print " Attitude: %s" % vehicle.attitude print " Velocity: %s" % vehicle.velocity print " GPS: %s" % vehicle.gps_0 print " Groundspeed: %s" % vehicle.groundspeed print " Airspeed: %s" % vehicle.airspeed print " Mount status: %s" % vehicle.mount_status print " Battery: %s" % vehicle.battery print " Rangefinder: %s" % vehicle.rangefinder print " Rangefinder distance: %s" % vehicle.rangefinder.distance print " Rangefinder voltage: %s" % vehicle.rangefinder.voltage print " Mode: %s" % vehicle.mode.name # settable print " Armed: %s" % vehicle.armed # settable
from droneapi import connect from droneapi.lib import VehicleMode from pymavlink import mavutil import time #Set up option parsing to get connection string import argparse parser = argparse.ArgumentParser(description='Print out vehicle state information. Connects to SITL on local PC by default.') parser.add_argument('--connect', default='127.0.0.1:14550', help="vehicle connection target. Default '127.0.0.1:14550'") args = parser.parse_args() # Connect to the Vehicle print 'Connecting to vehicle on: %s' % args.connect vehicle = connect(args.connect, await_params=True) # Wait for attribtues to accumulate. time.sleep(5) # Get all vehicle attributes (state) print "\nGet all vehicle attribute values:" print " Location: %s" % vehicle.location print " Attitude: %s" % vehicle.attitude print " Velocity: %s" % vehicle.velocity print " GPS: %s" % vehicle.gps_0 print " Groundspeed: %s" % vehicle.groundspeed print " Airspeed: %s" % vehicle.airspeed print " Mount status: %s" % vehicle.mount_status print " Battery: %s" % vehicle.battery print " Rangefinder: %s" % vehicle.rangefinder
from droneapi import connect from droneapi.lib import VehicleMode from pymavlink import mavutil import time # Connect to UDP endpoint vehicle = connect('udpin:0.0.0.0:14550') # Wait for parameters to accumulate. time.sleep(5) # Get all vehicle attributes (state) print "\nGet all vehicle attribute values:" print " Location: %s" % vehicle.location print " Attitude: %s" % vehicle.attitude print " Velocity: %s" % vehicle.velocity print " GPS: %s" % vehicle.gps_0 print " Groundspeed: %s" % vehicle.groundspeed print " Airspeed: %s" % vehicle.airspeed print " Mount status: %s" % vehicle.mount_status print " Battery: %s" % vehicle.battery print " Rangefinder: %s" % vehicle.rangefinder print " Rangefinder distance: %s" % vehicle.rangefinder.distance print " Rangefinder voltage: %s" % vehicle.rangefinder.voltage print " Mode: %s" % vehicle.mode.name # settable print " Armed: %s" % vehicle.armed # settable
def test_goto(connpath): vehicle = connect(connpath, await_params=True) # NOTE these are *very inappropriate settings* # to make on a real vehicle. They are leveraged # exclusively for simulation. Take heed!!! vehicle.parameters['ARMING_CHECK'] = 0 vehicle.parameters['FS_THR_ENABLE'] = 0 vehicle.parameters['FS_GCS_ENABLE'] = 0 vehicle.parameters['EKF_CHECK_THRESH'] = 0 def arm_and_takeoff(aTargetAltitude): """ Arms vehicle and fly to aTargetAltitude. """ # print "Basic pre-arm checks" # Don't let the user try to fly autopilot is booting if vehicle.mode.name == "INITIALISING": # print "Waiting for vehicle to initialise" time.sleep(1) while vehicle.gps_0.fix_type < 2: # print "Waiting for GPS...:", vehicle.gps_0.fix_type time.sleep(1) # print "Arming motors" # Copter should arm in GUIDED mode vehicle.mode = VehicleMode("GUIDED") vehicle.flush() i = 60 while vehicle.mode.name != 'GUIDED' and i > 0: # print " Waiting for guided %s seconds..." % (i,) time.sleep(1) i = i - 1 vehicle.armed = True vehicle.flush() i = 60 while not vehicle.armed and vehicle.mode.name == 'GUIDED' and i > 0: # print " Waiting for arming %s seconds..." % (i,) time.sleep(1) i = i - 1 # Failure will result in arming but immediately landing assert vehicle.armed assert_equals(vehicle.mode.name, 'GUIDED') # print "Taking off!" vehicle.commands.takeoff(aTargetAltitude) # Take off to target altitude vehicle.flush() # Wait until the vehicle reaches a safe height before # processing the goto (otherwise the command after # Vehicle.commands.takeoff will execute immediately). while True: # print " Altitude: ", vehicle.location.alt # Test for altitude just below target, in case of undershoot. if vehicle.location.alt >= aTargetAltitude * 0.95: # print "Reached target altitude" break assert_equals(vehicle.mode.name, 'GUIDED') time.sleep(1) arm_and_takeoff(10) # print "Going to first point..." point1 = Location(-35.361354, 149.165218, 20, is_relative=True) vehicle.commands.goto(point1) vehicle.flush() # sleep so we can see the change in map time.sleep(3) # print "Going to second point..." point2 = Location(-35.363244, 149.168801, 20, is_relative=True) vehicle.commands.goto(point2) vehicle.flush() # sleep so we can see the change in map time.sleep(3) # print "Returning to Launch" vehicle.mode = VehicleMode("RTL") vehicle.flush()
def goto(lat, lon, alt=30): print 'GOING TO', (lat, lon) for i in range(0, 5): time.sleep(.1) # Set mode to guided - this is optional as the goto method will change the mode if needed. vehicle.mode = VehicleMode("GUIDED") # Set the target location and then call flush() a_location = Location(lat, lon, alt, is_relative=True) vehicle.commands.goto(a_location) vehicle.flush() print 'connecting...' vehicle = connect('udpout:10.1.1.10:14560') print 'connected to drone.' def location_msg(): return {"lat": vehicle.location.lat, "lon": vehicle.location.lon} app = Flask(__name__) @app.route("/") def home(): return render_template('index.html')