Beispiel #1
0
def main():
    parser = ArgumentParser(description=__doc__)
    parser.add_argument('port', metavar='PORT', nargs='?', default = None,
            help='Mavlink port name: serial: DEVICE[,BAUD], udp: IP:PORT, tcp: tcp:IP:PORT. Eg: \
/dev/ttyUSB0 or 0.0.0.0:14550. Auto-detect serial if not given.')
    parser.add_argument("--baudrate", "-b", dest="baudrate", type=int,
                      help="Mavlink port baud rate (default=115200)", default=115200)
    args = parser.parse_args()


    if args.port == None:
        serial_list = mavutil.auto_detect_serial(preferred_list=['*FTDI*',
            "*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*", '*PX4*', '*FMU*'])

        if len(serial_list) == 0:
            print("Error: no serial connection found")
            return

        if len(serial_list) > 1:
            print('Auto-detected serial ports are:')
            for port in serial_list:
                print(" {:}".format(port))
        print('Using port {:}'.format(serial_list[0]))
        args.port = serial_list[0].device


    print("Connecting to MAVLINK...")
    mav_serialport = MavlinkSerialPort(args.port, args.baudrate, devnum=10)

    mav_serialport.write('\n') # make sure the shell is started

    try:
        while True:
            i, o, e = select.select([sys.stdin], [], [], 0.001)
            if (i):
                data = sys.stdin.readline()

                # Erase stdin output (otherwise we have it twice)
                # FIXME: this assumes a prompt of 5 chars, and does not work in all cases
                CURSOR_UP_ONE = '\x1b[1A'
                CURSOR_RIGHT = '\x1b[5C'
                ERASE_LINE = '\x1b[2K'
                ERASE_END_LINE = '\x1b[K'
                sys.stdout.write(CURSOR_UP_ONE + CURSOR_RIGHT + ERASE_END_LINE)

                # TODO: add a command history?

                #sys.stdout.write(data)
                mav_serialport.write(data)

            data = mav_serialport.read(4096)
            if data and len(data) > 0:
                sys.stdout.write(data)
                sys.stdout.flush()

    except serial.serialutil.SerialException as e:
        print(e)

    except KeyboardInterrupt:
        mav_serialport.close()
Beispiel #2
0
 def cmd_link_ports(self):
     """show available ports"""
     ports = mavutil.auto_detect_serial(
         preferred_list=["*FTDI*", "*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*", "*PX4*", "*FMU*"]
     )
     for p in ports:
         print("%s : %s : %s" % (p.device, p.description, p.hwid))
def main():
    parser = ArgumentParser(description=__doc__)
    parser.add_argument(
        "port",
        metavar="PORT",
        nargs="?",
        default=None,
        help="Mavlink port name: serial: DEVICE[,BAUD], udp: IP:PORT, tcp: tcp:IP:PORT. Eg: \
/dev/ttyUSB0 or 0.0.0.0:14550. Auto-detect serial if not given.",
    )
    parser.add_argument(
        "--baudrate", "-b", dest="baudrate", type=int, help="Mavlink port baud rate (default=115200)", default=115200
    )
    parser.add_argument("--output", "-o", dest="output", default=".", help="output file or directory (default=CWD)")
    args = parser.parse_args()

    if os.path.isdir(args.output):
        filename = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S.ulg")
        filename = os.path.join(args.output, filename)
    else:
        filename = args.output
    print("Output file name: {:}".format(filename))

    if args.port == None:
        serial_list = mavutil.auto_detect_serial(
            preferred_list=["*FTDI*", "*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*", "*PX4*", "*FMU*"]
        )

        if len(serial_list) == 0:
            print("Error: no serial connection found")
            return

        if len(serial_list) > 1:
            print("Auto-detected serial ports are:")
            for port in serial_list:
                print(" {:}".format(port))
        print("Using port {:}".format(serial_list[0]))
        args.port = serial_list[0].device

    print("Connecting to MAVLINK...")
    mav_log_streaming = MavlinkLogStreaming(args.port, args.baudrate, filename)

    try:
        print("Starting log...")
        mav_log_streaming.start_log()
        mav_log_streaming.read_messages()

        print("Stopping log")
        mav_log_streaming.stop_log()

    except KeyboardInterrupt:
        print("Stopping log")
        mav_log_streaming.stop_log()
Beispiel #4
0
 def get_serial():
     ret = None
     serial_list = mavutil.auto_detect_serial(
         preferred_list=[
             '*FTDI*',
             '*Arduino_Mega_2560*',
             '*3D_Robotics*',
             '*USB_to_UART*',
             '*USB to UART*',
             '*PX4*',
             '*FMU*',
             '*串行设备*',
         ]
     )
     # print(dir(serial_list[0]))
     # print(serial_list[0].description)
     if len(serial_list) > 0:
         ret = serial_list[0].device
     return ret
def detect_pixhawk():
    '''
    Detect the serial port where pixhawk is connected automatically. Adapted from Mavproxy code.
    '''
    serial_list = mavutil.auto_detect_serial(preferred_list=['*FTDI*',"*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*"]) 
    if len(serial_list) == 1: 
        return serial_list[0].device
    else: 
        print(''' 
Please choose a MAVLink master with --master 
For example: 
        --master=com14 
        --master=/dev/ttyUSB0 
        --master=127.0.0.1:14550 
     
Auto-detected serial ports are: 
''') 
        for port in serial_list: 
            print("%s" % port) 
            sys.exit(1)
Beispiel #6
0
 def cmd_link_ports(self):
     '''show available ports'''
     ports = mavutil.auto_detect_serial(preferred_list=preferred_ports)
     for p in ports:
         print("%s : %s : %s" % (p.device, p.description, p.hwid))
Beispiel #7
0
 def complete_serial_ports(self, text):
     '''return list of serial ports'''
     ports = mavutil.auto_detect_serial(preferred_list=preferred_ports)
     return [ p.device for p in ports ]
