def __init__(self, mpstate): from pymavlink import mavparm super(TrackerModule, self).__init__(mpstate, "tracker", "antenna tracker control module") self.connection = None self.tracker_param = mavparm.MAVParmDict() sysid = 2 self.pstate = ParamState(self.tracker_param, self.logdir, self.vehicle_name, 'tracker.parm', mpstate, sysid) self.tracker_settings = mp_settings.MPSettings([ ('port', str, "/dev/ttyUSB0"), ('baudrate', int, 57600), ('debug', int, 0) ]) self.add_command( 'tracker', self.cmd_tracker, "antenna tracker control module", [ '<start|arm|disarm|level|mode|position|calpress|mode>', 'set (TRACKERSETTING)', 'param <set|show|fetch|help> (TRACKERPARAMETER)', 'param (TRACKERSETTING)' ]) self.add_completion_function('(TRACKERSETTING)', self.tracker_settings.completion) self.add_completion_function('(TRACKERPARAMETER)', self.complete_parameter)
def __init__(self, *args, **kwargs): """Constructor, set up some data that is reused in many tests""" self.parms = mavparm.MAVParmDict() self.parms['AFS_ACTION'] = 42 self.parms['PARAM1'] = 34.45 self.parms['PARAM2'] = 0 self.parms['PARAM3'] = -13.4 super(MAVParmDictTest, self).__init__(*args, **kwargs)
def __init__(self): self.public_modules = {} self.command_map = {} self.completions = {} self.completion_functions = {} self.map = None self.mav_param = mavparm.MAVParmDict() self.functions = mock.Mock() self.status = mock.Mock()
def __init__(self): self.public_modules = {} self.command_map = {} self.completions = {} self.completion_functions = {} self.map = None self.mav_param = mavparm.MAVParmDict() self.functions = mock.Mock() self.status = MPStatusMock() self.status.logdir = os.path.join(os.getcwd(), 'gnd')
def test_saveload(self): """Test the saving and loading to file""" self.parms.save('prms.txt') assert os.path.isfile('prms.txt') newparms = mavparm.MAVParmDict() newparms.load('prms.txt') os.remove('prms.txt') assert newparms['AFS_ACTION'] == self.parms['AFS_ACTION'] assert newparms['PARAM3'] == self.parms['PARAM3']
def ftp_load(self, filename, param_wildcard, master): '''load parameters with ftp''' ftp = self.mpstate.module('ftp') if ftp is None: print("Need ftp module") return newparm = mavparm.MAVParmDict() newparm.load(filename, param_wildcard, check=False) fh = SIO() for k in sorted(newparm.keys()): v = newparm.get(k) oldv = self.mav_param.get(k, None) if oldv is not None and abs(oldv - v) <= newparm.mindelta: # not changed newparm.pop(k) count = len(newparm.keys()) if count == 0: print("No parameter changes") return fh.write(struct.pack("<HHH", 0x671b, count, count)) last_param = "" for k in sorted(newparm.keys()): v = newparm.get(k) vtype = self.best_type(v) common_len = self.str_common_len(last_param, k) b1 = vtype b2 = common_len | ((len(k) - (common_len + 1)) << 4) fh.write(struct.pack("<BB", b1, b2)) fh.write(k[common_len:].encode("UTF-8")) if vtype == 1: # int8 fh.write(struct.pack("<b", int(v))) if vtype == 2: # int16 fh.write(struct.pack("<h", int(v))) if vtype == 3: # int32 fh.write(struct.pack("<i", int(v))) if vtype == 4: # float fh.write(struct.pack("<f", v)) last_param = k # re-pack with full file length in total_params file_len = fh.tell() fh.seek(0) fh.write(struct.pack("<HHH", 0x671b, count, file_len)) fh.seek(0) self.ftp_send_param = newparm print("Sending %u params" % count) ftp.cmd_put(["-", "@PARAM/param.pck"], fh=fh, callback=self.ftp_upload_callback, progress_callback=self.ftp_upload_progress)
def networkingProcess(server, port, manager, debug): # Connect to server print("Connecting to ", server, ":", port, sep="") # Connect to MAVProxy ground station master = mavutil.mavlink_connection(server + ":" + str(port)) # Wait for a heartbeat so we know the target system IDs print("Waiting for heartbeat") master.wait_heartbeat() # Wait till armed print("Waiting for motors to be armed") master.motors_armed_wait() # Set that we want to receive data print("Requesting data") rate = 25 # Hz master.mav.request_data_stream_send( master.target_system, master.target_component, mavutil.mavlink.MAV_DATA_STREAM_ALL, rate, 1) # Manage waypoints, so we can get the home point wp = mavwp.MAVWPLoader() # # Set glider settings # # "Glider Pilots: Set this parameter to 2.0 (The glider will adjust its # pitch angle to maintain airspeed, ignoring changes in height)." # # See: http://ardupilot.org/plane/docs/tecs-total-energy-control-system-for-speed-height-tuning-guide.html # params = mavparm.MAVParmDict() params.mavset(master, b'TECS_SPDWEIGHT', 2.0) params.mavset(master, b'WP_LOITER_RAD', turnRadius) # Request the home point, so we can roughly know how high above our # starting point we are master.waypoint_request_send(0) # Start send/recieve threads receive = NetworkingThreadReceive(master, manager, wp, debug) send = NetworkingThreadSend(master, manager, wp, debug) receive.start() send.start() receive.join() send.join() print("Exiting networkingProcess")
def add_new_target_system(self, sysid): '''handle a new target_system''' if sysid in self.pstate: return if not sysid in self.mpstate.mav_param_by_sysid: self.mpstate.mav_param_by_sysid[sysid] = mavparm.MAVParmDict() self.new_sysid_timestamp = time.time() fname = 'mav.parm' if sysid not in [(0,0),(1,1),(1,0)]: fname = 'mav_%u_%u.parm' % (sysid[0], sysid[1]) self.pstate[sysid] = ParamState(self.mpstate.mav_param_by_sysid[sysid], self.logdir, self.vehicle_name, fname, self.mpstate, sysid) if self.continue_mode and self.logdir is not None: parmfile = os.path.join(self.logdir, fname) if os.path.exists(parmfile): mpstate.mav_param.load(parmfile) self.pstate[sysid].mav_param_set = set(self.mav_param.keys()) self.pstate[sysid].xml_filepath = self.xml_filepath
def __init__(self, mpstate): from pymavlink import mavparm super(WebServerModule, self).__init__(mpstate, "webserver", "webserver module") self.webserver_param = mavparm.MAVParmDict() logging.basicConfig(filename='example.log', level=logging.DEBUG) if not mpstate.airapi: # Make sure we have the waypoints loaded self.mpstate.public_modules['wp'].fetch() # put server in a dameon so it dies nicely self.server = Urls() serverThread = threading.Thread(target=self.server.start) serverThread.setDaemon(True) serverThread.start() self.in_air = False self.start_flying_time = 0
def battery(): #create param dictionary mav_param = mavparm.MAVParmDict() #get global dronekit vehicle, button, battert MAH,and failsafe readout text global vehicle, battButton, FS_BATT_MAH, bfs #if button text says to activate battery failsafe if battButton.configure('text')[-1] == 'Activate Battery Failsafe': #set battery FS value above current capacity vehicle.parameters['FS_BATT_MAH'] = float(4000) #set readout text bfs = "Active" #set button text battButton.configure(text="Deactivate Battery Failsafe") else: #set battery capacity back to normal vehicle.parameters['FS_BATT_MAH'] = float(FS_BATT_MAH) #set readout bfs = "Inactive" #set button text battButton.configure(text="Activate Battery Failsafe")
def throttle(): #create parameter dictionary mav_param = mavparm.MAVParmDict() #get global dronekit vehiclea, button, current throttle PWM failsafe value, and failsafe readout text global vehicle, thrButton, THR_FS_VAL, tfs #if button says to Activate Throttle Failsafe if thrButton.configure('text')[-1] == 'Activate Throttle Failsafe': #set throttle failsafe vehicle.parameters['THR_FS_VALUE'] = float(2000) #change readout tfs = "Active" #change button text thrButton.configure(text="Deactivate Throttle Failsafe") else: #Set Throttle pwn failsafe value back to normal vehicle.parameters['THR_FS_VALUE'] = float(THR_FS_VAL) #change button text thrButton.configure(text="Activate Throttle Failsafe") #change readout text tfs = "Inactive"
def gcs(): #create param dict mav_param = mavparm.MAVParmDict() #get global dronekit vehicle, button, gcs ID and failsafe readout text global vehicle, GCSButton, SYSID_MYGCS, gcsfs #if button says Disconnect GCS if GCSButton.configure('text')[-1] == 'Disconnect GCS': #set GCS ID to something unrecognizable to the vehicle vehicle.parameters['SYSID_MYGCS'] = float(0) #change button text GCSButton.configure(text="Reconnect GCS") #change readout gcsfs = "Active" else: #set GCS id back vehicle.parameters['SYSID_MYGCS'] = float(SYSID_MYGCS) #change button text GCSButton.configure(text="Disconnect GCS") #change readout gcsfs = "Inactive"
def rc(): #get global button and failsafe readout text global rcButton, rfs #create param dictionary mav_param = mavparm.MAVParmDict() #if button text says Disable RC if rcButton.configure('text')[-1] == 'Disable RC': #Send param to disable RC vehicle.parameters['SIM_RC_FAIL'] = float(1) #change readout text rfs = "Active" #change button text rcButton.configure(text='Enable RC') else: #reactivate RC vehicle.parameters['SIM_RC_FAIL'] = float(0) #change readout text rfs = "Inactive" #change button text rcButton.configure(text='Disable RC')
def gps(): #get global button and failsafe readout text global gpsButton, gpsfs #create param dictionary mav_param = mavparm.MAVParmDict() # if button's text is to Disable GPS if gpsButton.configure('text')[-1] == 'Disable GPS': #set SITL to disable gps vehicle.parameters['SIM_GPS_DISABLE'] = float(1) #change button text gpsButton.configure(text='Enable GPS') #change readout text gpsfs = "Active" #if text is Enable gps else: #set SITL to enable gps vehicle.parameters['SIM_GPS_DISABLE'] = float(0) #change readout text gpsfs = "Inactive" #change button text gpsButton.configure(text='Disable GPS')
import sys, struct, time, os from curses import ascii from pymavlink import mavparm from pymavlink import mavutil import socket from pymavlink.dialects.v10 import common as mavlink m = mavutil.mavlink_connection('tcp:127.0.0.1:5763', dialect='ardupilotmega', write=True, input=False) print("Waiting for APM heartbeat") msg = m.recv_match(type='HEARTBEAT', blocking=True) print("Heartbeat from APM (system %u, component %u)" % (m.target_system, m.target_system)) mav_param = mavparm.MAVParmDict() mav_param.mavset(m, "SIM_WIND_DIR", float(70)) mav_param.mavset(m, "SIM_WIND_SPD", float(1)) #m.parm_set_send("DIM_WIND_DIR", float(70))
def wind(windSPD, windDIR): #create mavproxy parameter dictionary mav_param = mavparm.MAVParmDict() #set mavproxy parameters over sitl vehicle.parameters['SIM_WIND_DIR'] = float(windDIR) vehicle.parameters['SIM_WIND_SPD'] = float(windSPD)
def write_param(master, name, value, param_type) -> bool: mavparm_handler = mavparm.MAVParmDict() return mavparm_handler.mavset(master, name, value, param_type)
def diff(filepath1, filepath2): handler1 = mavparm.MAVParmDict() if filepath2 is not None: handler1 = load_file(filepath) mavparm_handler.diff(filepath)
def load_file(filepath): mavparm_handler = mavparm.MAVParmDict() mavparm_handler.load(filepath) return dict(mavparm_handler)
parser.add_argument("-t", help="use tabs delimiter between columns for the output", default=False, action='store_true', dest='use_tabs') parser.add_argument("--full-diff", help="include volatile and similar parameters", default=True, action='store_false', dest='use_excludes') parser.add_argument("--hide-only1", help="hide params only in first file", default=False, action='store_true') parser.add_argument("--hide-only2", help="hide params only in second file", default=False, action='store_true') args = parser.parse_args() file1 = args.file1 file2 = args.file2 p1 = mavparm.MAVParmDict() p2 = mavparm.MAVParmDict() p1.load(file2, use_excludes=args.use_excludes) p1.diff(file1, use_excludes=args.use_excludes, use_tabs=args.use_tabs, show_only1=not args.hide_only1, show_only2=not args.hide_only2)
def setThrottle(master, throttle=100): params = mavparm.MAVParmDict() params.mavset(master, b'TRIM_THROTTLE', throttle)