Esempio n. 1
0
 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)
Esempio n. 2
0
 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)
Esempio n. 3
0
 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()
Esempio n. 4
0
 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')
Esempio n. 5
0
    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)
Esempio n. 7
0
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")
Esempio n. 8
0
    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
Esempio n. 9
0
    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
Esempio n. 10
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")
Esempio n. 11
0
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"
Esempio n. 12
0
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"
Esempio n. 13
0
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')
Esempio n. 14
0
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')
Esempio n. 15
0
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))
Esempio n. 16
0
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)
Esempio n. 17
0
def write_param(master, name, value, param_type) -> bool:
    mavparm_handler = mavparm.MAVParmDict()
    return mavparm_handler.mavset(master, name, value, param_type)
Esempio n. 18
0
def diff(filepath1, filepath2):
    handler1 = mavparm.MAVParmDict()
    if filepath2 is not None:
        handler1 = load_file(filepath)
    mavparm_handler.diff(filepath)
Esempio n. 19
0
def load_file(filepath):
    mavparm_handler = mavparm.MAVParmDict()
    mavparm_handler.load(filepath)
    return dict(mavparm_handler)
Esempio n. 20
0
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)
Esempio n. 21
0
def setThrottle(master, throttle=100):
    params = mavparm.MAVParmDict()
    params.mavset(master, b'TRIM_THROTTLE', throttle)