Beispiel #8
0
def main():
    parser = ArgumentParser(description=__doc__)
    parser.add_argument('port', metavar='PORT', nargs='?', default = None,
            help='Mavlink port name: serial: DEVICE[,BAUD], udp: IP:PORT, tcp: tcp:IP:PORT. Eg: \
/dev/ttyUSB0 or 0.0.0.0:14550. Auto-detect serial if not given.')
    parser.add_argument("--baudrate", "-b", dest="baudrate", type=int,
                      help="Mavlink port baud rate (default=57600)", default=57600)
    args = parser.parse_args()


    if args.port == None:
        if sys.platform == "darwin":
            args.port = "/dev/tty.usbmodem1"
        else:
            serial_list = mavutil.auto_detect_serial(preferred_list=['*FTDI*',
                "*STMicroelectronics Virtual COM Port*", "*3D_Robotics*", "*USB_to_UART*", '*PX4*', '*FMU*', "*Gumstix*"])

            if len(serial_list) == 0:
                print("Error: no serial connection found")
                return

            if len(serial_list) > 1:
                print('Auto-detected serial ports are:')
                for port in serial_list:
                    print(" {:}".format(port))
            print('Using port {:}'.format(serial_list[0]))
            args.port = serial_list[0].device


    print("Connecting to MAVLINK...")
    mav_serialport = MavlinkSerialPort(args.port, args.baudrate, devnum=10)

    mav_serialport.write('\n') # make sure the shell is started
    _run_loop = True
    # set_input_nonblocking()
    def loop_recv():
        while _run_loop:
            data = mav_serialport.read(4096)
            if data and len(data) > 0:
                sys.stdout.write(data)
                sys.stdout.flush()


    thread1 = Thread(target=loop_recv)
    thread1.start()

    # setup the console, so we can read one char at a time
    fd_in = sys.stdin.fileno()
    # old_attr = termios.tcgetattr(fd_in)
    # new_attr = termios.tcgetattr(fd_in)
    # new_attr[3] = new_attr[3] & ~termios.ECHO # lflags
    # new_attr[3] = new_attr[3] & ~termios.ICANON
    
    try:
        # termios.tcsetattr(fd_in, termios.TCSANOW, new_attr)
        cur_line = ''
        command_history = []
        cur_history_index = 0

        def erase_last_n_chars(N):
            if N == 0: return
            CURSOR_BACK_N = '\x1b['+str(N)+'D'
            ERASE_END_LINE = '\x1b[K'
            sys.stdout.write(CURSOR_BACK_N + ERASE_END_LINE)

        next_heartbeat_time = timer()

        while True:
            while True:
                # i, o, e = select.select([sys.stdin], [], [], 0)
                # rr, rw, er = select.select([sock, sys.stdin], [], [], 0.1)
                # if not i: break
                # if  sys.stdin.isatty(): 
                #     break   
                # ch = sys.stdin.read(1)
                ch = msvcrt.getch()  
                # provide a simple shell with command history
                # if ch == '\n':
                # if ch == '\r\n':
                # if ch == '\r' or ch == '\n':
                if ch == '\r':    
                    if len(cur_line) > 0:
                        # erase current text (mavlink shell will echo it as well)
                        erase_last_n_chars(len(cur_line))

                        # add to history
                        if len(command_history) == 0 or command_history[-1] != cur_line:
                            command_history.append(cur_line)
                            if len(command_history) > 50:
                                del command_history[0]
                        cur_history_index = len(command_history)
                    mav_serialport.write(cur_line+'\n')
                    cur_line = ''
                elif ord(ch) == 127: # backslash
                    if len(cur_line) > 0:
                        erase_last_n_chars(1)
                        cur_line = cur_line[:-1]
                        sys.stdout.write(ch)
                # elif ord(ch) == 27:
                elif ch == '\x00':
                    # ch = sys.stdin.read(1) # skip one
                    ch = msvcrt.getch() 
                    if ch == 'H': # arrow up
                        if cur_history_index > 0:
                            cur_history_index -= 1
                    elif ch == 'P': # arrow down
                        if cur_history_index < len(command_history):
                            cur_history_index += 1
                    elif ch == 'O':
                        _run_loop = False
                        sys.exit(0)
                    # TODO: else: support line editing

                    erase_last_n_chars(len(cur_line))
                    if cur_history_index == len(command_history):
                        cur_line = ''
                    else:
                        cur_line = command_history[cur_history_index]
                    sys.stdout.write(cur_line)

                elif ord(ch) > 3:
                    if ch != '\r' and ch != '\n':
                        cur_line += ch
                        sys.stdout.write(ch)
                sys.stdout.flush()



            # handle heartbeat sending
            heartbeat_time = timer()
            if heartbeat_time > next_heartbeat_time:
                mav_serialport.mav.mav.heartbeat_send(mavutil.mavlink.MAV_TYPE_GCS,
                        mavutil.mavlink.MAV_AUTOPILOT_GENERIC, 0, 0, 0)
                next_heartbeat_time = heartbeat_time + 1

    except serial.serialutil.SerialException as e:
        print(e)
        sys.exit()

    except KeyboardInterrupt:
        mav_serialport.close()

    finally:
        # termios.tcsetattr(fd_in, termios.TCSADRAIN, old_attr)
        pass
Beispiel #9
0
 def complete_serial_ports(self, text):
     '''return list of serial ports'''
     ports = mavutil.auto_detect_serial(preferred_list=['*FTDI*',"*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*", '*PX4*', '*FMU*'])
     return [ p.device for p in ports ]
 def complete_serial_ports(self, text):
     '''return list of serial ports'''
     ports = mavutil.auto_detect_serial(preferred_list=['*FTDI*',"*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*", '*PX4*', '*FMU*'])
     return [ p.device for p in ports ]
Beispiel #11
0
    from pymavlink import mavutil, mavparm
    mavutil.set_dialect(opts.dialect)

    # global mavproxy state
    mpstate = MPState()
    mpstate.status.exit = False
    mpstate.command_map = command_map
    mpstate.continue_mode = opts.continue_mode

    if opts.speech:
        # start the speech-dispatcher early, so it doesn't inherit any ports from
        # modules/mavutil
        load_module('speech')

    if not opts.master:
        serial_list = mavutil.auto_detect_serial(preferred_list=['*FTDI*',"*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*"])
        if len(serial_list) == 1:
            opts.master = [serial_list[0].device]
        else:
            print('''
Please choose a MAVLink master with --master
For example:
    --master=com14
    --master=/dev/ttyUSB0
    --master=127.0.0.1:14550

Auto-detected serial ports are:
''')
            for port in serial_list:
                print("%s" % port)
            sys.exit(1)
