Ejemplo n.º 1
0
    def setup(self):
        libmetawear.mbl_mw_settings_set_connection_parameters(
            self.device.board, 7.5, 7.5, 0, 6000)
        sleep(1.5)

        e = Event()

        def processor_created(context, pointer):
            self.processor = pointer
            e.set()

        fn_wrapper = cbindings.FnVoid_VoidP_VoidP(processor_created)

        acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal(
            self.device.board)
        gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal(
            self.device.board)

        signals = (c_void_p * 1)()
        signals[0] = gyro
        libmetawear.mbl_mw_dataprocessor_fuser_create(acc, signals, 1, None,
                                                      fn_wrapper)
        e.wait()

        libmetawear.mbl_mw_datasignal_subscribe(self.processor, None,
                                                self.callback)
Ejemplo n.º 2
0
    def start(self):
        if self.device == None:
            self.log("ERROR", "Device not available")
            return False

        dev_board = self.device.board

        self.log("INFO", "Configuring device")
        lmw.mbl_mw_settings_set_connection_parameters(dev_board, 7.5, 7.5, 0,
                                                      6000)
        time.sleep(1.5)

        # Subscribe to accelerometer data
        acc = lmw.mbl_mw_acc_get_acceleration_data_signal(dev_board)
        lmw.mbl_mw_datasignal_subscribe(acc, None, self.callback_acc)

        # Subscribe to gyro data
        gyro = lmw.mbl_mw_gyro_bmi160_get_rotation_data_signal(dev_board)
        lmw.mbl_mw_datasignal_subscribe(gyro, None, self.callback_gyr)

        self.log("INFO", "Starting device...")
        # Enable accelerometer sampling
        lmw.mbl_mw_acc_enable_acceleration_sampling(dev_board)
        lmw.mbl_mw_acc_start(dev_board)

        # Enable gyrp sampling
        lmw.mbl_mw_gyro_bmi160_enable_rotation_sampling(dev_board)
        lmw.mbl_mw_gyro_bmi160_start(dev_board)

        self.log("INFO", "Device started.")

        return True
Ejemplo n.º 3
0
    def setup(self):
        # setup ble
        libmetawear.mbl_mw_settings_set_connection_parameters(
            self.device.board, 7.5, 7.5, 0, 6000)
        sleep(1.5)
        # setup event
        e = Event()

        # processor callback fxn
        def processor_created(context, pointer):
            self.processor = pointer
            e.set()

        fn_wrapper = cbindings.FnVoid_VoidP_VoidP(processor_created)
        # get acc signal
        acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal(
            self.device.board)
        # create acc averager (averages 4 consecutive acc data entriess)
        libmetawear.mbl_mw_dataprocessor_average_create(
            acc, 4, None, fn_wrapper)
        # wait for averager to be created
        e.wait()
        # subscribe to signal
        libmetawear.mbl_mw_datasignal_subscribe(self.processor, None,
                                                self.callback)
Ejemplo n.º 4
0
    def setup(self):
        libmetawear.mbl_mw_settings_set_connection_parameters(self.device.board, 7.5, 7.5, 0, 600)
        sleep(1.5)

        e = Event()

        def processor_created(context, pointer):
            self.processor = pointer
            e.set()
        fn_wrapper = cbindings.FnVoid_VoidP_VoidP(processor_created)

        # set accelerometer to 100Hz sampling rate and range to +/- 16 g's
        libmetawear.mbl_mw_acc_set_odr(s.device.board, 100.0)
        libmetawear.mbl_mw_acc_set_range(s.device.board, 16.0)
        libmetawear.mbl_mw_acc_write_acceleration_config(s.device.board)
        
        # set gyro to 100Hz sampling rate and +/- 1000 deg/sec. 
        libmetawear.mbl_mw_gyro_bmi160_set_odr(s.device.board, MBL_MW_GYRO_BMI160_ODR_100Hz)
        libmetawear.mbl_mw_gyro_bmi160_set_range(s.device.board, MBL_MW_GYRO_BMI160_RANGE_1000dps)
        libmetawear.mbl_mw_gyro_bmi160_write_config(s.device.board)


        acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal(self.device.board)
        gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal(self.device.board)

        signals = (c_void_p * 1)()
        signals[0] = gyro

        # libmetawear.mbl_mw_dataprocessor_accounter_create(signals, None, fn_wrapper)
        fuser = create_voidp(lambda fn: libmetawear.mbl_mw_dataprocessor_fuser_create(acc, signals, 1, None, fn), resource = "fuser", event = e)
        accounter = create_voidp(lambda fn: libmetawear.mbl_mw_dataprocessor_accounter_create(fuser, None, fn), resource = "accounter", event = e)
		
        # libmetawear.mbl_mw_datasignal_subscribe(self.processor, None, self.callback)
        libmetawear.mbl_mw_datasignal_subscribe(accounter, None, self.callback)
