Esempio n. 1
0
def setup_myo():
    global myo, myo_initialized

    print('Setting up myo ...')

    myo = MyoRaw(None)

    def emg_handler(emg, moving, times=[]):
        # store data
        global emg_data_latest
        emg_data_latest = emg

    def imu_handler(quat, acc, gyro):
        # store data
        global quat_data_latest, acc_data_latest, gyro_data_latest
        quat_data_latest = quat
        acc_data_latest = acc
        gyro_data_latest = gyro

    myo.add_emg_handler(emg_handler)
    myo.add_imu_handler(imu_handler)
    myo.connect()
    myo_initialized = True
    print('Myo connected')

    myo.sleep_mode(1)

    _thread.start_new_thread(thread_myo, ())
    print('Myo setup.\n')
Esempio n. 2
0
    #print(oscmsg)
    #print(data)


def imu(quat, acc, gyro):
    #print(quat,acc,gyro)
    #print ("quat: ", quat, " type: ", type(quat))
    send(quat, wek, "/wek/inputs")


def pose(p):
    print(p)


def emg(emg, moving):
    emgdat = (sum(emg) / float(len(emg)), )
    #print ("emgdat: ", emgdat, " type: ", type(emgdat))
    send(emgdat, tenta, "/tenta_emg")


if __name__ == '__main__':

    m = MyoRaw()
    #m.add_imu_handler(print)
    m.add_imu_handler(imu)
    #m.add_pose_handler(pose)
    m.add_emg_handler(emg)
    m.connect()
    while True:
        m.run()
Esempio n. 3
0
def proc_emg(emg, moving):
    global emg_data
    emg_data.append(emg)


def proc_imu(quat, acc, gyr):
    global quat_data, acc_data, gyr_data
    quat_data.append(quat)
    acc_data.append(acc)
    gyr_data.append(gyr)


m = MyoRaw(sys.argv[1] if len(sys.argv) >= 2 else None)

m.add_emg_handler(proc_emg)
m.add_imu_handler(proc_imu)

m.connect()

try:
    print "\nSampling... (^C to stop)"
    timestamp = time.strftime('%Y-%m-%d %H:%M:%S')
    while True:
        m.run()
except KeyboardInterrupt:
    m.disconnect()
    print "\nDone.\n"

emg_data = np.array(emg_data, dtype=dtype)
quat_data = np.array(quat_data, dtype=dtype)
acc_data = np.array(acc_data, dtype=dtype)
Esempio n. 4
0
    emg_file = outdir.joinpath(now + '_emg.csv').open(mode='w', newline='')
    imu_file = outdir.joinpath(now + '_imu.csv').open(mode='w', newline='')

    emg_writer = csv.writer(emg_file,
                            csv.unix_dialect,
                            quoting=csv.QUOTE_MINIMAL)
    emg_writer.writerow(emg_header)

    imu_writer = csv.writer(imu_file,
                            csv.unix_dialect,
                            quoting=csv.QUOTE_MINIMAL)
    imu_writer.writerow(imu_header)

    m = MyoRaw(args.tty)
    m.add_emg_handler(lambda *args: write_data(emg_writer, args))
    m.add_imu_handler(lambda *args: write_data(imu_writer, args))
    m.connect()

    # Enable never sleep mode.
    m.sleep_mode(1)

    try:
        while True:
            m.run(1)
    except KeyboardInterrupt:
        pass
    finally:
        m.disconnect()
        print("\nemg data saved to: {}".format(emg_file.name))
        print("img data saved to: {}".format(imu_file.name))
        emg_file.close()
Esempio n. 5
0

if __name__ == '__main__':
    if HAVE_PYGAME:
        pygame.init()
        w, h = 800, 320
        scr = pygame.display.set_mode((w, h))
        font = pygame.font.Font(None, 30)

    file_path = './data_set/'
    file_name = os.path.join(file_path, 'data.pkl')

    m = MyoRaw(sys.argv[1] if len(sys.argv) >= 2 else None)
    hnd = DataHandler(m)
    m.add_emg_handler(hnd.on_emg)
    m.add_imu_handler(hnd.on_imu)
    m.connect()

    data_list = []

    try:

        while True:
            m.run()

            if HAVE_PYGAME:
                for ev in pygame.event.get():
                    if ev.type == QUIT or (ev.type == KEYDOWN
                                           and ev.unicode == 'q'):
                        raise KeyboardInterrupt()
                    elif ev.type == KEYDOWN:
Esempio n. 6
0
def main(argv):
    import subprocess

    # --- say hello!
    #print('Alive and breathing!\n')
    global file_handle, save_to_file
    global plot_graph
    global simulated, verbose

    # --- init variables
    filename = str(time.strftime("%Y.%m.%d.%Hh%M"))

    # --- parse command-line arguments
    if verbose:
        print('Parsing input arguments ...')
        #print ('Number of arguments:', len(sys.argv), 'argument(s)')
        #print ('Arguments:', str(sys.argv))

    try:
        opts, args = getopt.getopt(argv, "hsgxf:v", ["filename="])
    except getopt.GetoptError:
        usage()

    for opt, arg in opts:
        if opt == '-h':
            usage()
            cleanup(1)
            sys.exit(0)
        elif opt == '-x':
            print('Option chosen: Simulated Myo.')
            simulated = True
        elif opt == '-g':
            print('Option chosen: Plotting graphs.')
            plot_graph = True
        elif opt == '-s':
            print('Option chosen: Saving to file.')
            save_to_file = True
        elif opt in ("-f", "--filename"):
            save_to_file = True
            filename = filename + '_' + arg
            print('Option chosen: Filename set to: ', filename)
        elif opt == '-v':
            print('Option chosen: Running verbose.')
            verbose = True

    if verbose:
        print('Input arguments parsed.\n')

    # --- open file for storing data
    if save_to_file:
        print('Saving data to file: ', filename)
        file_handle = open(filename, 'w')

    # --- setup myo
    global myo, myo_initialized
    print('Setting up myo ...')
    if not (simulated):
        #myo = MyoRaw(sys.argv[1] if len(sys.argv) >= 2 else None)
        myo = MyoRaw(None)

        def emg_handler(emg, moving, times=[]):
            # store data
            global emg_data_latest
            emg_data_latest = emg

        def imu_handler(quat, acc, gyro):
            # store data
            global quat_data_latest, acc_data_latest, gyro_data_latest
            quat_data_latest = quat
            acc_data_latest = acc
            gyro_data_latest = gyro

        myo.add_emg_handler(emg_handler)
        myo.add_imu_handler(imu_handler)
        #myo.add_arm_handler(lambda arm, xdir: print('arm', arm, 'xdir', xdir))
        #myo.add_pose_handler(lambda p: print('pose', p))
        myo.connect()
        myo_initialized = True
        print('Myo connected')

    else:
        print('Myo simulated')

    _thread.start_new_thread(thread_myo, ())
    print('Myo setup.\n')

    # --- setup QT
    if plot_graph:
        # init window
        app = QtGui.QApplication([])

        print('Starting up plots and QT ...')

        win = pg.GraphicsWindow(title="Myo data")
        win.closeEvent = cleanup
        win.resize(1000, 1000)
        win.setWindowTitle('Myo data')
        # pg.setConfigOptions(antialias=True) # Enable antialiasing for prettier plots
        pg.setConfigOption('background', 'k')
        #pg.setConfigOption('background', pg.mkColor(255,255,255) )
        pg.setConfigOption('foreground', 'w')

        colors = ['r', 'g', 'b', 'c', 'm', 'y', 'w', 'r']
        p_emg = [None] * 8
        emg = [None] * 8

        for i, color in enumerate(colors):
            p_emg[i] = win.addPlot(title="EMG " + str(i + 1))
            p_emg[i].setXRange(0, BUFFER_SIZE)
            p_emg[i].setYRange(-150, 150)
            p_emg[i].enableAutoRange('xy', False)
            emg[i] = p_emg[i].plot(pen=color, name="emg" + str(i + 1))
            win.nextRow()

        def update():
            global emg_data_buffer
            for i in range(8):
                emg[i].setData(emg_data_buffer[1:BUFFER_SIZE, i])

        timer = QtCore.QTimer()
        timer.timeout.connect(update)
        timer.start(10)

        print('Plots set up.\n')

        if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
            QtGui.QApplication.instance().exec_()

    # no graphs
    else:
        while (1):
            #if verbose:
            #	print('whiling.. :D')
            1  #do nothing (the threads will perform something, e.g. writing the received values on terminal)