Beispiel #12
0
    # global mavproxy state
    mpstate = MPState()
    mpstate.status.exit = False
    mpstate.command_map = command_map
    mpstate.continue_mode = opts.continue_mode
    # queues for logging
    mpstate.logqueue = Queue.Queue()
    mpstate.logqueue_raw = Queue.Queue()


    if opts.speech:
        # start the speech-dispatcher early, so it doesn't inherit any ports from
        # modules/mavutil
        load_module('speech')

    serial_list = mavutil.auto_detect_serial(preferred_list=preferred_ports)
    if not opts.master:
        print('Auto-detected serial ports are:')
        for port in serial_list:
              print("%s" % port)

    # container for status information
    mpstate.settings.target_system = opts.TARGET_SYSTEM
    mpstate.settings.target_component = opts.TARGET_COMPONENT

    mpstate.mav_master = []

    mpstate.rl = rline.rline("MAV> ", mpstate)

    def quit_handler(signum = None, frame = None):
        #print('Signal handler called with signal', signum)
Beispiel #13
0
 def cmd_link_ports(self):
     '''show available ports'''
     ports = mavutil.auto_detect_serial(preferred_list=preferred_ports)
     for p in ports:
         print("%s : %s : %s" % (p.device, p.description, p.hwid))
def initMAVProxy():
    from optparse import OptionParser
    parser = OptionParser("mavproxy.py [options]")

    parser.add_option("--master", dest="master", action='append',
                      metavar="DEVICE[,BAUD]", help="MAVLink master port and optional baud rate",
                      default=[])
    parser.add_option("--out", dest="output", action='append',
                      metavar="DEVICE[,BAUD]", help="MAVLink output port and optional baud rate",
                      default=[])
    parser.add_option("--baudrate", dest="baudrate", type='int',
                      help="default serial baud rate", default=115200)
    parser.add_option("--sitl", dest="sitl",  default=None, help="SITL output port")
    parser.add_option("--streamrate",dest="streamrate", default=4, type='int',
                      help="MAVLink stream rate")
    parser.add_option("--source-system", dest='SOURCE_SYSTEM', type='int',
                      default=255, help='MAVLink source system for this GCS')
    parser.add_option("--target-system", dest='TARGET_SYSTEM', type='int',
                      default=1, help='MAVLink target master system')
    parser.add_option("--target-component", dest='TARGET_COMPONENT', type='int',
                      default=1, help='MAVLink target master component')
    parser.add_option("--logfile", dest="logfile", help="MAVLink master logfile",
                      default='mav.tlog')
    parser.add_option("-a", "--append-log", dest="append_log", help="Append to log files",
                      action='store_true', default=False)
    parser.add_option("--quadcopter", dest="quadcopter", help="use quadcopter controls",
                      action='store_true', default=False)
    parser.add_option("--setup", dest="setup", help="start in setup mode",
                      action='store_true', default=False)
    parser.add_option("--nodtr", dest="nodtr", help="disable DTR drop on close",
                      action='store_true', default=False)
    parser.add_option("--show-errors", dest="show_errors", help="show MAVLink error packets",
                      action='store_true', default=False)
    parser.add_option("--speech", dest="speech", help="use text to speach",
                      action='store_true', default=False)
    parser.add_option("--num-cells", dest="num_cells", help="number of LiPo battery cells",
                      type='int', default=0)
    parser.add_option("--aircraft", dest="aircraft", help="aircraft name", default=None)
    parser.add_option("--cmd", dest="cmd", help="initial commands", default=None)
    parser.add_option("--console", action='store_true', help="use GUI console")
    parser.add_option("--map", action='store_true', help="load map module")
    parser.add_option(
        '--load-module',
        action='append',
        default=[],
        help='Load the specified module. Can be used multiple times, or with a comma separated list')
    parser.add_option("--mav09", action='store_true', default=False, help="Use MAVLink protocol 0.9")
    parser.add_option("--auto-protocol", action='store_true', default=False, help="Auto detect MAVLink protocol version")
    parser.add_option("--nowait", action='store_true', default=False, help="don't wait for HEARTBEAT on startup")
    parser.add_option("--continue", dest='continue_mode', action='store_true', default=False, help="continue logs")
    parser.add_option("--dialect",  default="ardupilotmega", help="MAVLink dialect")
    parser.add_option("--rtscts",  action='store_true', help="enable hardware RTS/CTS flow control")

    (opts, args) = parser.parse_args()
    mavproxy.opts=opts

    if opts.mav09:
        os.environ['MAVLINK09'] = '1'
    from pymavlink import mavutil, mavparm
    mavutil.set_dialect(opts.dialect)

    # global mavproxy state
    mpstate = MPState()
    mavproxy.mpstate=mpstate
    mpstate.status.exit = False
    mpstate.command_map = command_map
    mpstate.continue_mode = opts.continue_mode

    if opts.speech:
        # start the speech-dispatcher early, so it doesn't inherit any ports from
        # modules/mavutil
        load_module('speech')

    if not opts.master:
        serial_list = mavutil.auto_detect_serial(preferred_list=['*FTDI*',"*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*"])
        if len(serial_list) == 1:
            opts.master = [serial_list[0].device]
        else:
            print('''
Please choose a MAVLink master with --master
For example:
    --master=com14
    --master=/dev/ttyUSB0
    --master=127.0.0.1:14550

Auto-detected serial ports are:
''')
            for port in serial_list:
                print("%s" % port)
            sys.exit(1)

    # container for status information
    mpstate.status.target_system = opts.TARGET_SYSTEM
    mpstate.status.target_component = opts.TARGET_COMPONENT

    mpstate.mav_master = []

    # open master link
    for mdev in opts.master:
        if ',' in mdev and not os.path.exists(mdev):
            port, baud = mdev.split(',')
        else:
            port, baud = mdev, opts.baudrate

        m = mavutil.mavlink_connection(port, autoreconnect=True, baud=int(baud))
        m.mav.set_callback(master_callback, m)
        if hasattr(m.mav, 'set_send_callback'):
            m.mav.set_send_callback(master_send_callback, m)
        if opts.rtscts:
            m.set_rtscts(True)
        m.linknum = len(mpstate.mav_master)
        m.linkerror = False
        m.link_delayed = False
        m.last_heartbeat = 0
        m.last_message = 0
        m.highest_msec = 0
        mpstate.mav_master.append(m)
        mpstate.status.counters['MasterIn'].append(0)

    # log all packets from the master, for later replay
    open_logs()

    # open any mavlink UDP ports
    for p in opts.output:
        if ',' in p and not os.path.exists(p):
            port, baud = p.split(',')            
        else:
            port, baud = p, opts.baudrate

        mpstate.mav_outputs.append(mavutil.mavlink_connection(port, baud=int(baud), input=False))

    if opts.sitl:
        mpstate.sitl_output = mavutil.mavudp(opts.sitl, input=False)

    mpstate.settings.numcells = opts.num_cells
    mpstate.settings.streamrate = opts.streamrate
    mpstate.settings.streamrate2 = opts.streamrate

    mavproxy.msg_period = mavutil.periodic_event(1.0/15)
    mavproxy.heartbeat_period = mavutil.periodic_event(1)
    mavproxy.battery_period = mavutil.periodic_event(0.1)
    mavproxy.heartbeat_check_period = mavutil.periodic_event(0.33)

    mpstate.rl = rline.rline("MAV> ", mpstate)
    if opts.setup:
        mpstate.rl.set_prompt("")

    if 'HOME' in os.environ and not opts.setup:
        start_script = os.path.join(os.environ['HOME'], ".mavinit.scr")
        if os.path.exists(start_script):
            run_script(start_script)

    if opts.aircraft is not None:
        start_script = os.path.join(opts.aircraft, "mavinit.scr")
        if os.path.exists(start_script):
            run_script(start_script)
        else:
            print("no script %s" % start_script)

    if not opts.setup:
        # some core functionality is in modules
        standard_modules = ['log','rally','fence','param','relay',
                            'tuneopt','arm','mode','calibration','rc','wp','auxopt','quadcontrols','test']
        for m in standard_modules:
            load_module(m, quiet=True)

    if opts.console:
        process_stdin('module load console')

    if opts.map:
        process_stdin('module load map')

    for module in opts.load_module:
        modlist = module.split(',')
        for mod in modlist:
            process_stdin('module load %s' % mod)

    if opts.cmd is not None:
        cmds = opts.cmd.split(';')
        for c in cmds:
            process_stdin(c)