Ejemplo n.º 5
0
Archivo: gui.py Proyecto: rdmejia/tesis
    def btn_start_shot_click(self):
        self.mw_states = []
        self.xyz_shots = []
        for device in self.mw_devices:
            # try:
            #     device.connect()
            # except:
            #     print 'connection to %s failed (the device might be already connected)' % device.address
            self.mw_states.append(
                MetaWearState(device, self.mw_positions[device.address], self))

        for s in self.mw_states:
            libmetawear.mbl_mw_settings_set_connection_parameters(
                s.device.board, 7.5, 7.5, 0, 6000)
            sleep(1.5)

            libmetawear.mbl_mw_acc_set_odr(s.device.board, 100.0)
            libmetawear.mbl_mw_acc_set_range(s.device.board, 16.0)
            libmetawear.mbl_mw_acc_write_acceleration_config(s.device.board)

            signal = libmetawear.mbl_mw_acc_get_acceleration_data_signal(
                s.device.board)
            libmetawear.mbl_mw_datasignal_subscribe(signal, None, s.callback)

            libmetawear.mbl_mw_acc_enable_acceleration_sampling(s.device.board)
            libmetawear.mbl_mw_acc_start(s.device.board)

        # t = Timer(15, self.time_elapsed)
        # t.start()
        print 'shot has started'
        return
Ejemplo n.º 6
0
    def setup(self):
        # ble settings
        libmetawear.mbl_mw_settings_set_connection_parameters(
            self.device.board, 7.5, 7.5, 0, 6000)
        sleep(1.5)
        # events
        e = Event()

        # processor callback fxn
        def processor_created(context, pointer):
            self.processor = pointer
            e.set()

        # processor fxn ptr
        fn_wrapper = cbindings.FnVoid_VoidP_VoidP(processor_created)
        # get acc signal
        acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal(
            self.device.board)
        # get gyro signal - MMRl, MMR, MMc ONLY
        #gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal(self.device.board)
        # get gyro signal - MMRS ONLY
        gyro = libmetawear.mbl_mw_gyro_bmi270_get_rotation_data_signal(
            self.device.board)
        # create signals variable
        signals = (c_void_p * 1)()
        signals[0] = gyro
        # create acc + gyro signal fuser
        libmetawear.mbl_mw_dataprocessor_fuser_create(acc, signals, 1, None,
                                                      fn_wrapper)
        # wait for fuser to be created
        e.wait()
        # subscribe to the fused signal
        libmetawear.mbl_mw_datasignal_subscribe(self.processor, None,
                                                self.callback)
