sensorfusion calibration

Hi, Im performing the sensorfusion calibration as shown in https://youtube.com/watch?v=Bw0WuAyGsnY. However i cant get the gyroscope to be reliable. This is my output when i check sensorFusion.ReadCalibrationStateAsync(): :{accelerometer: HighAccuracy, gyroscope: Unreliable, magnetometer: HighAccuracy}

Is there someting im missing here?

Comments

  • Hrm...not sure what could be wrong. The gyro should be the first one to reach high accuracy calibration and fairly quickly too.

    Does the accuracy ever change?

  • edited December 2018

    The gyroscope value does not change. The Accerometer and Magnometer do change depending on my calibration. Here is my full code taken from the C# tutorial:

    namespace StarterApp {

    public sealed partial class DeviceSetup : Page {
        private IMetaWearBoard metawear;
        private ISensorFusionBosch sensorFusion;
    
        public DeviceSetup() {
            InitializeComponent();
        }
    
        protected async override void OnNavigatedTo(NavigationEventArgs e) {
            base.OnNavigatedTo(e);
    
            metawear = MbientLab.MetaWear.Win10.Application.GetMetaWearBoard(e.Parameter as BluetoothLEDevice);
            sensorFusion = metawear.GetModule<ISensorFusionBosch>();
            sensorFusion.Configure();
    
            var cali = await sensorFusion.ReadCalibrationStateAsync();
            System.Diagnostics.Debug.WriteLine("Cali :" + cali); //outputs Calibration in Debug
    
            await sensorFusion.EulerAngles.AddRouteAsync(source =>
            source.Stream(async data => await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, () =>
            {
                textBox1.Text = data.Value<EulerAngles>().ToString(); //outputs Eulerangles in a Textbox
             })));
                    }
        private void Start_Click(object sender, RoutedEventArgs e) 
        {
            sensorFusion.Start();
            sensorFusion.EulerAngles.Start();
        }
    
        private void Stop_Click(object sender, RoutedEventArgs e)
        {
            sensorFusion.Stop();
            sensorFusion.EulerAngles.Stop();
    
        }
    
        private void Back_Click(object sender, RoutedEventArgs e) {
            if (!metawear.InMetaBootMode) {
                metawear.TearDown();
                metawear.GetModule<IDebug>().DisconnectAsync();
            }
            Frame.GoBack();
        }
    }
    
  • The calibrate state should be polled until it the sensors report high accuracy. We are adding a function to stramline this process, but you will have to do this manually for now.

    Modify your code so it does the state polling and post the result history.

This discussion has been closed.