# run main loop as a thread
    mpstate.status.thread = threading.Thread(target=main_loop)
    mpstate.status.thread.daemon = True
    mpstate.status.thread.start()
Beispiel #15
0
def main():
    parser = ArgumentParser(description=__doc__)
    parser.add_argument('port', metavar='PORT', nargs='?', default = None,
            help='Mavlink port name: serial: DEVICE[,BAUD], udp: IP:PORT, tcp: tcp:IP:PORT. Eg: \
/dev/ttyUSB0 or 0.0.0.0:14550. Auto-detect serial if not given.')
    parser.add_argument("--baudrate", "-b", dest="baudrate", type=int,
                      help="Mavlink port baud rate (default=115200)", default=115200)
    args = parser.parse_args()


    if args.port == None:
        serial_list = mavutil.auto_detect_serial(preferred_list=['*FTDI*',
            "*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*", '*PX4*', '*FMU*'])

        if len(serial_list) == 0:
            print("Error: no serial connection found")
            return

        if len(serial_list) > 1:
            print('Auto-detected serial ports are:')
            for port in serial_list:
                print(" {:}".format(port))
        print('Using port {:}'.format(serial_list[0]))
        args.port = serial_list[0].device


    print("Connecting to MAVLINK...")
    mav_serialport = MavlinkSerialPort(args.port, args.baudrate, devnum=10)

    mav_serialport.write('\n') # make sure the shell is started

    # setup the console, so we can read one char at a time
    fd_in = sys.stdin.fileno()
    old_attr = termios.tcgetattr(fd_in)
    new_attr = termios.tcgetattr(fd_in)
    new_attr[3] = new_attr[3] & ~termios.ECHO # lflags
    new_attr[3] = new_attr[3] & ~termios.ICANON

    try:
        termios.tcsetattr(fd_in, termios.TCSANOW, new_attr)
        cur_line = ''
        command_history = []
        cur_history_index = 0

        def erase_last_n_chars(N):
            if N == 0: return
            CURSOR_BACK_N = '\x1b['+str(N)+'D'
            ERASE_END_LINE = '\x1b[K'
            sys.stdout.write(CURSOR_BACK_N + ERASE_END_LINE)

        while True:
            while True:
                i, o, e = select.select([sys.stdin], [], [], 0)
                if not i: break
                ch = sys.stdin.read(1)

                # provide a simple shell with command history
                if ch == '\n':
                    if len(cur_line) > 0:
                        # erase current text (mavlink shell will echo it as well)
                        erase_last_n_chars(len(cur_line))

                        # add to history
                        if len(command_history) == 0 or command_history[-1] != cur_line:
                            command_history.append(cur_line)
                            if len(command_history) > 50:
                                del command_history[0]
                        cur_history_index = len(command_history)
                    mav_serialport.write(cur_line+'\n')
                    cur_line = ''
                elif ord(ch) == 127: # backslash
                    if len(cur_line) > 0:
                        erase_last_n_chars(1)
                        cur_line = cur_line[:-1]
                        sys.stdout.write(ch)
                elif ord(ch) == 033:
                    ch = sys.stdin.read(1) # skip one
                    ch = sys.stdin.read(1)
                    if ch == 'A': # arrow up
                        if cur_history_index > 0:
                            cur_history_index -= 1
                    elif ch == 'B': # arrow down
                        if cur_history_index < len(command_history):
                            cur_history_index += 1
                    # TODO: else: support line editing

                    erase_last_n_chars(len(cur_line))
                    if cur_history_index == len(command_history):
                        cur_line = ''
                    else:
                        cur_line = command_history[cur_history_index]
                    sys.stdout.write(cur_line)

                elif ord(ch) > 3:
                    cur_line += ch
                    sys.stdout.write(ch)
                sys.stdout.flush()

            data = mav_serialport.read(4096)
            if data and len(data) > 0:
                sys.stdout.write(data)
                sys.stdout.flush()

    except serial.serialutil.SerialException as e:
        print(e)

    except KeyboardInterrupt:
        mav_serialport.close()

    finally:
        termios.tcsetattr(fd_in, termios.TCSADRAIN, old_attr)