Ejemplo n.º 7
0
    def setup(self):
        # set BLE connection params (min connect interval, max interval,
        # latency, timeout) all in milliseconds
        libmetawear.mbl_mw_settings_set_connection_parameters(
            self.device.board, 7.5, 7.5, 0, 6000)
        # set BLE advertising strength (higher strength = higher power consumption
        # but theoretically better connectivity)
        libmetawear.mbl_mw_settings_set_tx_power(self.device.board, 4)
        sleep(1.5)

        e = Event()

        def processor_created(context, pointer):
            self.processor = pointer
            e.set()

        fn_wrapper = metacbindings.FnVoid_VoidP_VoidP(processor_created)

        # set accelerometer to 100Hz sampling rate and range to +/- 16 g's
        libmetawear.mbl_mw_acc_set_odr(s.device.board, 100.0)
        libmetawear.mbl_mw_acc_set_range(s.device.board, 16.0)
        libmetawear.mbl_mw_acc_write_acceleration_config(s.device.board)

        # set gyro to 100Hz sampling rate and +/- 1000 deg/sec.
        libmetawear.mbl_mw_gyro_bmi160_set_odr(s.device.board,
                                               MBL_MW_GYRO_BMI160_ODR_100Hz)
        libmetawear.mbl_mw_gyro_bmi160_set_range(
            s.device.board, MBL_MW_GYRO_BMI160_RANGE_1000dps)
        libmetawear.mbl_mw_gyro_bmi160_write_config(s.device.board)

        # get pointers referencing the acc and gyro data signals
        acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal(
            self.device.board)
        gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal(
            self.device.board)

        signals = (c_void_p * 1)()
        signals[0] = gyro

        # //libmetawear.mbl_mw_dataprocessor_accounter_create(signals, None, fn_wrapper)

        # chain two processors together (fuser and accounter) to get timestamped acc+gyro data
        # create a fuser "data processor" which packages the acc and gyro signals into same packets before sending
        fuser = create_voidp(
            lambda fn: libmetawear.mbl_mw_dataprocessor_fuser_create(
                acc, signals, 1, None, fn),
            resource="fuser",
            event=e)
        # accounter processor adds correct epoch data to BLE packets, necessary for timestamping stream-mode data
        accounter = create_voidp(
            lambda fn: libmetawear.mbl_mw_dataprocessor_accounter_create(
                fuser, None, fn),
            resource="accounter",
            event=e)

        # //libmetawear.mbl_mw_datasignal_subscribe(self.processor, None, self.callback)
        libmetawear.mbl_mw_datasignal_subscribe(accounter, None, self.callback)
Ejemplo n.º 8
0
    def init_device(self, device):
        print(f"Configuring device: {device.device.address}")
        # reset(device.device)
        libmetawear.mbl_mw_settings_set_connection_parameters(
            device.device.board, 7.5, 7.5, 0, 6000)
        sleep(1.5)

        libmetawear.mbl_mw_acc_set_odr(device.device.board, 25.0)
        libmetawear.mbl_mw_acc_set_range(device.device.board, 8.0)
        libmetawear.mbl_mw_acc_write_acceleration_config(device.device.board)
Ejemplo n.º 9
0
    def setup(self):
        #Set up file
        self.file.write(
            "Time, Time from start (s), Acc x, Acc y, Acc z, Gyro x, Gyro y, Gyro z, Mag x, Mag y, Mag z \n"
        )

        #Set up board
        libmetawear.mbl_mw_settings_set_connection_parameters(
            self.device.board, 7.5, 7.5, 0, 6000)

        #Acceleration sampling frequency
        libmetawear.mbl_mw_acc_set_odr(s.device.board,
                                       100.0)  #fastest frequency is 400 Hz
        #range of acceleration
        libmetawear.mbl_mw_acc_set_range(s.device.board, 16.0)
        #write acceleration config
        libmetawear.mbl_mw_acc_write_acceleration_config(s.device.board)

        #Gyro sampling frequency
        libmetawear.mbl_mw_gyro_bmi160_set_odr(self.device.board,
                                               8)  #9 = 200Hz, 8 = 100Hz
        #Gyro range
        libmetawear.mbl_mw_gyro_bmi160_set_range(
            self.device.board, 0)  #0 = 2000 dps, 1 = 1000 dps
        #Write gyro config
        libmetawear.mbl_mw_gyro_bmi160_write_config(self.device.board)

        libmetawear.mbl_mw_mag_bmm150_set_preset(self.device.board, 3)

        sleep(1.5)

        e = Event()

        def processor_created(context, pointer):
            self.processor = pointer
            e.set()

        fn_wrapper = cbindings.FnVoid_VoidP_VoidP(processor_created)

        acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal(
            self.device.board)
        gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal(
            self.device.board)
        mag = libmetawear.mbl_mw_mag_bmm150_get_b_field_data_signal(
            self.device.board)
        signals = (c_void_p * 2)()
        signals[0] = gyro
        signals[1] = mag
        libmetawear.mbl_mw_dataprocessor_fuser_create(acc, signals, 2, None,
                                                      fn_wrapper)
        e.wait()

        libmetawear.mbl_mw_datasignal_subscribe(self.processor, None,
                                                self.callback)