Beispiel #16
0
 def complete_serial_ports(self, text):
     """return list of serial ports"""
     ports = mavutil.auto_detect_serial(
         preferred_list=["*FTDI*", "*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*", "*PX4*", "*FMU*"]
     )
     return [p.device for p in ports]
Beispiel #17
0
    def __init__(self, *args, **kwds):
        super(linkAddDialog, self).__init__(*args, **kwds)

        self.panelGUI = wx.Panel(self, wx.ID_ANY)

        self.sizerGUI = wx.FlexGridSizer(5, 2, 0, 0)

        self.addLink = None

        self.conStr = None

        label_1 = wx.StaticText(self.panelGUI, wx.ID_ANY, "Connection Type:")
        self.sizerGUI.Add(
            label_1, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL
            | wx.RESERVE_SPACE_EVEN_IF_HIDDEN, 3)

        self.choiceConnection = wx.Choice(
            self.panelGUI,
            wx.ID_ANY,
            choices=["udpin", "udpout", "tcpin", "tcp", "Serial"])
        self.choiceConnection.SetSelection(0)
        self.sizerGUI.Add(self.choiceConnection, 0, wx.ALL, 3)

        self.labelConType = wx.StaticText(self.panelGUI, wx.ID_ANY, "IP:Port")
        self.sizerGUI.Add(self.labelConType, 0,
                          wx.ALIGN_CENTER_VERTICAL | wx.ALL, 3)

        self.textConIPPort = wx.TextCtrl(self.panelGUI, wx.ID_ANY,
                                         "127.0.0.1:14550")
        self.textConIPPort.SetMinSize((150, 34))
        self.sizerGUI.Add(self.textConIPPort, 0, wx.ALL | wx.EXPAND, 3)

        self.labelSerialPort = wx.StaticText(self.panelGUI, wx.ID_ANY, "Port:")
        self.sizerGUI.Add(
            self.labelSerialPort, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL
            | wx.RESERVE_SPACE_EVEN_IF_HIDDEN, 3)

        self.choiceSerialPort = wx.Choice(self.panelGUI, wx.ID_ANY, choices=[])

        self.sizerGUI.Add(self.choiceSerialPort, 0,
                          wx.ALL | wx.RESERVE_SPACE_EVEN_IF_HIDDEN, 3)

        self.labelBaud = wx.StaticText(self.panelGUI, wx.ID_ANY, "Baud Rate:")
        self.sizerGUI.Add(
            self.labelBaud, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL
            | wx.RESERVE_SPACE_EVEN_IF_HIDDEN, 3)

        self.choiceBaud = wx.Choice(self.panelGUI,
                                    wx.ID_ANY,
                                    choices=[
                                        "9600", "19200", "38400", "57600",
                                        "115200", "921600", "1500000"
                                    ])
        self.choiceBaud.SetSelection(3)
        self.sizerGUI.Add(self.choiceBaud, 0,
                          wx.ALL | wx.RESERVE_SPACE_EVEN_IF_HIDDEN, 3)

        self.buttonAdd = wx.Button(self.panelGUI, wx.ID_ADD, "Add Link")
        self.sizerGUI.Add(self.buttonAdd, 0, wx.ALL, 3)

        self.buttonExit = wx.Button(self.panelGUI, wx.ID_CANCEL, "")
        self.sizerGUI.Add(self.buttonExit, 0, wx.ALIGN_CENTER_VERTICAL, 0)

        self.panelGUI.SetSizer(self.sizerGUI)

        self.Layout()

        self.Bind(wx.EVT_CHOICE, self.onChangeType, self.choiceConnection)
        self.Bind(wx.EVT_BUTTON, self.onAdd, self.buttonAdd)
        self.Bind(wx.EVT_BUTTON, self.onClose, self.buttonExit)
        self.Bind(wx.EVT_CLOSE, self.onClose)

        # Set initial state
        self.choiceSerialPort.Disable()
        self.choiceBaud.Disable()
        self.labelSerialPort.Disable()
        self.labelBaud.Disable()
        self.textConIPPort.Enable()
        self.labelConType.Enable()

        ports = mavutil.auto_detect_serial(
            preferred_list=MAVProxy.modules.mavproxy_link.preferred_ports)
        for p in ports:
            self.choiceSerialPort.Append(p.device)
        self.choiceSerialPort.SetSelection(0)