Ejemplo n.º 10
0
    def setup(self):
        # s represents a device's MAC address
        for s in self.states:

            # Device configuration
            print("Configuring device...")

            # Not sure what these parameters are for, but they're synchronized with the rest of the settings.
            libmetawear.mbl_mw_settings_set_connection_parameters(
                s.device.board, 7.5, 7.5, 0, 6000)

            # Acceleration
            libmetawear.mbl_mw_acc_set_odr(s.device.board,
                                           25.0)  # 25 Hz data collection rate
            libmetawear.mbl_mw_acc_set_range(s.device.board, 16.0)  # Unsure
            libmetawear.mbl_mw_acc_write_acceleration_config(
                s.device.board)  # Save to the board's configuration
            signal_acceleration = libmetawear.mbl_mw_acc_get_acceleration_data_signal(
                s.device.board)
            libmetawear.mbl_mw_datasignal_subscribe(signal_acceleration,
                                                    s.callback_accel)
            libmetawear.mbl_mw_acc_enable_acceleration_sampling(s.device.board)

            # Gyrometer
            libmetawear.mbl_mw_gyro_bmi160_set_odr(s.device.board,
                                                   6)  # 6 is index for 25 Hz
            libmetawear.mbl_mw_gyro_bmi160_write_config(s.device.board)
            signal_gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal(
                s.device.board)
            libmetawear.mbl_mw_datasignal_subscribe(signal_gyro,
                                                    s.callback_gyro)
            libmetawear.mbl_mw_gyro_bmi160_enable_rotation_sampling(
                s.device.board)

            # Magnometer
            libmetawear.mbl_mw_mag_bmm150_configure(s.device.board, 1, 1,
                                                    6)  # 6 is index for 25 Hz
            signal_mag = libmetawear.mbl_mw_mag_bmm150_get_b_field_data_signal(
                s.device.board)
            libmetawear.mbl_mw_datasignal_subscribe(signal_mag, s.callback_mag)

            # Run LED - Stays green until IMUs / system starts with a pulse
            pattern = LedPattern(repeat_count=Const.LED_REPEAT_INDEFINITELY)
            libmetawear.mbl_mw_led_load_preset_pattern(byref(pattern),
                                                       LedPreset.SOLID)
            libmetawear.mbl_mw_led_write_pattern(s.device.board,
                                                 byref(pattern),
                                                 LedColor.GREEN)
            libmetawear.mbl_mw_led_play(s.device.board)
        return
Ejemplo n.º 11
0
def setDevice(mmr):
    libmetawear.mbl_mw_settings_set_connection_parameters(
        mmr.device.board, 7.5, 7.5, 0, 6000)
    sleep(1.5)

    # Get the signal from i2c communication
    # (device.board address, the size of data(byte), id : Numerical value identifying the data)
    mmr.i2c_signal = libmetawear.mbl_mw_i2c_get_data_signal(
        mmr.device.board, 3, 0xa)
    # Get the signal from Acceleration
    acc_signal = libmetawear.mbl_mw_acc_get_acceleration_data_signal(
        mmr.device.board)
    # get the signal from Gyro
    gyro_signal = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal(
        mmr.device.board)

    # Subscribe the i2c signal
    # (i2c signal value, context(Pointer to additional data for the call back function
    # , Callback function to handle data received from the signal))
    libmetawear.mbl_mw_datasignal_subscribe(mmr.i2c_signal, None,
                                            mmr.callback_i2c)

    # Subscribe the acc acc_signal
    # libmetawear.mbl_mw_datasignal_subscribe(acc_signal, None, mmr.callback_acc)

    # Subscribe the gyro gyro acc_signal
    # libmetawear.mbl_mw_datasignal_subscribe(gyro_signal, None, mmr.callback_gyro)

    # device_addr = 7bit(the slave device address) + 1bit(W : 0 / R : 1)
    # Parameter : (device address, register address : CAP DATA REGISTER(0x01))
    # libmetawear.mbl_mw_i2c_write(mmr.device.board, AD7745_ADDR_WRITE, RESET_ADDR, value, 1)

    # Setup the configuration for I2C Communication
    libmetawear.mbl_mw_i2c_write(mmr.device.board, AD7745_ADDR, REG_CAP_SETUP,
                                 c_uint8(CAP_SETUP_PROP), 1)
    sleep(0.5)
    libmetawear.mbl_mw_i2c_write(mmr.device.board, AD7745_ADDR, REG_EXC_SETUP,
                                 c_uint8(EXC_SETUP_PROP), 1)
    sleep(0.5)
    libmetawear.mbl_mw_i2c_write(mmr.device.board,
                                 AD7745_ADDR, REG_CONFIGURATION,
                                 c_uint8(CONFIGURATION_PROP), 1)
    sleep(0.5)
    libmetawear.mbl_mw_i2c_write(mmr.device.board, AD7745_ADDR, REG_CAP_DAC_A,
                                 c_uint8(CAP_DAC_A_PROP), 1)
    sleep(0.5)