Beispiel #18
0
def main():
    parser = ArgumentParser(description=__doc__)
    parser.add_argument(
        "port",
        metavar="PORT",
        nargs="?",
        default=None,
        help="Mavlink port name: serial: DEVICE[,BAUD], udp: IP:PORT, tcp: tcp:IP:PORT. Eg: \
/dev/ttyUSB0 or 0.0.0.0:14550. Auto-detect serial if not given.",
    )
    parser.add_argument(
        "--baudrate", "-b", dest="baudrate", type=int, help="Mavlink port baud rate (default=57600)", default=57600
    )
    args = parser.parse_args()

    if args.port == None:
        if sys.platform == "darwin":
            args.port = "/dev/tty.usbmodem1"
        else:
            serial_list = mavutil.auto_detect_serial(
                preferred_list=["*FTDI*", "*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*", "*PX4*", "*FMU*"]
            )

            if len(serial_list) == 0:
                print("Error: no serial connection found")
                return

            if len(serial_list) > 1:
                print("Auto-detected serial ports are:")
                for port in serial_list:
                    print(" {:}".format(port))
            print("Using port {:}".format(serial_list[0]))
            args.port = serial_list[0].device

    print("Connecting to MAVLINK...")
    mav_serialport = MavlinkSerialPort(args.port, args.baudrate, devnum=10)

    mav_serialport.write("\n")  # make sure the shell is started

    # setup the console, so we can read one char at a time
    fd_in = sys.stdin.fileno()
    old_attr = termios.tcgetattr(fd_in)
    new_attr = termios.tcgetattr(fd_in)
    new_attr[3] = new_attr[3] & ~termios.ECHO  # lflags
    new_attr[3] = new_attr[3] & ~termios.ICANON

    try:
        termios.tcsetattr(fd_in, termios.TCSANOW, new_attr)
        cur_line = ""
        command_history = []
        cur_history_index = 0

        def erase_last_n_chars(N):
            if N == 0:
                return
            CURSOR_BACK_N = "\x1b[" + str(N) + "D"
            ERASE_END_LINE = "\x1b[K"
            sys.stdout.write(CURSOR_BACK_N + ERASE_END_LINE)

        next_heartbeat_time = timer()

        while True:
            while True:
                i, o, e = select.select([sys.stdin], [], [], 0)
                if not i:
                    break
                ch = sys.stdin.read(1)

                # provide a simple shell with command history
                if ch == "\n":
                    if len(cur_line) > 0:
                        # erase current text (mavlink shell will echo it as well)
                        erase_last_n_chars(len(cur_line))

                        # add to history
                        if len(command_history) == 0 or command_history[-1] != cur_line:
                            command_history.append(cur_line)
                            if len(command_history) > 50:
                                del command_history[0]
                        cur_history_index = len(command_history)
                    mav_serialport.write(cur_line + "\n")
                    cur_line = ""
                elif ord(ch) == 127:  # backslash
                    if len(cur_line) > 0:
                        erase_last_n_chars(1)
                        cur_line = cur_line[:-1]
                        sys.stdout.write(ch)
                elif ord(ch) == 27:
                    ch = sys.stdin.read(1)  # skip one
                    ch = sys.stdin.read(1)
                    if ch == "A":  # arrow up
                        if cur_history_index > 0:
                            cur_history_index -= 1
                    elif ch == "B":  # arrow down
                        if cur_history_index < len(command_history):
                            cur_history_index += 1
                    # TODO: else: support line editing

                    erase_last_n_chars(len(cur_line))
                    if cur_history_index == len(command_history):
                        cur_line = ""
                    else:
                        cur_line = command_history[cur_history_index]
                    sys.stdout.write(cur_line)

                elif ord(ch) > 3:
                    cur_line += ch
                    sys.stdout.write(ch)
                sys.stdout.flush()

            data = mav_serialport.read(4096)
            if data and len(data) > 0:
                sys.stdout.write(data)
                sys.stdout.flush()

            # handle heartbeat sending
            heartbeat_time = timer()
            if heartbeat_time > next_heartbeat_time:
                mav_serialport.mav.mav.heartbeat_send(
                    mavutil.mavlink.MAV_TYPE_GCS, mavutil.mavlink.MAV_AUTOPILOT_GENERIC, 0, 0, 0
                )
                next_heartbeat_time = heartbeat_time + 1

    except serial.serialutil.SerialException as e:
        print(e)

    except KeyboardInterrupt:
        mav_serialport.close()

    finally:
        termios.tcsetattr(fd_in, termios.TCSADRAIN, old_attr)
Beispiel #19
0
 def scanForSerials(self):
     print "detecting serial ports..."
     return mavutil.auto_detect_serial(
         ['*ttyUSB*', '*ttyACM*', '*tty.usb*'])
Beispiel #20
0
 def scanForSerials(self):
     print "detecting serial ports..."
     return mavutil.auto_detect_serial(['*ttyUSB*',  '*ttyACM*', '*tty.usb*'])
Beispiel #21
0
 def complete_serial_ports(self, text):
     '''return list of serial ports'''
     ports = mavutil.auto_detect_serial(preferred_list=preferred_ports)
     return [p.device for p in ports]
Beispiel #22
0
    # global mavproxy state
    mpstate = MPState()
    mpstate.status.exit = False
    mpstate.command_map = command_map
    mpstate.continue_mode = opts.continue_mode
    # queues for logging
    mpstate.logqueue = Queue.Queue()
    mpstate.logqueue_raw = Queue.Queue()


    if opts.speech:
        # start the speech-dispatcher early, so it doesn't inherit any ports from
        # modules/mavutil
        load_module('speech')

    serial_list = mavutil.auto_detect_serial(preferred_list=preferred_ports)
    if not opts.master:
        print('Auto-detected serial ports are:')
        for port in serial_list:
              print("%s" % port)

    # container for status information
    mpstate.settings.target_system = opts.TARGET_SYSTEM
    mpstate.settings.target_component = opts.TARGET_COMPONENT

    mpstate.mav_master = []

    mpstate.rl = rline.rline("MAV> ", mpstate)

    def quit_handler(signum = None, frame = None):
        #print('Signal handler called with signal', signum)
Beispiel #23
0
def main():
    parser = ArgumentParser(description=__doc__)
    parser.add_argument(
        'port',
        metavar='PORT',
        nargs='?',
        default=None,
        help=
        'Mavlink port name: serial: DEVICE[,BAUD], udp: IP:PORT, tcp: tcp:IP:PORT. Eg: \
/dev/ttyUSB0 or 0.0.0.0:14550. Auto-detect serial if not given.')
    parser.add_argument("--baudrate",
                        "-b",
                        dest="baudrate",
                        type=int,
                        help="Mavlink port baud rate (default=115200)",
                        default=115200)
    args = parser.parse_args()

    if args.port == None:
        serial_list = mavutil.auto_detect_serial(preferred_list=[
            '*FTDI*', "*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*",
            '*PX4*', '*FMU*'
        ])

        if len(serial_list) == 0:
            print("Error: no serial connection found")
            return

        if len(serial_list) > 1:
            print('Auto-detected serial ports are:')
            for port in serial_list:
                print(" {:}".format(port))
        print('Using port {:}'.format(serial_list[0]))
        args.port = serial_list[0].device

    print("Connecting to MAVLINK...")
    mav_serialport = MavlinkSerialPort(args.port, args.baudrate, devnum=10)

    mav_serialport.write('\n')  # make sure the shell is started

    # setup the console, so we can read one char at a time
    fd_in = sys.stdin.fileno()
    old_attr = termios.tcgetattr(fd_in)
    new_attr = termios.tcgetattr(fd_in)
    new_attr[3] = new_attr[3] & ~termios.ECHO  # lflags
    new_attr[3] = new_attr[3] & ~termios.ICANON

    try:
        termios.tcsetattr(fd_in, termios.TCSANOW, new_attr)
        cur_line = ''
        command_history = []
        cur_history_index = 0

        def erase_last_n_chars(N):
            if N == 0: return
            CURSOR_BACK_N = '\x1b[' + str(N) + 'D'
            ERASE_END_LINE = '\x1b[K'
            sys.stdout.write(CURSOR_BACK_N + ERASE_END_LINE)

        while True:
            while True:
                i, o, e = select.select([sys.stdin], [], [], 0)
                if not i: break
                ch = sys.stdin.read(1)

                # provide a simple shell with command history
                if ch == '\n':
                    if len(cur_line) > 0:
                        # erase current text (mavlink shell will echo it as well)
                        erase_last_n_chars(len(cur_line))

                        # add to history
                        if len(command_history
                               ) == 0 or command_history[-1] != cur_line:
                            command_history.append(cur_line)
                            if len(command_history) > 50:
                                del command_history[0]
                        cur_history_index = len(command_history)
                    mav_serialport.write(cur_line + '\n')
                    cur_line = ''
                elif ord(ch) == 127:  # backslash
                    if len(cur_line) > 0:
                        erase_last_n_chars(1)
                        cur_line = cur_line[:-1]
                        sys.stdout.write(ch)
                elif ord(ch) == 033:
                    ch = sys.stdin.read(1)  # skip one
                    ch = sys.stdin.read(1)
                    if ch == 'A':  # arrow up
                        if cur_history_index > 0:
                            cur_history_index -= 1
                    elif ch == 'B':  # arrow down
                        if cur_history_index < len(command_history):
                            cur_history_index += 1
                    # TODO: else: support line editing

                    erase_last_n_chars(len(cur_line))
                    if cur_history_index == len(command_history):
                        cur_line = ''
                    else:
                        cur_line = command_history[cur_history_index]
                    sys.stdout.write(cur_line)

                elif ord(ch) > 3:
                    cur_line += ch
                    sys.stdout.write(ch)
                sys.stdout.flush()

            data = mav_serialport.read(4096)
            if data and len(data) > 0:
                sys.stdout.write(data)
                sys.stdout.flush()

    except serial.serialutil.SerialException as e:
        print(e)

    except KeyboardInterrupt:
        mav_serialport.close()

    finally:
        termios.tcsetattr(fd_in, termios.TCSADRAIN, old_attr)
Beispiel #24
0
handler.setFormatter(formatter)
# log to file
handler = logging.FileHandler('main.log')
handler.setFormatter(formatter)

# -------------------- Connect to pixhawk -----------------------

connections = []
# try to connect to simulator
connections.append('tcp:localhost:14551')
# try to connect to pixhawk over serial port
preferred_list = [
    '*FTDI*', "*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*", '*PX4*',
    '*FMU*'
]
connections.append(str(mavutil.auto_detect_serial(preferred_list)[0]))
for connection in connections:
    try:
        vehicle = connect(connection, wait_ready=True)
        print("Connection to {} succeeded".format(connection))
        break
    except Exception as e:
        print("Connection to {} failed".format(connection))
else:
    logging.error("Could not connect to Pixhawk")

# --------------------- Load mission --------------------------