Ejemplo n.º 12
0
    def setup(self):
        libmetawear.mbl_mw_settings_set_connection_parameters(
            self.device.board, 7.5, 7.5, 0, 6000)
        sleep(1.5)

        e = Event()

        def processor_created(context, pointer):
            self.processor = pointer
            e.set()

        fn_wrapper = cbindings.FnVoid_VoidP_VoidP(processor_created)

        acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal(
            self.device.board)
        libmetawear.mbl_mw_dataprocessor_average_create(
            acc, 4, None, fn_wrapper)
        e.wait()
        libmetawear.mbl_mw_datasignal_subscribe(self.processor, None,
                                                self.callback)
    def download_data(self, name='blank'):
        try:
            libmetawear.mbl_mw_settings_set_connection_parameters(
                self.device.board, 7.5, 7.5, 0, 6000)
            time.sleep(1.0)

            e = Event()

            def progress_update_handler(context, entries_left, total_entries):
                if (entries_left == 0):
                    e.set()

            fn_wrapper = FnVoid_VoidP_UInt_UInt(progress_update_handler)
            download_handler = LogDownloadHandler(context = None, \
                received_progress_update = fn_wrapper, \
                received_unknown_entry = cast(None, FnVoid_VoidP_UByte_Long_UByteP_UByte), \
                received_unhandled_entry = cast(None, FnVoid_VoidP_DataP))

            # print('Opening log file to write')
            f = open(name + self.default_name, 'a')

            callback = FnVoid_VoidP_DataP(lambda ctx, p: print(
                "{epoch: %d, value: %s}" % (p.contents.epoch, parse_value(p)),
                file=f))
            libmetawear.mbl_mw_logger_subscribe(self.logger, None, callback)
            libmetawear.mbl_mw_logging_download(self.device.board, 0,
                                                byref(download_handler))
            e.wait()

            # close the file, process the data into a csv, then delete the original file
            f.close()
            self.process_data(name)
            # os.remove(name + self.default_name)
            logging.info('data downloaded')

            return 1

        except RuntimeError as err:
            print(err)
            logging.info('runtime error in download_data() occurred')
            return 0
Ejemplo n.º 14
0
import platform
import sys

device = MetaWear('FB:81:71:31:92:7A')
device.connect()


# Callback function to process/parse the battery data
def data_handler(self, ctx, data):
    print("%s -> %s" % (self.device.address, parse_value(data)))


callback = FnVoid_VoidP_DataP(data_handler)
print("Configuring device")
libmetawear.mbl_mw_settings_set_connection_parameters(device.board, 7.5, 7.5,
                                                      0, 6000)

battery_signal = libmetawear.mbl_mw_settings_get_battery_state_data_signal(
    device.board)
libmetawear.mbl_mw_datasignal_subscribe(battery_signal, None, callback)

sleep(1.0)

libmetawear.mbl_mw_datasignal_read(battery_signal)

sleep(5.0)

libmetawear.mbl_mw_datasignal_unsubscribe(battery_signal)
libmetawear.mbl_mw_debug_disconnect(device.board)