# @vehicle.on_message('*')
@vehicle.on_message('MISSION_ITEM_REACHED')
def main():
    parser = ArgumentParser(description=__doc__)
    parser.add_argument(
        'port',
        metavar='PORT',
        nargs='?',
        default=None,
        help=
        'Mavlink port name: serial: DEVICE[,BAUD], udp: IP:PORT, tcp: tcp:IP:PORT. Eg: \
/dev/ttyUSB0 or 0.0.0.0:14550. Auto-detect serial if not given.')
    parser.add_argument("--baudrate",
                        "-b",
                        dest="baudrate",
                        type=int,
                        help="Mavlink port baud rate (default=57600)",
                        default=57600)
    args = parser.parse_args()

    if args.port == None:
        if sys.platform == "darwin":
            args.port = "/dev/tty.usbmodem01"
        else:
            serial_list = mavutil.auto_detect_serial(preferred_list=[
                '*FTDI*', "*Arduino_Mega_2560*", "*3D_Robotics*",
                "*USB_to_UART*", '*PX4*', '*FMU*', "*Gumstix*"
            ])

            if len(serial_list) == 0:
                print("Error: no serial connection found")
                return

            if len(serial_list) > 1:
                print('Auto-detected serial ports are:')
                for port in serial_list:
                    print(" {:}".format(port))
            print('Using port {:}'.format(serial_list[0]))
            args.port = serial_list[0].device

    print("Connecting to MAVLINK...")
    mav_serialport = MavlinkSerialPort(args.port, args.baudrate, devnum=10)

    mav_serialport.write('\n')  # make sure the shell is started

    # disable echo & avoid buffering on stdin
    fd_in = sys.stdin.fileno()
    try:
        old_attr = termios.tcgetattr(fd_in)
        new_attr = termios.tcgetattr(fd_in)
        new_attr[3] = new_attr[3] & ~termios.ECHO  # lflags
        new_attr[3] = new_attr[3] & ~termios.ICANON
        termios.tcsetattr(fd_in, termios.TCSANOW, new_attr)
    except termios.error:
        # tcgetattr can fail if stdin is not a tty
        old_attr = None
    ubuf_stdin = os.fdopen(fd_in, 'rb', buffering=0)

    try:
        cur_line = ''
        command_history = []
        cur_history_index = 0

        def erase_last_n_chars(N):
            if N == 0: return
            CURSOR_BACK_N = '\x1b[' + str(N) + 'D'
            ERASE_END_LINE = '\x1b[K'
            sys.stdout.write(CURSOR_BACK_N + ERASE_END_LINE)

        next_heartbeat_time = timer()

        quit_time = None
        while quit_time is None or quit_time > timer():
            while True:
                i, o, e = select.select([ubuf_stdin], [], [], 0)
                if not i: break
                ch = ubuf_stdin.read(1).decode('utf8')

                if len(ch) == 0:  # EOF
                    if quit_time is None:
                        # run a bit longer to read the response (we could also
                        # read until we get a prompt)
                        quit_time = timer() + 1
                    break

                # provide a simple shell with command history
                if ch == '\n':
                    if len(cur_line) > 0:
                        # erase current text (mavlink shell will echo it as well)
                        erase_last_n_chars(len(cur_line))

                        # add to history
                        if len(command_history
                               ) == 0 or command_history[-1] != cur_line:
                            command_history.append(cur_line)
                            if len(command_history) > 50:
                                del command_history[0]
                        cur_history_index = len(command_history)
                    mav_serialport.write(cur_line + '\n')
                    cur_line = ''
                elif ord(ch) == 127:  # backslash
                    if len(cur_line) > 0:
                        erase_last_n_chars(1)
                        cur_line = cur_line[:-1]
                        sys.stdout.write(ch)
                elif ord(ch) == 27:
                    ch = ubuf_stdin.read(1).decode('utf8')  # skip one
                    ch = ubuf_stdin.read(1).decode('utf8')
                    if ch == 'A':  # arrow up
                        if cur_history_index > 0:
                            cur_history_index -= 1
                    elif ch == 'B':  # arrow down
                        if cur_history_index < len(command_history):
                            cur_history_index += 1
                    # TODO: else: support line editing

                    erase_last_n_chars(len(cur_line))
                    if cur_history_index == len(command_history):
                        cur_line = ''
                    else:
                        cur_line = command_history[cur_history_index]
                    sys.stdout.write(cur_line)

                elif ord(ch) > 3:
                    cur_line += ch
                    sys.stdout.write(ch)
                sys.stdout.flush()

            data = mav_serialport.read(4096)
            if data and len(data) > 0:
                sys.stdout.write(data)
                sys.stdout.flush()

            # handle heartbeat sending
            heartbeat_time = timer()
            if heartbeat_time > next_heartbeat_time:
                mav_serialport.mav.mav.heartbeat_send(
                    mavutil.mavlink.MAV_TYPE_GCS,
                    mavutil.mavlink.MAV_AUTOPILOT_GENERIC, 0, 0, 0)
                next_heartbeat_time = heartbeat_time + 1

    except serial.serialutil.SerialException as e:
        print(e)

    except KeyboardInterrupt:
        mav_serialport.close()

    finally:
        if old_attr:
            termios.tcsetattr(fd_in, termios.TCSADRAIN, old_attr)
Beispiel #26
0
def main():
    parser = ArgumentParser(description=__doc__)
    parser.add_argument(
        'port',
        metavar='PORT',
        nargs='?',
        default=None,
        help=
        'Mavlink port name: serial: DEVICE[,BAUD], udp: IP:PORT, tcp: tcp:IP:PORT. Eg: \
/dev/ttyUSB0 or 0.0.0.0:14550. Auto-detect serial if not given.')
    parser.add_argument("--baudrate",
                        "-b",
                        dest="baudrate",
                        type=int,
                        help="Mavlink port baud rate (default=115200)",
                        default=115200)
    parser.add_argument("--output",
                        "-o",
                        dest="output",
                        default='.',
                        help="output file or directory (default=CWD)")
    args = parser.parse_args()

    if os.path.isdir(args.output):
        filename = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S.ulg")
        filename = os.path.join(args.output, filename)
    else:
        filename = args.output
    print('Output file name: {:}'.format(filename))

    if args.port == None:
        serial_list = mavutil.auto_detect_serial(preferred_list=[
            '*FTDI*', "*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*",
            '*PX4*', '*FMU*'
        ])

        if len(serial_list) == 0:
            print("Error: no serial connection found")
            return

        if len(serial_list) > 1:
            print('Auto-detected serial ports are:')
            for port in serial_list:
                print(" {:}".format(port))
        print('Using port {:}'.format(serial_list[0]))
        args.port = serial_list[0].device

    print("Connecting to MAVLINK...")
    mav_log_streaming = MavlinkLogStreaming(args.port, args.baudrate, filename)

    try:
        print('Starting log...')
        mav_log_streaming.start_log()
        mav_log_streaming.read_messages()

        print('Stopping log')
        mav_log_streaming.stop_log()

    except KeyboardInterrupt:
        print('Stopping log')
        mav_log_streaming.stop_log()
Beispiel #27
0
    mpstate.command_map = command_map
    mpstate.continue_mode = opts.continue_mode
    # queues for logging
    mpstate.logqueue = Queue.Queue()
    mpstate.logqueue_raw = Queue.Queue()


    if opts.speech:
        # start the speech-dispatcher early, so it doesn't inherit any ports from
        # modules/mavutil
        load_module('speech')

    serial_list = mavutil.auto_detect_serial(preferred_list=[
          '*FTDI*',
          "*Arduino_Mega_2560*",
          "*3D_Robotics*",
          "*USB_to_UART*",
          '*Ardu*',
          '*PX4*',
          '*FMU*'])
    if not opts.master:
        print('Auto-detected serial ports are:')
        for port in serial_list:
              print("%s" % port)

    # container for status information
    mpstate.settings.target_system = opts.TARGET_SYSTEM
    mpstate.settings.target_component = opts.TARGET_COMPONENT

    mpstate.mav_master = []

    mpstate.rl = rline.rline("MAV> ", mpstate)
Beispiel #28
0
 def cmd_link_ports(self):
     '''show available ports'''
     ports = mavutil.auto_detect_serial(preferred_list=['*FTDI*',"*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*", '*PX4*', '*FMU*'])
     for p in ports:
         print("%s : %s : %s" % (p.device, p.description, p.hwid))