device.on_disconnect = lambda status: print("we are disconnected!")
    def __init__(self, mac_adr):

        # Create publisher
        self.frame_id = rospy.get_name().split('/')[-1]

        self.pub_rotation = rospy.Publisher(self.frame_id + '/rotation',
                                            QuaternionStamped,
                                            queue_size=10)
        self.pub_accel = rospy.Publisher(self.frame_id + '/accel',
                                         Vector3Stamped,
                                         queue_size=10)
        self.pub_gyro = rospy.Publisher(self.frame_id + '/gyro',
                                        Vector3Stamped,
                                        queue_size=10)
        self.pub_g = rospy.Publisher(self.frame_id + '/gravity',
                                     Vector3Stamped,
                                     queue_size=10)
        self.pub_acc_lin = rospy.Publisher(self.frame_id + '/lin_acc',
                                           Vector3Stamped,
                                           queue_size=10)

        d = MetaWear(mac_adr)
        d.connect()
        print("Connected to " + d.address)

        self.device = d
        self.samples_acc = 0
        self.samples_rot = 0
        self.samples_gyro = 0

        self.cb_gyro_cpp = FnVoid_VoidP_DataP(self.gyro_cb)
        self.cb_acc_cpp = FnVoid_VoidP_DataP(self.acc_cb)
        self.cb_rot_cpp = FnVoid_VoidP_DataP(self.rot_cb)
        self.cb_g_cpp = FnVoid_VoidP_DataP(self.g_cb)
        self.cb_acc_lin_cpp = FnVoid_VoidP_DataP(self.acc_lin_cb)

        print("Configuring device")
        libmetawear.mbl_mw_settings_set_connection_parameters(
            self.device.board, 10, 20, 0, 6000)

        print("Sensor Fusion")
        libmetawear.mbl_mw_sensor_fusion_set_mode(self.device.board,
                                                  SensorFusionMode.IMU_PLUS)
        libmetawear.mbl_mw_sensor_fusion_set_acc_range(
            self.device.board, SensorFusionAccRange._8G)
        libmetawear.mbl_mw_sensor_fusion_write_config(self.device.board)
        rospy.sleep(1)

        #self.gyro_signal = libmetawear.mbl_mw_sensor_fusion_get_data_signal(self.device.board, SensorFusionData.CORRECTED_GYRO)
        #self.acc_signal = libmetawear.mbl_mw_sensor_fusion_get_data_signal(self.device.board, SensorFusionData.CORRECTED_ACC)
        self.rot_signal = libmetawear.mbl_mw_sensor_fusion_get_data_signal(
            self.device.board, SensorFusionData.QUATERNION)
        #self.g_signal = libmetawear.mbl_mw_sensor_fusion_get_data_signal(self.device.board, SensorFusionData.GRAVITY_VECTOR)
        #self.acc_lin_signal = libmetawear.mbl_mw_sensor_fusion_get_data_signal(self.device.board, SensorFusionData.LINEAR_ACC)

        rospy.sleep(1)

        #libmetawear.mbl_mw_datasignal_subscribe(self.gyro_signal, None, self.cb_gyro_cpp)
        #libmetawear.mbl_mw_datasignal_subscribe(self.acc_signal, None, self.cb_acc_cpp)
        libmetawear.mbl_mw_datasignal_subscribe(self.rot_signal, None,
                                                self.cb_rot_cpp)
        #libmetawear.mbl_mw_datasignal_subscribe(self.g_signal, None, self.cb_g_cpp)
        #libmetawear.mbl_mw_datasignal_subscribe(self.acc_lin_signal, None, self.cb_acc_lin_cpp)

        rospy.sleep(1)

        #libmetawear.mbl_mw_sensor_fusion_enable_data(self.device.board, SensorFusionData.CORRECTED_GYRO)
        #libmetawear.mbl_mw_sensor_fusion_enable_data(self.device.board, SensorFusionData.CORRECTED_ACC)
        libmetawear.mbl_mw_sensor_fusion_enable_data(
            self.device.board, SensorFusionData.QUATERNION)
        #libmetawear.mbl_mw_sensor_fusion_enable_data(self.device.board, SensorFusionData.GRAVITY_VECTOR)
        #libmetawear.mbl_mw_sensor_fusion_enable_data(self.device.board, SensorFusionData.LINEAR_ACC)

        rospy.sleep(1)

        libmetawear.mbl_mw_sensor_fusion_start(self.device.board)