MinIMU-9 v5 and RTIMULib2

Hi, I am working with the LSM6DS33 and the LIS3MDL on the Pololu MinIMU-9 v5. I wanted to use the mentioned RTIMULib2 but it does not support the mentioned sensors. So I extended the Library and the result can be found here:

RTIMULSM6DS33LIS3MDL.cpp
RTIMULSM6DS33LIS3MDL.h

I am able to receive readings from the gyro, accel and mag. However, I am not sure if I set the axis of the individual sensors correctly (the registers itself and inside the cpp (line 821) at the end).

I run the Linux/RTIMULibDemoGL and calibrated the mag and accel. However, when I select compass only, the blue axis (inside the demo program) points always down. Using fused data, I also see some erroneous effects. If I tilt the imu around one axis it works at first but then turns around another axis inside the demo app too. Another issue that I observe is when I rotate the imu around the z-axis: Inside the program, I see the imu rotating slighty at first but then it stops or even rotates back in the opposite direction.

Can someone take a look at the code and tell me what I am doing wrong or do I have to calibrate the mag/compass using the advanced octave script provided by RTIMULib?

Thank you!

It sounds like you have the direction of one or more sensor axes defined incorrectly in RTImulib.

Have you triple-checked that you completely understand the directions of the axes within the chips themselves, and how those directions relate to the carrier PCB?

When you have done that, verify your understanding by collecting raw data from each sensor in turn, as you rotate the board in space. Make sure that the output data relate properly to the axis definitions and the mounting arrangement.

Finally, make sure you have defined a right handed axial system in RTIMUlib. If you simply change the sign on one axis, you end up with a left handed system.

The axes of the LSM6DS33 (gyro and accel) and the LIS3MDL (mag) point in the same directions on the PCB. I noticed that the blue cone inside the RTIMULibDemoGl program pointed downward in the fused state. Therefore I tried to switch the z-axis of the accel and the mag. This lead to the blue cone pointing upward.

The accel calibration seems to work fine. However, displying accel only, I also do not see controlled rotations inside the application, when I rotate about a single axis.

When I select compass only inside the program, the blue-axis always points down. Also when I try to calibrate the magnetomer I get only negative values for Z no matter how I rotate the IMU.

Rotation about the x-axis:

Gyro Data:   X 2.43735; Y 0.321315; Z 0.0378736
Gyro Data:   X 2.38848; Y 0.477697; Z 0.0305433
Gyro Data:   X 2.26631; Y 0.673173; Z 0.0586431
Gyro Data:   X 2.05862; Y 0.821003; Z 0.0171042
Gyro Data:   X 1.57237; Y 0.91752; Z -0.0280998
Gyro Data:   X 1.5797; Y 0.999376; Z -0.124617
Gyro Data:   X 1.29992; Y 1.06413; Z -0.202807
Gyro Data:   X 1.02137; Y 1.03358; Z -0.207694
Gyro Data:   X 0.674395; Y 0.973719; Z -0.230907
Gyro Data:   X 0.436158; Y 0.919963; Z -0.267559
Gyro Data:   X 0.238237; Y 0.939511; Z -0.250455
Gyro Data:   X 0.111177; Y 0.938289; Z -0.222355
Gyro Data:   X -0.0745256; Y 0.860098; Z -0.196699
Gyro Data:   X -0.22602; Y 0.752586; Z -0.177151
Gyro Data:   X -0.305433; Y 0.669508; Z -0.130725
Gyro Data:   X -0.399506; Y 0.464258; Z -0.124617
Gyro Data:   X -0.442266; Y 0.323759; Z -0.141721
Gyro Data:   X -0.417832; Y 0.210138; Z -0.186925
Gyro Data:   X -0.362854; Y 0.149051; Z -0.195477
Gyro Data:   X -0.238237; Y 0.107512; Z -0.140499
Gyro Data:   X -0.0977384; Y 0.139277; Z -0.107512
Gyro Data:   X 0.0329867; Y 0.101404; Z -0.0525344
Gyro Data:   X 0.173486; Y -0.0305433; Z 0
Gyro Data:   X 0.432493; Y -0.142942; Z -0.00122173
Gyro Data:   X 0.651182; Y -0.191812; Z -0.0574213
Gyro Data:   X 0.877203; Y -0.0671952; Z -0.0403171
Gyro Data:   X 1.16187; Y -0.0305433; Z -0.0354302
Gyro Data:   X 1.36834; Y 0.249233; Z 0.0806342
Gyro Data:   X 1.54305; Y 0.488692; Z 0.142942
Gyro Data:   X 1.68232; Y 0.714712; Z 0.222355
Gyro Data:   X 1.80816; Y 0.875981; Z 0.594983
Gyro Data:   X 1.86558; Y 1.01037; Z 0.395841
Gyro Data:   X 1.92056; Y 1.23028; Z 0.434936
Gyro Data:   X 2.01341; Y 1.2706; Z 0.47281
Gyro Data:   X 2.05495; Y 1.49051; Z 0.525344
Gyro Data:   X 2.09405; Y 1.4563; Z 0.553444
Gyro Data:   X 2.12825; Y 1.47219; Z 0.577879
Gyro Data:   X 2.1588; Y 1.49418; Z 0.53634
Gyro Data:   X 2.17468; Y 1.38666; Z 0.510683
Gyro Data:   X 2.12825; Y 1.34146; Z 0.432493
Gyro Data:   X 1.96332; Y 1.1973; Z 0.415388
Gyro Data:   X 1.8326; Y 1.12888; Z 0.377515
Gyro Data:   X 1.62612; Y 1.00915; Z 0.339641
Gyro Data:   X 1.41232; Y 0.905302; Z 0.272446
Gyro Data:   X 1.17286; Y 0.86865; Z 0.171042
Gyro Data:   X 0.963945; Y 0.792903; Z 0.0476475
Gyro Data:   X 0.808786; Y 0.64263; Z -0.06353
Gyro Data:   X 0.692721; Y 0.460592; Z -0.107512
Gyro Data:   X 0.643852; Y 0.257785; Z -0.0904081
Gyro Data:   X 0.6353; Y 0.133169; Z -0.0598648
Gyro Data:   X 0.643852; Y 0; Z -0.0427606
Gyro Data:   X 0.658513; Y -0.107512; Z -0.0171042
Gyro Data:   X 0.70616; Y -0.146608; Z 0.0109956
Gyro Data:   X 0.733038; Y -0.229685; Z 0.0268781
Gyro Data:   X 0.823446; Y -0.31765; Z 0.0403171
Gyro Data:   X 0.923628; Y -0.387289; Z 0.0427606
Gyro Data:   X 0.992045; Y -0.47281; Z 0.0586431
Gyro Data:   X 1.00671; Y -0.477697; Z 0.0855211
Gyro Data:   X 1.00548; Y -0.489914; Z 0.0867429
Gyro Data:   X 0.965167; Y -0.410501; Z 0.112399
Gyro Data:   X 0.939511; Y -0.387289; Z 0.156382
Gyro Data:   X 0.901637; Y -0.350637; Z 0.19792
Gyro Data:   X 0.835664; Y -0.318872; Z 0.239459
Gyro Data:   X 0.766025; Y -0.15516; Z 0.298102
Gyro Data:   X 0.715934; Y -0.0329867; Z 0.320093
Gyro Data:   X 0.680504; Y -0.06353; Z 0.361632
Gyro Data:   X 0.709825; Y -0.107512; Z 0.436158
Gyro Data:   X 0.709825; Y -0.141721; Z 0.45204
Gyro Data:   X 0.736704; Y -0.13439; Z 0.482584
Gyro Data:   X 0.728151; Y -0.0439823; Z 0.524122
Gyro Data:   X 0.13439; Y -0.532674; Z 0.482584
Gyro Data:   X -1.24983; Y -0.98838; Z 0.405615
Gyro Data:   X -1.90223; Y -0.67806; Z 0.338419
Gyro Data:   X -1.74585; Y -0.421497; Z 0.338419
Gyro Data:   X -1.82404; Y -0.583987; Z 0.370184
Gyro Data:   X -1.96088; Y -0.717156; Z 0.386067
Gyro Data:   X -1.66644; Y -0.834442; Z 0.307876
Gyro Data:   X -1.14476; Y -0.966389; Z 0.196699
Gyro Data:   X -0.733038; Y -1.17653; Z 0.00366519
Gyro Data:   X -0.454484; Y -1.30847; Z -0.113621
Gyro Data:   X -0.411723; Y -1.40132; Z -0.222355
Gyro Data:   X -0.566883; Y -1.37933; Z -0.327424
Gyro Data:   X -0.756251; Y -1.23273; Z -0.38118
Gyro Data:   X -1.13987; Y -0.657291; Z -0.436158
Gyro Data:   X -1.39399; Y -0.894307; Z -0.372628
Gyro Data:   X -1.57848; Y -0.801455; Z -0.274889
Gyro Data:   X -1.61391; Y -0.842994; Z -0.207694
Gyro Data:   X -1.54305; Y -0.904081; Z -0.189368
Gyro Data:   X -1.48196; Y -0.968832; Z -0.252898
Gyro Data:   X -1.2987; Y -0.873537; Z -0.340863
Gyro Data:   X -1.16064; Y -0.739147; Z -0.525344
Gyro Data:   X -1.08978; Y -0.532674; Z -0.637743
Gyro Data:   X -0.735482; Y 0.111177; Z -0.788016
Gyro Data:   X -0.375071; Y 1.08245; Z -0.834442
Gyro Data:   X -0.138056; Y 1.19607; Z -0.689056
Gyro Data:   X -0.160047; Y 1.06413; Z -0.443488
Gyro Data:   X -0.144164; Y 1.1301; Z -0.229685
Gyro Data:   X 0.259007; Y 0.403171; Z 0.221133
Gyro Data:   X 0.279776; Y -0.0794125; Z 0.574213

Rotate y-axis:

Gyro Data:   X -0.811229; Y 2.41414; Z -2.15758
Gyro Data:   X -0.733038; Y 2.35916; Z -2.20522
Gyro Data:   X -0.323759; Y 2.28341; Z -2.08794
Gyro Data:   X -0.461814; Y 2.22111; Z -1.93278
Gyro Data:   X -0.235794; Y 2.04151; Z -1.74463
Gyro Data:   X -0.11973; Y 1.6078; Z -1.48196
Gyro Data:   X -0.00488692; Y 1.89613; Z -1.25594
Gyro Data:   X 0.125838; Y 1.34879; Z -1.08367
Gyro Data:   X 0.0561996; Y 2.07572; Z -0.863763
Gyro Data:   X 0.0879646; Y 2.3897; Z -0.76969
Gyro Data:   X 0.202807; Y 2.24432; Z -0.630413
Gyro Data:   X 0.389732; Y 2.15147; Z -0.533896
Gyro Data:   X 0.486249; Y 2.50333; Z -0.400728
Gyro Data:   X 0.525344; Y 2.91261; Z -0.228464
Gyro Data:   X 0.493579; Y 3.36953; Z -0.0415388
Gyro Data:   X 0.401949; Y 3.79714; Z 0.00122173
Gyro Data:   X 0.00244346; Y 4.08913; Z 0.0329867
Gyro Data:   X 0.233351; Y 2.68781; Z 0.228464
Gyro Data:   X 0.0757473; Y 2.28464; Z 0.22602
Gyro Data:   X -0.138056; Y 2.05129; Z 0.227242
Gyro Data:   X -0.454484; Y 2.14658; Z 0.153938
Gyro Data:   X -0.884533; Y 2.41536; Z 0.116064
Gyro Data:   X -1.26205; Y 2.33595; Z 0.0720821
Gyro Data:   X -1.51983; Y 2.07328; Z 0.114843
Gyro Data:   X -1.6078; Y 1.73974; Z 0.112399
Gyro Data:   X -1.53327; Y 1.42209; Z 0.111177
Gyro Data:   X -1.40499; Y 1.17897; Z 0.108734
Gyro Data:   X -1.21562; Y 1.09101; Z 0.173486
Gyro Data:   X -1.07024; Y 1.04947; Z 0.229685
Gyro Data:   X -0.883311; Y 1.05191; Z 0.262672
Gyro Data:   X -0.692721; Y 1.07268; Z 0.28955
Gyro Data:   X -0.590096; Y 1.14965; Z 0.309098
Gyro Data:   X -0.427606; Y 1.15209; Z 0.304211
Gyro Data:   X -0.0195477; Y 1.19363; Z 0.256563
Gyro Data:   X -0.200364; Y 1.19974; Z 0.257785
Gyro Data:   X -0.103847; Y 1.19241; Z 0.217468
Gyro Data:   X -0.0818559; Y 1.2535; Z 0.15516
Gyro Data:   X -0.0476475; Y 1.31214; Z 0.045204
Gyro Data:   X -0.0219911; Y 1.39033; Z -0.0708604
Gyro Data:   X 0.0256563; Y 1.50884; Z -0.146608
Gyro Data:   X 0.0598648; Y 1.60658; Z -0.215025
Gyro Data:   X 0.0342085; Y 1.70676; Z -0.285885
Gyro Data:   X 0.00244346; Y 1.81183; Z -0.340863
Gyro Data:   X -0.149051; Y 1.94377; Z -0.426384
Gyro Data:   X -0.271224; Y 2.02319; Z -0.466701
Gyro Data:   X -0.337198; Y 2.15025; Z -0.393397
Gyro Data:   X -0.31765; Y 2.22721; Z -0.312763
Gyro Data:   X -0.316428; Y 2.30296; Z -0.21869
Gyro Data:   X -0.31032; Y 2.29807; Z -0.185703
Gyro Data:   X -0.287107; Y 2.26753; Z -0.182038
Gyro Data:   X -0.28955; Y 2.26753; Z -0.13439
Gyro Data:   X -0.265116; Y 2.18934; Z -0.0781908
Gyro Data:   X -0.294437; Y 2.14414; Z -0.0378736
Gyro Data:   X -0.287107; Y 2.10504; Z 0.0268781
Gyro Data:   X -0.293215; Y 2.02929; Z 0.0305433
Gyro Data:   X -0.293215; Y 1.96943; Z 0.0329867
Gyro Data:   X -0.313985; Y 1.94622; Z 0.0207694
Gyro Data:   X -0.28222; Y 1.934; Z 0.0586431
Gyro Data:   X -0.212581; Y 1.82893; Z 0.0500909
Gyro Data:   X -0.117286; Y 1.78006; Z 0.0415388
Gyro Data:   X 0.0561996; Y 1.67621; Z 0.0904081
Gyro Data:   X 0.251676; Y 1.71409; Z -0.0427606
Gyro Data:   X 0.346971; Y 1.59925; Z -0.0965167
Gyro Data:   X 0.412945; Y 1.63223; Z -0.0757473
Gyro Data:   X 0.430049; Y 1.85825; Z -0.103847
Gyro Data:   X 0.45204; Y 1.50639; Z -0.191812
Gyro Data:   X 0.504575; Y 1.48807; Z -0.21869
Gyro Data:   X 0.5791; Y 1.43187; Z -0.267559
Gyro Data:   X 0.602313; Y 1.47707; Z -0.284663
Gyro Data:   X 0.904081; Y 1.53816; Z -0.169821
Gyro Data:   X 0.976163; Y 1.73241; Z -0.116064
Gyro Data:   X 0.977384; Y 1.88391; Z -0.0586431
Gyro Data:   X 0.919963; Y 1.98165; Z 0.280998
Gyro Data:   X 0.829555; Y 2.18323; Z 0.0733038
Gyro Data:   X 0.737925; Y 2.31151; Z 0.120951
Gyro Data:   X 0.6634; Y 2.26387; Z 0.150273
Gyro Data:   X 0.54367; Y 1.92545; Z 0.243124
Gyro Data:   X 0.456927; Y 2.32862; Z 0.331089
Gyro Data:   X 0.401949; Y 2.49966; Z 0.301767
Gyro Data:   X 0.294437; Y 2.64993; Z 0.252898
Gyro Data:   X 0.196699; Y 2.59007; Z 0.208916
Gyro Data:   X 0.0928515; Y 2.67926; Z 0.19792
Gyro Data:   X 0.0476475; Y 2.71957; Z 0.175929
Gyro Data:   X 0.0219911; Y 2.62916; Z 0.177151
Gyro Data:   X 0.100182; Y 2.55708; Z 0.135612
Gyro Data:   X 0.16249; Y 2.33351; Z 0.109956
Gyro Data:   X 0.177151; Y 2.08061; Z 0.130725
Gyro Data:   X 0.210138; Y 1.73486; Z 0.147829
Gyro Data:   X 0.272446; Y 1.58581; Z 0.188147
Gyro Data:   X 0.333532; Y 1.33046; Z 0.163712
Gyro Data:   X 0.340863; Y 1.14965; Z 0.191812
Gyro Data:   X 0.284663; Y 0.935846; Z 0.193033
Gyro Data:   X 0.250455; Y 0.874759; Z 0.186925
Gyro Data:   X 0.259007; Y 0.708604; Z 0.173486
Gyro Data:   X 0.0488692; Y 0.476475; Z 0.167377
Gyro Data:   X -0.0659734; Y 0.445932; Z -0.0500909
Gyro Data:   X -0.228464; Y 0.712269; Z -0.394619
Gyro Data:   X -0.427606; Y 0.948063; Z -0.619417
Gyro Data:   X -0.631635; Y 0.966389; Z -0.709825
Gyro Data:   X -0.766025; Y 0.879646; Z -0.587652
Gyro Data:   X -0.908967; Y 0.841772; Z -0.41661
Gyro Data:   X -1.05558; Y 0.827112; Z -0.26145
Gyro Data:   X -1.2706; Y 0.85399; Z -0.0342085
Gyro Data:   X -1.42454; Y 0.866207; Z 0.103847
Gyro Data:   X -1.62734; Y 1.09956; Z 0.200364
Gyro Data:   X -1.78006; Y 1.36345; Z 0.256563
Gyro Data:   X -1.84237; Y 1.60413; Z 0.285885
Gyro Data:   X -2.15513; Y 1.86192; Z 0.332311
Gyro Data:   X -1.95721; Y 1.88391; Z 0.38118
Gyro Data:   X -2.00119; Y 1.86192; Z 0.448375
Gyro Data:   X -1.96699; Y 1.78861; Z 0.456927
Gyro Data:   X -1.9792; Y 1.79594; Z 0.439823
Gyro Data:   X -1.91934; Y 1.78495; Z 0.338419
Gyro Data:   X -1.78128; Y 2.22111; Z 0.193033
Gyro Data:   X -1.59191; Y 2.72324; Z -0.106291
Gyro Data:   X -1.44286; Y 3.14962; Z -0.408058
Gyro Data:   X -1.27915; Y 3.24247; Z -0.645074
Gyro Data:   X -1.3268; Y 2.28708; Z -0.886976
Gyro Data:   X -0.507018; Y 3.66641; Z -1.08612
Gyro Data:   X -0.522901; Y 2.55953; Z -1.15454
Gyro Data:   X -0.414167; Y 2.26142; Z -1.16431
Gyro Data:   X -0.339641; Y 2.18568; Z -1.12155
Gyro Data:   X -0.311541; Y 1.87536; Z -1.07634
Gyro Data:   X -0.516792; Y 1.78373; Z -0.956615
Gyro Data:   X -0.533896; Y 1.75196; Z -0.763582
Gyro Data:   X -0.723264; Y 1.64689; Z -0.489914
Gyro Data:   X -0.904081; Y 1.42698; Z -0.239459
Gyro Data:   X -1.04336; Y 1.24372; Z 0.00977384
Gyro Data:   X -1.17897; Y 1.10078; Z 0.19059
Gyro Data:   X -1.3158; Y 1.04824; Z 0.357967
Gyro Data:   X -1.38666; Y 0.983493; Z 0.532674
Gyro Data:   X -1.39277; Y 0.959058; Z 0.572992
Gyro Data:   X -1.33046; Y 0.971276; Z 0.593761
Gyro Data:   X -1.29259; Y 0.930959; Z 0.576657
Gyro Data:   X -1.17775; Y 0.877203; Z 0.514349
Gyro Data:   X -1.06046; Y 0.836885; Z 0.498466
Gyro Data:   X -0.974941; Y 0.759916; Z 0.421497
Gyro Data:   X -0.83322; Y 0.618196; Z 0.383623
Gyro Data:   X -0.708604; Y 0.646295; Z 0.415388
Gyro Data:   X -0.619417; Y 0.602313; Z 0.404393
Gyro Data:   X -0.535118; Y 0.548557; Z 0.411723
Gyro Data:   X -0.349415; Y 0.850324; Z 0.386067
Gyro Data:   X -0.235794; Y 0.962724; Z 0.383623
Gyro Data:   X -0.186925; Y 0.982271; Z 0.332311
Gyro Data:   X -0.0598648; Y 1.16797; Z 0.252898
Gyro Data:   X -0.128282; Y 1.03481; Z 0.313985
Gyro Data:   X -0.153938; Y 0.894307; Z 0.343306
Gyro Data:   X -0.290772; Y 0.801455; Z 0.422719
Gyro Data:   X -0.354302; Y 0.691499; Z 0.411723
Gyro Data:   X 0.136834; Y 0.912633; Z 0.212581
Gyro Data:   X 0.533896; Y 1.01159; Z 0.128282
Gyro Data:   X 0.636522; Y 0.944398; Z 0.146608
Gyro Data:   X 0.540005; Y 0.701273; Z 0.177151
Gyro Data:   X 0.503353; Y 0.481362; Z 0.217468
Gyro Data:   X 0.509462; Y 0.335976; Z 0.25412
Gyro Data:   X 0.483805; Y 0.222355; Z 0.267559
Gyro Data:   X 0.397062; Y 0.133169; Z 0.315206
Gyro Data:   X 0.273668; Y 0.122173; Z 0.426384
Gyro Data:   X 0.133169; Y 0.102625; Z 0.481362
Gyro Data:   X -0.0232129; Y 0.0855211; Z 0.513127
Gyro Data:   X -0.174707; Y 0.136834; Z 0.547335
Gyro Data:   X -0.356745; Y 0.277333; Z 0.551
Gyro Data:   X -0.507018; Y 0.48014; Z 0.559553
Gyro Data:   X -0.652404; Y 0.681726; Z 0.554666
Gyro Data:   X -0.755029; Y 0.873537; Z 0.551
Gyro Data:   X -0.800233; Y 0.978606; Z 0.507018
Gyro Data:   X -0.844216; Y 1.09589; Z 0.504575
Gyro Data:   X -0.884533; Y 1.16675; Z 0.470366
Gyro Data:   X -0.905302; Y 1.20707; Z 0.439823
Gyro Data:   X -0.651182; Y 1.24983; Z 0.375071
Gyro Data:   X -0.364076; Y 1.50395; Z 0.168599
Gyro Data:   X -0.215025; Y 1.40866; Z 0.118508
Gyro Data:   X -0.117286; Y 1.2315; Z 0.116064
Gyro Data:   X -0.118508; Y 1.02259; Z 0.113621
Gyro Data:   X -0.167377; Y 0.638965; Z 0.101404
Gyro Data:   X -0.312763; Y 0.443488; Z 0.123395
Gyro Data:   X -0.40928; Y 0.371406; Z 0.158825
Gyro Data:   X -0.478918; Y 0.412945; Z 0.213803
Gyro Data:   X -0.522901; Y 0.481362; Z 0.233351
Gyro Data:   X -0.482584; Y 0.615752; Z 0.24679
Gyro Data:   X -0.475253; Y 0.780686; Z 0.238237
Gyro Data:   X -0.392175; Y 0.966389; Z 0.234572
Gyro Data:   X -0.277333; Y 1.16431; Z 0.249233
Gyro Data:   X -0.223577; Y 1.33535; Z 0.244346
Gyro Data:   X -0.0500909; Y 1.40377; Z 0.18326
Gyro Data:   X 0.0207694; Y 1.46974; Z 0.12706
Gyro Data:   X 0.129503; Y 1.51739; Z 0.129503
Gyro Data:   X 0.200364; Y 1.45386; Z 0.0891863
Gyro Data:   X 0.268781; Y 1.40743; Z 0.167377
Gyro Data:   X 0.300546; Y 1.33169; Z 0.174707
Gyro Data:   X 0.326202; Y 1.18019; Z 0.158825
Gyro Data:   X 0.285885; Y 1.04336; Z 0.167377
Gyro Data:   X 0.193033; Y 0.940732; Z 0.185703
Gyro Data:   X -0.665843; Y 0.491136; Z 0.272446
Gyro Data:   X -0.893085; Y 0.491136; Z 0.265116
Gyro Data:   X -1.05313; Y 0.552222; Z 0.334754
Gyro Data:   X -1.13865; Y 0.660956; Z 0.384845
Gyro Data:   X -1.16187; Y 0.830777; Z 0.410501
Gyro Data:   X -1.14232; Y 1.0287; Z 0.461814
Gyro Data:   X -1.07024; Y 1.25105; Z 0.469145
Gyro Data:   X -1.00426; Y 1.40377; Z 0.448375
Gyro Data:   X -0.855211; Y 1.50639; Z 0.434936
Gyro Data:   X -0.717156; Y 1.60535; Z 0.428827
Gyro Data:   X -0.568105; Y 1.67011; Z 0.404393
Gyro Data:   X -0.476475; Y 1.70798; Z 0.368963
Gyro Data:   X -0.307876; Y 1.66033; Z 0.322537
Gyro Data:   X -0.240681; Y 1.653; Z 0.00733038
Gyro Data:   X -0.140499; Y 1.25105; Z 0.248011
Gyro Data:   X -0.116064; Y 1.44531; Z 0.216246
Gyro Data:   X -0.0708604; Y 1.3158; Z 0.182038
Gyro Data:   X -0.0928515; Y 1.23761; Z 0.195477
Gyro Data:   X -0.129503; Y 1.23517; Z 0.227242
Gyro Data:   X -0.19792; Y 1.12644; Z 0.130725
Gyro Data:   X 0.768468; Y 2.75012; Z 0.0818559
Gyro Data:   X 0.368963; Y 0.412945; Z 0.156382
Gyro Data:   X -0.00366519; Y 0.597426; Z 0.18326
Gyro Data:   X -0.228464; Y 0.781907; Z 0.274889
Gyro Data:   X -0.318872; Y 1.10933; Z 0.410501
Gyro Data:   X -0.210138; Y 1.0739; Z 0.376293
Gyro Data:   X -0.129503; Y 0.930959; Z 0.263894
Gyro Data:   X -0.0574213; Y 0.860098; Z 0.24679
Gyro Data:   X -0.0305433; Y 0.788016; Z 0.195477
Gyro Data:   X -0.00977384; Y 0.722043; Z 0.164934
Gyro Data:   X 0.018326; Y 0.70616; Z 0.140499
Gyro Data:   X -0.0109956; Y 0.718378; Z 0.111177
Gyro Data:   X -0.0549779; Y 0.768468; Z 0.123395
Gyro Data:   X -0.113621; Y 0.858877; Z 0.0977384
Gyro Data:   X -0.205251; Y 0.948063; Z 0.06353
Gyro Data:   X -0.31032; Y 1.02748; Z 0.0268781
Gyro Data:   X -0.405615; Y 1.15209; Z -0.0390954
Gyro Data:   X -0.475253; Y 1.24617; Z -0.0659734
Gyro Data:   X -0.588874; Y 1.39155; Z -0.0293215
Gyro Data:   X -0.6634; Y 1.44775; Z -0.0244346
Gyro Data:   X -0.724486; Y 1.48074; Z -0.0659734
Gyro Data:   X -0.789238; Y 1.57725; Z -0.0549779
Gyro Data:   X -0.792903; Y 1.63712; Z -0.0684169
Gyro Data:   X -0.76969; Y 1.69821; Z -0.0305433
Gyro Data:   X -0.695165; Y 1.70187; Z -0.0354302
Gyro Data:   X -0.598648; Y 1.74463; Z -0.0989602
Gyro Data:   X -0.514349; Y 1.79228; Z -0.0855211
Gyro Data:   X -0.430049; Y 1.83504; Z -0.0574213
Gyro Data:   X -0.318872; Y 1.77029; Z 0.00855211
Gyro Data:   X -0.219911; Y 1.59802; Z -0.0305433
Gyro Data:   X 0.00488692; Y 0.929737; Z 0.11973
Gyro Data:   X 0.0623083; Y 0.693943; Z 0.189368
Gyro Data:   X 0.120951; Y 0.486249; Z 0.160047
Gyro Data:   X 0.095295; Y 0.41661; Z 0.133169
Gyro Data:   X 0.150273; Y 0.346971; Z 0.0781908
Gyro Data:   X 0.161268; Y 0.405615; Z 0.0696386
Gyro Data:   X 0.161268; Y 0.481362; Z -0.0415388
Gyro Data:   X 0.185703; Y 0.529009; Z -0.120951
Gyro Data:   X 0.19792; Y 0.609644; Z -0.215025
Gyro Data:   X 0.16249; Y 0.690278; Z -0.276111
Gyro Data:   X 0.219911; Y 0.751364; Z -0.392175
Gyro Data:   X 0.177151; Y 0.813672; Z -0.535118
Gyro Data:   X 0.212581; Y 0.845438; Z -0.591318
Gyro Data:   X 0.213803; Y 0.886976; Z -0.634078
Gyro Data:   X 0.145386; Y 0.906524; Z -0.667065
Gyro Data:   X 0.166155; Y 0.95295; Z -0.629191
Gyro Data:   X 0.207694; Y 1.01892; Z -0.662178
Gyro Data:   X 0.210138; Y 1.113; Z -0.623083
Gyro Data:   X 0.19059; Y 1.1582; Z -0.632856
Gyro Data:   X 0.223577; Y 1.15331; Z -0.613309
Gyro Data:   X 0.151495; Y 1.1301; Z -0.588874
Gyro Data:   X 0.189368; Y 0.982271; Z -0.583987
Gyro Data:   X 0.212581; Y 0.0989602; Z -0.464258
Gyro Data:   X 0.260229; Y -0.11973; Z -0.367741
Gyro Data:   X 0; Y -0.312763; Z -0.232129
Gyro Data:   X 0.38118; Y -0.419054; Z -0.0647517
Gyro Data:   X 0.48014; Y -0.503353; Z 0.114843
Gyro Data:   X 0.647517; Y -0.48747; Z 0.273668
Gyro Data:   X 0.779464; Y -0.436158; Z 0.376293
Gyro Data:   X 0.885755; Y -0.625526; Z 0.387289
Gyro Data:   X 0.948063; Y -0.229685; Z 0.406836
Gyro Data:   X 0.940732; Y -0.138056; Z 0.346971
Gyro Data:   X 0.866207; Y -0.0415388; Z 0.221133
Gyro Data:   X 0.745256; Y -0.0244346; Z 0.095295
Gyro Data:   X 0.318872; Y -0.0219911; Z -0.0207694
Gyro Data:   X 0.498466; Y -0.0537561; Z -0.0830777
Gyro Data:   X 0.392175; Y 0.00977384; Z -0.160047
Gyro Data:   X 0.21869; Y 0.0928515; Z -0.227242
Gyro Data:   X 0.158825; Y 0.175929; Z -0.266337
Gyro Data:   X 0.101404; Y 0.252898; Z -0.288328
Gyro Data:   X 0.045204; Y 0.356745; Z -0.320093
Gyro Data:   X 0.0354302; Y 0.428827; Z -0.366519
Gyro Data:   X -0.0195477; Y 0.430049; Z -0.419054
Gyro Data:   X -0.06353; Y 0.35308; Z -0.448375
Gyro Data:   X -0.102625; Y 0.205251; Z -0.431271
Gyro Data:   X -0.124617; Y 0.0671952; Z -0.368963
Gyro Data:   X -0.120951; Y -0.0891863; Z -0.288328
Gyro Data:   X 0.0256563; Y -0.378736; Z -0.0561996
Gyro Data:   X 0.0879646; Y -0.382402; Z 0.018326
Gyro Data:   X 0.13439; Y -0.392175; Z 0.0757473
Gyro Data:   X 0.160047; Y -0.323759; Z 0.144164
Gyro Data:   X 0.130725; Y -0.327424; Z 0.167377
Gyro Data:   X 0.0818559; Y -0.274889; Z 0.172264
Gyro Data:   X -0.0219911; Y -0.147829; Z 0.15516
Gyro Data:   X -0.018326; Y -0.031765; Z 0.0610865
Gyro Data:   X -0.0439823; Y 0.105069; Z -0.0342085
Gyro Data:   X -0.0586431; Y 0.239459; Z -0.0781908
Gyro Data:   X -0.00610865; Y 0.337198; Z -0.0268781
Gyro Data:   X 0.0745256; Y 0.415388; Z -0.0561996
Gyro Data:   X 0.193033; Y 0.527788; Z 0.0342085
Gyro Data:   X 0.356745; Y 0.587652; Z 0.109956
Gyro Data:   X 0.474031; Y 0.647517; Z 0.168599
Gyro Data:   X 0.554666; Y 0.707382; Z 0.256563
Gyro Data:   X 0.632856; Y 0.807564; Z 0.295659
Gyro Data:   X 0.718378; Y 0.86865; Z 0.338419
Gyro Data:   X 0.697608; Y 0.915076; Z 0.356745
Gyro Data:   X 0.67806; Y 0.927293; Z 0.355524
Gyro Data:   X 0.609644; Y 0.879646; Z 0.379958
Gyro Data:   X 0.525344; Y 0.73426; Z 0.37385
Gyro Data:   X 0.405615; Y 0.610865; Z 0.382402
Gyro Data:   X 0.342085; Y 0.42394; Z 0.339641
Gyro Data:   X 0.229685; Y 0.169821; Z 0.271224
Gyro Data:   X 0.107512; Y -0.0122173; Z 0.158825
Gyro Data:   X 0; Y -0.0842994; Z 0.076969
Gyro Data:   X -0.530231; Y -0.206472; Z -0.57177
Gyro Data:   X -0.654848; Y -0.239459; Z -0.737925
Gyro Data:   X -0.772134; Y -0.15516; Z -0.842994
Gyro Data:   X -0.866207; Y -0.130725; Z -0.878424
Gyro Data:   X -0.885755; Y -0.124617; Z -0.910189
Gyro Data:   X -0.86865; Y -0.111177; Z -0.915076
Gyro Data:   X -0.761138; Y -0.175929; Z -0.885755
Gyro Data:   X -0.610865; Y -0.259007; Z -0.761138
Gyro Data:   X -0.425162; Y -0.364076; Z -0.629191
Gyro Data:   X -0.251676; Y -0.397062; Z -0.513127
Gyro Data:   X -0.107512; Y -0.406836; Z -0.411723
Gyro Data:   X 0.0696386; Y -0.370184; Z -0.296881
Gyro Data:   X 0.178373; Y -0.32498; Z -0.223577
Gyro Data:   X 0.217468; Y -0.270002; Z -0.131947
Gyro Data:   X 0.300546; Y -0.26145; Z -0.0830777
Gyro Data:   X 0.274889; Y -0.230907; Z -0.0195477
Gyro Data:   X 0.211359; Y -0.169821; Z 0.0488692
Gyro Data:   X 0.207694; Y -0.123395; Z 0.0916298
Gyro Data:   X 0.12706; Y -0.00488692; Z 0.124617
Gyro Data:   X 0.0806342; Y 0.0354302; Z 0.0855211
Gyro Data:   X 0.00855211; Y 0.129503; Z 0.0867429
Gyro Data:   X -0.0464258; Y 0.19059; Z 0.0671952
Gyro Data:   X -0.103847; Y 0.18326; Z 0.0232129
Gyro Data:   X -0.201586; Y 0.138056; Z -0.0390954
Gyro Data:   X -0.257785; Y 0.0280998; Z -0.140499
Gyro Data:   X -0.22602; Y -0.382402; Z -0.21869
Gyro Data:   X -0.194255; Y -0.415388; Z -0.21869
Gyro Data:   X -0.106291; Y -0.417832; Z -0.178373
Gyro Data:   X -0.0598648; Y -0.339641; Z -0.172264
Gyro Data:   X 0.0378736; Y -0.241903; Z -0.145386
Gyro Data:   X 0.0806342; Y -0.184481; Z -0.105069
Gyro Data:   X 0.136834; Y -0.16249; Z -0.161268
Gyro Data:   X 0.179594; Y -0.139277; Z -0.129503
Gyro Data:   X 0.224798; Y -0.15516; Z -0.21869
Gyro Data:   X 0.22602; Y -0.118508; Z -0.219911
Gyro Data:   X 0.227242; Y -0.124617; Z -0.207694
Gyro Data:   X 0.245568; Y -0.221133; Z -0.202807
Gyro Data:   X 0.235794; Y -0.222355; Z -0.167377
Gyro Data:   X 0.257785; Y -0.24679; Z -0.171042
Gyro Data:   X 0.245568; Y -0.299324; Z -0.156382
Gyro Data:   X 0.145386; Y -0.244346; Z -0.124617
Gyro Data:   X 0.149051; Y -0.232129; Z -0.131947
Gyro Data:   X 0.0366519; Y -0.26145; Z -0.138056
Gyro Data:   X -0.0610865; Y -0.204029; Z -0.076969
Gyro Data:   X -0.0867429; Y -0.200364; Z -0.0574213
Gyro Data:   X -0.130725; Y -0.185703; Z -0.031765
Gyro Data:   X -0.185703; Y -0.128282; Z 0.00488692
Gyro Data:   X -0.146608; Y -0.0977384; Z 0.0122173
Gyro Data:   X 0.100182; Y 0.00855211; Z 0.0109956
Gyro Data:   X 0.136834; Y -0.0219911; Z -0.0464258
Gyro Data:   X 0.139277; Y -0.0781908; Z -0.0842994
Gyro Data:   X 0.150273; Y -0.129503; Z -0.095295
Gyro Data:   X 0.131947; Y -0.172264; Z -0.147829
Gyro Data:   X 0.116064; Y -0.144164; Z -0.173486
Gyro Data:   X 0.0745256; Y -0.124617; Z -0.184481
Gyro Data:   X 0.06353; Y -0.149051; Z -0.201586
Gyro Data:   X 0.0549779; Y -0.138056; Z -0.194255
Gyro Data:   X 0.0280998; Y -0.16249; Z -0.185703
Gyro Data:   X 0.0232129; Y -0.161268; Z -0.161268
Gyro Data:   X 0.0256563; Y -0.179594; Z -0.160047
Gyro Data:   X 0.0586431; Y -0.213803; Z -0.139277
Gyro Data:   X 0.0806342; Y -0.196699; Z -0.095295
Gyro Data:   X 0.116064; Y -0.202807; Z -0.06353
Gyro Data:   X 0.151495; Y -0.223577; Z -0.0268781
Gyro Data:   X 0.158825; Y -0.19792; Z -0.00244346
Gyro Data:   X 0.202807; Y -0.255342; Z 0.018326
Gyro Data:   X 0.205251; Y -0.256563; Z 0.0561996
Gyro Data:   X 0.178373; Y -0.237016; Z 0.06353
Gyro Data:   X 0.221133; Y -0.252898; Z 0.0390954
Gyro Data:   X 0.178373; Y -0.233351; Z 0.0366519
Gyro Data:   X 0.147829; Y -0.243124; Z 0.0329867

Rotate z-axis:

Gyro Data:   X 0.0574213; Y 0.306654; Z -1.78617
Gyro Data:   X 0.095295; Y 0.00122173; Z -1.7935
Gyro Data:   X 0.0525344; Y -0.100182; Z -1.52838
Gyro Data:   X 0.0647517; Y -0.141721; Z -1.30603
Gyro Data:   X 0.0439823; Y -0.240681; Z -1.11544
Gyro Data:   X -0.0476475; Y -0.255342; Z -1.03847
Gyro Data:   X -0.0354302; Y -0.284663; Z -0.834442
Gyro Data:   X 0.00122173; Y -0.263894; Z -0.814894
Gyro Data:   X -0.0403171; Y -0.227242; Z -0.751364
Gyro Data:   X -0.0122173; Y -0.109956; Z -0.364076
Gyro Data:   X -0.0171042; Y -0.0171042; Z -0.569326
Gyro Data:   X -0.0464258; Y -0.118508; Z -0.577879
Gyro Data:   X 0.0342085; Y -0.0879646; Z -0.559553
Gyro Data:   X -0.018326; Y -0.101404; Z -0.54367
Gyro Data:   X -0.00244346; Y -0.312763; Z -0.586431
Gyro Data:   X 0.311541; Y -0.0146608; Z -0.586431
Gyro Data:   X 0.0366519; Y 0.0403171; Z -0.609644
Gyro Data:   X 0.0219911; Y -0.00488692; Z -0.658513
Gyro Data:   X 0.0232129; Y 0.0439823; Z -0.588874
Gyro Data:   X 0.0586431; Y 0.0781908; Z -0.653626
Gyro Data:   X 0.0378736; Y 0.309098; Z -0.775799
Gyro Data:   X 0.0305433; Y 0.0293215; Z -0.835664
Gyro Data:   X 0.0207694; Y 0.0549779; Z -0.838107
Gyro Data:   X 0.0439823; Y 0.0708604; Z -0.912633
Gyro Data:   X 0.0537561; Y 0.0439823; Z -0.927293
Gyro Data:   X 0.0830777; Y 0.0488692; Z -1.10689
Gyro Data:   X 0.0830777; Y 0.0598648; Z -1.26205
Gyro Data:   X 0.133169; Y 0.0171042; Z -1.76784
Gyro Data:   X 0.153938; Y 0.0525344; Z -1.96821
Gyro Data:   X 0.138056; Y 0.107512; Z -2.07572
Gyro Data:   X 0.109956; Y 0.0720821; Z -2.01708
Gyro Data:   X 0.153938; Y 0.106291; Z -1.55893
Gyro Data:   X 0.107512; Y 0.0342085; Z -1.1753
Gyro Data:   X 0.107512; Y 0.031765; Z -1.07024
Gyro Data:   X 0.0696386; Y 0.0977384; Z -0.883311
Gyro Data:   X 0.0720821; Y 0.0647517; Z -0.789238
Gyro Data:   X 0.0989602; Y 0.0684169; Z -0.682947
Gyro Data:   X -0.00366519; Y 0.13439; Z -0.659734
Gyro Data:   X 0.018326; Y -0.270002; Z -0.605978
Gyro Data:   X 0.0329867; Y 0.0525344; Z -0.554666
Gyro Data:   X 0.00610865; Y 0.013439; Z -0.35308
Gyro Data:   X 0.0219911; Y -0.0439823; Z -0.340863
Gyro Data:   X 0.0171042; Y 0.0329867; Z -0.168599
Gyro Data:   X 0.013439; Y 0.0256563; Z -0.0122173
Gyro Data:   X 0.00488692; Y 0.0146608; Z 0.0623083
Gyro Data:   X -0.00733038; Y 0.0659734; Z 0.11973
Gyro Data:   X 0; Y 0.0378736; Z 0.0977384
Gyro Data:   X -0.00977384; Y 0.018326; Z 0.00733038
Gyro Data:   X 0.0488692; Y -0.00855211; Z -0.100182
Gyro Data:   X 0.0733038; Y -0.0549779; Z -0.0855211
Gyro Data:   X 0.0427606; Y 0.0476475; Z -0.118508
Gyro Data:   X -0.0293215; Y -0.118508; Z -0.301767
Gyro Data:   X 0.045204; Y 0.0390954; Z -0.161268
Gyro Data:   X 0.00610865; Y 0.00244346; Z -0.135612
Gyro Data:   X 0.00855211; Y 0.031765; Z -0.212581
Gyro Data:   X -0.00488692; Y -0.277333; Z -0.311541
Gyro Data:   X 0.0171042; Y 0.0537561; Z -0.394619
Gyro Data:   X 0.00610865; Y 0.00488692; Z -0.580322
Gyro Data:   X -0.0488692; Y 0.0256563; Z -0.806342
Gyro Data:   X -0.00610865; Y 0.00855211; Z -0.959058
Gyro Data:   X 0.00977384; Y -0.0623083; Z -1.09711
Gyro Data:   X 0.102625; Y -0.157603; Z -1.34268
Gyro Data:   X 0.156382; Y -0.366519; Z -1.36834
Gyro Data:   X 0.168599; Y -0.38851; Z -1.40621
Gyro Data:   X 0.161268; Y -0.470366; Z -1.53572
Gyro Data:   X 0.168599; Y -0.54367; Z -1.56992
Gyro Data:   X 0.189368; Y -0.339641; Z -1.62734
Gyro Data:   X 0.217468; Y -0.658513; Z -1.82771
Gyro Data:   X 0.0830777; Y -0.553444; Z -2.18201
Gyro Data:   X 0.118508; Y -0.520457; Z -1.93522
Gyro Data:   X 0.0158825; Y -0.36041; Z -2.01219
Gyro Data:   X 0.00122173; Y -0.339641; Z -2.08061
Gyro Data:   X 0.0366519; Y -0.351858; Z -2.49355
Gyro Data:   X 0.0122173; Y -0.625526; Z -2.37016
Gyro Data:   X 0.00610865; Y -0.239459; Z -2.42147
Gyro Data:   X 0.00733038; Y -0.15516; Z -2.59373
Gyro Data:   X 0.031765; Y -0.234572; Z -2.50821
Gyro Data:   X 0.0256563; Y -0.06353; Z -2.47034
Gyro Data:   X 0.0280998; Y -0.0280998; Z -2.60962
Gyro Data:   X -0.0293215; Y 0.0268781; Z -2.41658
Gyro Data:   X -0.0598648; Y 0.118508; Z -2.14658
Gyro Data:   X 0.0207694; Y 0.0280998; Z -1.16064
Gyro Data:   X 0.0586431; Y -0.164934; Z -1.00426
Gyro Data:   X 0.0928515; Y -0.16249; Z -0.858877
Gyro Data:   X 0.118508; Y -0.0928515; Z -0.707382
Gyro Data:   X 0.122173; Y 0.0256563; Z -0.673173
Gyro Data:   X 0.0745256; Y -0.0733038; Z -0.70616
Gyro Data:   X 0.0647517; Y 0.0268781; Z -0.725708
Gyro Data:   X 0.0354302; Y -0.129503; Z -0.641409
Gyro Data:   X 0.0207694; Y -0.0219911; Z -0.641409
Gyro Data:   X 0.31032; Y -0.0940733; Z -0.658513
Gyro Data:   X -0.00488692; Y -0.0757473; Z -0.653626
Gyro Data:   X -0.031765; Y -0.0867429; Z -0.645074
Gyro Data:   X -0.0366519; Y -0.0464258; Z -0.682947
Gyro Data:   X -0.0232129; Y -0.109956; Z -0.701273
Gyro Data:   X -0.0171042; Y -0.0684169; Z -0.725708
Gyro Data:   X 0.00855211; Y -0.147829; Z -0.799012
Gyro Data:   X 0.045204; Y -0.114843; Z -0.883311
Gyro Data:   X 0.0671952; Y -0.216246; Z -0.946841
Gyro Data:   X 0.0891863; Y -0.194255; Z -0.968832
Gyro Data:   X 0.0598648; Y -0.0158825; Z -1.08367
Gyro Data:   X 0.0171042; Y -0.277333; Z -1.05191
Gyro Data:   X 0.0268781; Y -0.276111; Z -0.950506
Gyro Data:   X 0.0195477; Y -0.229685; Z -1.00182
Gyro Data:   X 0.0195477; Y -0.227242; Z -0.874759
Gyro Data:   X 0.0268781; Y -0.152716; Z -0.841772
Gyro Data:   X 0.00122173; Y -0.0158825; Z -0.888198
Gyro Data:   X -0.0207694; Y 0.0525344; Z -0.682947
Gyro Data:   X -0.00977384; Y 0.152716; Z -0.682947
Gyro Data:   X -0.0305433; Y 0.193033; Z -0.519235
Gyro Data:   X -0.0415388; Y 0.18326; Z -0.48014
Gyro Data:   X -0.0378736; Y 0.0916298; Z -0.433714
Gyro Data:   X -0.0232129; Y 0.0525344; Z -0.405615
Gyro Data:   X -0.0158825; Y -0.0280998; Z -0.514349
Gyro Data:   X -0.0146608; Y 0.018326; Z -0.483805
Gyro Data:   X -0.0232129; Y 0.0366519; Z -0.431271
Gyro Data:   X -0.0146608; Y 0.031765; Z -0.406836
Gyro Data:   X -0.0146608; Y 0.102625; Z -0.42394
Gyro Data:   X -0.0280998; Y 0.0195477; Z -0.425162
Gyro Data:   X -0.0244346; Y 0.0219911; Z -0.449597
Gyro Data:   X -0.0109956; Y 0.00977384; Z -0.518014
Gyro Data:   X 0.0146608; Y -0.0842994; Z -0.621861
Gyro Data:   X 0.0293215; Y -0.0500909; Z -0.703717
Gyro Data:   X 0; Y -0.0916298; Z -0.755029
Gyro Data:   X 0.0439823; Y -0.0171042; Z -0.828333
Gyro Data:   X 0.0403171; Y -0.130725; Z -1.15942
Gyro Data:   X 0.0623083; Y 0.00977384; Z -1.09467
Gyro Data:   X 0.0158825; Y -0.0354302; Z -1.102
Gyro Data:   X -0.0232129; Y 0.031765; Z -1.10811
Gyro Data:   X -0.0439823; Y 0.206472; Z -0.722043
Gyro Data:   X -0.0598648; Y 0.241903; Z -0.937067
Gyro Data:   X -0.0329867; Y 0.163712; Z -1.17408
Gyro Data:   X -0.0146608; Y 0.076969; Z -0.900415
Gyro Data:   X -0.0207694; Y 0.131947; Z -0.850324
Gyro Data:   X -0.0390954; Y 0.0696386; Z -0.907746
Gyro Data:   X 0.295659; Y 0.0305433; Z -0.955393
Gyro Data:   X -0.00610865; Y 0.0904081; Z -1.04947
Gyro Data:   X -0.0158825; Y 0.0586431; Z -1.04947
Gyro Data:   X -0.00733038; Y -0.00244346; Z -1.05558
Gyro Data:   X -0.0305433; Y 0.00977384; Z -1.05069
Gyro Data:   X -0.0244346; Y 0.0171042; Z -0.908967
Gyro Data:   X -0.0329867; Y -0.00122173; Z -0.907746
Gyro Data:   X -0.0513127; Y 0.0745256; Z -0.850324
Gyro Data:   X -0.0293215; Y 0.0806342; Z -1.15576
Gyro Data:   X -0.0171042; Y 0.0244346; Z -0.933402
Gyro Data:   X -0.00610865; Y -0.0342085; Z -0.880868
Gyro Data:   X -0.0378736; Y 0.0733038; Z -0.814894
Gyro Data:   X -0.045204; Y 0.0561996; Z -0.829555
Gyro Data:   X -0.0329867; Y 0.0781908; Z -0.841772
Gyro Data:   X 0.0122173; Y -0.0378736; Z -0.662178
Gyro Data:   X 0.0219911; Y -0.00610865; Z -0.761138
Gyro Data:   X 0.00366519; Y -0.0158825; Z -0.576657
Gyro Data:   X 0.018326; Y 0.230907; Z -0.619417
Gyro Data:   X -0.0232129; Y -0.045204; Z -0.625526
Gyro Data:   X -0.0122173; Y -0.0232129; Z -0.511905
Gyro Data:   X -0.0293215; Y 0.0598648; Z -0.486249
Gyro Data:   X -0.031765; Y 0.0342085; Z -0.483805
Gyro Data:   X -0.0305433; Y -0.013439; Z -0.520457
Gyro Data:   X -0.0268781; Y -0.045204; Z -0.583987
Gyro Data:   X -0.0232129; Y 0.120951; Z -0.486249
Gyro Data:   X -0.00244346; Y 0.105069; Z -0.594983
Gyro Data:   X 0.00366519; Y 0.0855211; Z -0.588874
Gyro Data:   X 0.311541; Y -0.0476475; Z -0.70616
Gyro Data:   X -0.00488692; Y -0.245568; Z -0.619417
Gyro Data:   X 0.0158825; Y -0.0586431; Z -0.689056
Gyro Data:   X -0.0122173; Y 0.00855211; Z -0.692721
Gyro Data:   X 0.0207694; Y -0.0940733; Z -0.752586
Gyro Data:   X 0.00855211; Y -0.0195477; Z -0.946841
Gyro Data:   X 0.00244346; Y -0.0610865; Z -1.01648
Gyro Data:   X -0.00610865; Y 0.0268781; Z -1.07879
Gyro Data:   X -0.0158825; Y -0.111177; Z -1.13865
Gyro Data:   X -0.018326; Y -0.00733038; Z -1.16064
Gyro Data:   X -0.0122173; Y -0.0109956; Z -1.05924
Gyro Data:   X -0.0390954; Y 0.0366519; Z -1.09834
Gyro Data:   X -0.0549779; Y -0.0390954; Z -1.13377
Gyro Data:   X -0.0390954; Y -0.157603; Z -1.20096
Gyro Data:   X -0.0378736; Y -0.0659734; Z -1.20463
Gyro Data:   X -0.0390954; Y -0.270002; Z -1.24861
Gyro Data:   X -0.0598648; Y -0.0390954; Z -1.29137
Gyro Data:   X -0.0830777; Y 0.0390954; Z -1.19485
Gyro Data:   X -0.0733038; Y 0.0268781; Z -1.19852
Gyro Data:   X -0.0842994; Y 0.123395; Z -1.10322
Gyro Data:   X -0.045204; Y 0.0342085; Z -1.0458
Gyro Data:   X -0.0610865; Y -0.0219911; Z -0.961502
Gyro Data:   X -0.0256563; Y -0.0623083; Z -0.893085
Gyro Data:   X -0.0366519; Y -0.0256563; Z -0.894307
Gyro Data:   X -0.00366519; Y -0.0158825; Z -0.902859
Gyro Data:   X -0.00855211; Y 0.0745256; Z -0.894307
Gyro Data:   X -0.0439823; Y 0.100182; Z -0.83322
Gyro Data:   X -0.00610865; Y 0.0720821; Z -0.929737
Gyro Data:   X -0.00855211; Y 0.0232129; Z -0.901637
Gyro Data:   X -0.00610865; Y 0.0500909; Z -0.901637
Gyro Data:   X -0.0232129; Y 0; Z -0.933402
Gyro Data:   X -0.00244346; Y 0.0781908; Z -0.971276
Gyro Data:   X -0.0207694; Y 0.0378736; Z -1.02625
Gyro Data:   X 0.013439; Y 0.0415388; Z -1.07757
Gyro Data:   X -0.0586431; Y 0.0549779; Z -1.10078
Gyro Data:   X -0.031765; Y -0.00610865; Z -1.14965
Gyro Data:   X -0.0415388; Y 0.101404; Z -1.14843
Gyro Data:   X -0.0610865; Y 0.0476475; Z -1.18752
Gyro Data:   X -0.0525344; Y 0.0745256; Z -1.33291
Gyro Data:   X -0.0745256; Y 0.135612; Z -1.26938
Gyro Data:   X -0.0537561; Y 0.141721; Z -1.30847
Gyro Data:   X -0.0549779; Y 0.0342085; Z -1.34513
Gyro Data:   X -0.0574213; Y 0.0867429; Z -1.5516
Gyro Data:   X -0.06353; Y 0.100182; Z -1.57237
Gyro Data:   X -0.0842994; Y 0.0354302; Z -1.53816
Gyro Data:   X -0.0830777; Y 0.00610865; Z -1.52594
Gyro Data:   X -0.0733038; Y 0.045204; Z -1.51006
Gyro Data:   X -0.0232129; Y 0; Z -1.44897
Gyro Data:   X -0.00122173; Y 0.0366519; Z -1.43431
Gyro Data:   X 0.00733038; Y 0.0244346; Z -1.33413
Gyro Data:   X 0.0378736; Y 0.0207694; Z -1.30847
Gyro Data:   X 0.00855211; Y 0.0598648; Z -1.30114
Gyro Data:   X 0.00855211; Y 0.0427606; Z -1.29259
Gyro Data:   X 0.0354302; Y 0.0476475; Z -1.3097
Gyro Data:   X 0.0574213; Y 0.0561996; Z -1.3439
Gyro Data:   X 0.0745256; Y 0.0476475; Z -1.47463
Gyro Data:   X 0.0500909; Y 0.122173; Z -1.53938
Gyro Data:   X 0.105069; Y 0.0794125; Z -1.61513
Gyro Data:   X 0.118508; Y 0.100182; Z -1.73486
Gyro Data:   X 0.109956; Y 0.0806342; Z -1.82771
Gyro Data:   X 0.100182; Y 0.144164; Z -1.9792
Gyro Data:   X 0.103847; Y 0.11973; Z -2.07205
Gyro Data:   X 0.0904081; Y 0.178373; Z -2.15635
Gyro Data:   X 0.12706; Y 0.135612; Z -2.23088
Gyro Data:   X 0.0537561; Y 0.195477; Z -2.34939
Gyro Data:   X 0.0928515; Y 0.174707; Z -2.44957
Gyro Data:   X 0.0965167; Y 0.182038; Z -2.48989
Gyro Data:   X 0.106291; Y 0.139277; Z -2.41536
Gyro Data:   X 0.118508; Y 0.141721; Z -2.44346
Gyro Data:   X 0.133169; Y 0.175929; Z -2.2883
Gyro Data:   X 0.0720821; Y 0.140499; Z -2.06595
Gyro Data:   X 0.0867429; Y 0.150273; Z -1.99631
Gyro Data:   X 0.0842994; Y 0.105069; Z -1.85581
Gyro Data:   X 0.0977384; Y 0.0928515; Z -1.78739
Gyro Data:   X 0.0733038; Y 0.0916298; Z -1.70065
Gyro Data:   X 0.108734; Y 0.136834; Z -1.55038
Gyro Data:   X 0.0977384; Y 0.103847; Z -1.47219
Gyro Data:   X 0.122173; Y 0.0659734; Z -1.44042
Gyro Data:   X 0.120951; Y 0.0329867; Z -1.4001
Gyro Data:   X 0.108734; Y 0.0537561; Z -1.47707
Gyro Data:   X 0.0757473; Y 0.0671952; Z -1.45142
Gyro Data:   X 0.117286; Y 0.0305433; Z -1.4673
Gyro Data:   X 0.0965167; Y 0.00366519; Z -1.47219
Gyro Data:   X 0.0671952; Y 0.0280998; Z -1.48318
Gyro Data:   X 0.0916298; Y -0.309098; Z -1.44286
Gyro Data:   X 0.0647517; Y -0.0219911; Z -1.49173
Gyro Data:   X 0.095295; Y 0.0146608; Z -1.56748
Gyro Data:   X 0.0720821; Y -0.00610865; Z -1.47952
Gyro Data:   X 0.0488692; Y -0.031765; Z -1.53449
Gyro Data:   X 0.0244346; Y -0.0464258; Z -1.6249
Gyro Data:   X 0.0146608; Y -0.0232129; Z -1.62612
Gyro Data:   X -0.0342085; Y 0.0171042; Z -1.75074
Gyro Data:   X -0.00733038; Y 0.0525344; Z -1.87902
Gyro Data:   X -0.00122173; Y 0.0513127; Z -1.88391
Gyro Data:   X 0.0207694; Y 0.0733038; Z -1.98776
Gyro Data:   X -0.00855211; Y 0.0366519; Z -2.09038
Gyro Data:   X -0.00610865; Y 0.0415388; Z -2.13681

For me the values do not make much sense and I think there is a lot of noise inthese gyro readings. Maybe because the program always tells me that the gyro bias is being calculated and I should keep the IMU still? The problem is that I am not fully acquainted with the RTIMULib.

That will change the handedness of the coordinate system, and is a fatal mistake.

Ok, I will revert these changes and report how the imu behaves with all axes left unchanged (using the original sensor readings).

But why is the blue axis pointing downward when the imu faces upward (lying on the table so that I can see both sensor chips)?
And are those negative mag z-values common?

Do you know what the message about the gyro bias calculation tells me?

In the northern hemisphere the Earth’s magnetic field points into the ground.

The force/acceleration due to gravity also points into the ground, but if the accelerometer is not falling, some other force (from the table surface, for example) is pushing up.

Until you fully understand all the coordinate systems involved, and how to interconvert them, it is pointless to try to alter the code. Forget the “colored axis” display program for now. It just adds another complication.

@Jim_Remington thanks for your hints. I got lucky by trying the following:
I not only switched the sign of the z-axis but also of the y-axis to get the original handedness of the coordinate system back. I did this for the accel and the mag and left the gyro axis unchanged.

RTMath::convertToVector(gyroData, m_imuData.gyro, m_gyroScale, false);
RTMath::convertToVector(accelData, m_imuData.accel, m_accelScale, false);
RTMath::convertToVector(compassData, m_imuData.compass, m_compassScale, false);

//  sort out gyro axes
m_imuData.gyro.setX(m_imuData.gyro.x());
m_imuData.gyro.setY(m_imuData.gyro.y());
m_imuData.gyro.setZ(m_imuData.gyro.z());

//  sort out accel data;
m_imuData.accel.setX(m_imuData.accel.x());
m_imuData.accel.setY(-m_imuData.accel.y());
m_imuData.accel.setZ(-m_imuData.accel.z());

//  sort out compass axes
m_imuData.compass.setX(m_imuData.compass.x());
m_imuData.compass.setY(-m_imuData.compass.y());
m_imuData.compass.setZ(-m_imuData.compass.z());

//  now do standard processing
handleGyroBias();
calibrateAverageCompass();
calibrateAccel();

//  now update the filter
updateFusion();

After I calibrated the compass and accelerometer the rotation about any axis works as expected.

However, as you already noticed, I have to admit that I do not fully understand the code in the library.

I don’t understand why the z-axis of the compass points always downward. Why is the direction independent of the sign of the z-axis in the code or when I turn the imu upside down? I can only think of a part in the code that prevents this from happening and leaves the z-axis pointing into the ground. I noticed, in the mag cal dialog that the z-axis values stay positive or negative (for all orientations), depending on the sign.

I think the library compensates gravity. The calibration manual states that accel values between -1 and 1 for each axis are desired and this is what I get with the accel calibration dialog (see screenshot above).

As far as I understand there are three coordinate systems

  • gyro
  • accel
  • mag

whereas the axes of the accel and mag coordinate systems need to be pointing in the same directions. I am not quite sure about the gyro, but it seems to give me the rotation (rate of change) about each axis of the accel coordinate system and the sign adjusts the rotation direction?

Could you please explain me what gyro bias handling means? And what the code in RTIMU.cpp is doing.

void RTIMU::handleGyroBias()
{
    // do axis rotation

    if ((m_settings->m_axisRotation > 0) && (m_settings->m_axisRotation < RTIMU_AXIS_ROTATION_COUNT)) {
        // need to do an axis rotation
        float *matrix = m_axisRotation[m_settings->m_axisRotation];
        RTIMU_DATA tempIMU = m_imuData;

        // do new x value
        if (matrix[0] != 0) {
            m_imuData.gyro.setX(tempIMU.gyro.x() * matrix[0]);
            m_imuData.accel.setX(tempIMU.accel.x() * matrix[0]);
            m_imuData.compass.setX(tempIMU.compass.x() * matrix[0]);
        } else if (matrix[1] != 0) {
            m_imuData.gyro.setX(tempIMU.gyro.y() * matrix[1]);
            m_imuData.accel.setX(tempIMU.accel.y() * matrix[1]);
            m_imuData.compass.setX(tempIMU.compass.y() * matrix[1]);
        } else if (matrix[2] != 0) {
            m_imuData.gyro.setX(tempIMU.gyro.z() * matrix[2]);
            m_imuData.accel.setX(tempIMU.accel.z() * matrix[2]);
            m_imuData.compass.setX(tempIMU.compass.z() * matrix[2]);
        }

        // do new y value
        if (matrix[3] != 0) {
            m_imuData.gyro.setY(tempIMU.gyro.x() * matrix[3]);
            m_imuData.accel.setY(tempIMU.accel.x() * matrix[3]);
            m_imuData.compass.setY(tempIMU.compass.x() * matrix[3]);
        } else if (matrix[4] != 0) {
            m_imuData.gyro.setY(tempIMU.gyro.y() * matrix[4]);
            m_imuData.accel.setY(tempIMU.accel.y() * matrix[4]);
            m_imuData.compass.setY(tempIMU.compass.y() * matrix[4]);
        } else if (matrix[5] != 0) {
            m_imuData.gyro.setY(tempIMU.gyro.z() * matrix[5]);
            m_imuData.accel.setY(tempIMU.accel.z() * matrix[5]);
            m_imuData.compass.setY(tempIMU.compass.z() * matrix[5]);
        }

        // do new z value
        if (matrix[6] != 0) {
            m_imuData.gyro.setZ(tempIMU.gyro.x() * matrix[6]);
            m_imuData.accel.setZ(tempIMU.accel.x() * matrix[6]);
            m_imuData.compass.setZ(tempIMU.compass.x() * matrix[6]);
        } else if (matrix[7] != 0) {
            m_imuData.gyro.setZ(tempIMU.gyro.y() * matrix[7]);
            m_imuData.accel.setZ(tempIMU.accel.y() * matrix[7]);
            m_imuData.compass.setZ(tempIMU.compass.y() * matrix[7]);
        } else if (matrix[8] != 0) {
            m_imuData.gyro.setZ(tempIMU.gyro.z() * matrix[8]);
            m_imuData.accel.setZ(tempIMU.accel.z() * matrix[8]);
            m_imuData.compass.setZ(tempIMU.compass.z() * matrix[8]);
        }
    }

    RTVector3 deltaAccel = m_previousAccel;
    deltaAccel -= m_imuData.accel;   // compute difference
    m_previousAccel = m_imuData.accel;

    if ((deltaAccel.length() < RTIMU_FUZZY_ACCEL_ZERO) && (m_imuData.gyro.length() < RTIMU_FUZZY_GYRO_ZERO)) {
        // what we are seeing on the gyros should be bias only so learn from this

        if (m_gyroSampleCount < (5 * m_sampleRate)) {
            m_settings->m_gyroBias.setX((1.0 - m_gyroLearningAlpha) * m_settings->m_gyroBias.x() + m_gyroLearningAlpha * m_imuData.gyro.x());
            m_settings->m_gyroBias.setY((1.0 - m_gyroLearningAlpha) * m_settings->m_gyroBias.y() + m_gyroLearningAlpha * m_imuData.gyro.y());
            m_settings->m_gyroBias.setZ((1.0 - m_gyroLearningAlpha) * m_settings->m_gyroBias.z() + m_gyroLearningAlpha * m_imuData.gyro.z());

            m_gyroSampleCount++;

            if (m_gyroSampleCount == (5 * m_sampleRate)) {
                // this could have been true already of course
                m_settings->m_gyroBiasValid = true;
                m_settings->saveSettings();
            }
        } else {
            m_settings->m_gyroBias.setX((1.0 - m_gyroContinuousAlpha) * m_settings->m_gyroBias.x() + m_gyroContinuousAlpha * m_imuData.gyro.x());
            m_settings->m_gyroBias.setY((1.0 - m_gyroContinuousAlpha) * m_settings->m_gyroBias.y() + m_gyroContinuousAlpha * m_imuData.gyro.y());
            m_settings->m_gyroBias.setZ((1.0 - m_gyroContinuousAlpha) * m_settings->m_gyroBias.z() + m_gyroContinuousAlpha * m_imuData.gyro.z());
        }
    }

    m_imuData.gyro -= m_settings->m_gyroBias;
}

By the way here is a summary of some basic principles from the author of the RTIMULib:

https://github.com/richardstechnotes/IMUStuff#this-is-why-trying-to-measure-position-with-a-mems-9-dof-imu-is-doomed-to-failure

First off, let’s review how data fusion works with a 9-dof IMU to obtain orientation in space. A 9-dof IMU has three sensors, each with different roles:

Gyros. These are really the primary sensors in many ways. They provide virtually instantaneous response to orientation changes with relatively low noise. Since they output angular rates, the outputs have to be (discrete) integrated with respect to time to obtain angle changes. However, gyros have no sense of up or down – they contain no absolute reference. They merely sense orientation changes.

Accelerometers. When using an IMU for orientation sensing, the accelerometers’ role is primarily to track the direction of the gravity vector, since this is known to be straight down. Of course, accelerometers aren’t just sensitive to gravitational acceleration – they sense absolutely every small disturbance and can be inherently noisy. However, when nicely filtered, the outputs can be used to maintain an absolute reference to the horizontal plane – i.e. they provide a reference for pitch and roll. They give no information about yaw (heading). One problem they have is when the IMU is subjected to continuous acceleration (on a moving vehicle under acceleration for example or an aircraft in a turn), the reference will be distorted. It is possible to externally measure the speed of the vehicle and this can be used to correct for these accelerations but it is a potential source of error.

Magnetometers. Magnetometers provide the missing yaw reference by sensing the Earth’s magnetic field. However, what they are really doing is sensing the ambient magnetic field which is affected by almost anything – nearby magnets, magnetic materials, which way the wind is blowing etc.

The task of 9-dof fusion software is to take these three sets of measurements (and instantaneous vehicle speed if corrections are necessary) and come up with a (mostly) correct orientation.

Ok, so that’s orientation. Now, position. To try and sense positional changes using an IMU, you basically have to do two things:

Remove the gravity vector to leave the residual accelerations.
Double integrate the residual accelerations with respect to time to give a change in position.
Simple enough in principle – what could go wrong? Well basically everything. For one thing, this piecewise linear integration which basically assumes a constant acceleration for a time step (sample interval) is probably not going to be exactly correct. Given that the accelerations needs to be double integrated, this can cause significant error. Any error in subtracting the rotated gravity vector to obtain residual accelerations will similarly cause large errors in position. Noise in the accelerometers or incorrect calibration will also lead to errors. Etc etc.

So there are many sources of errors. The problem is that there is no way to correct them. Suppose for example that the IMU is actually at rest but, due to previous errors, a small velocity is left. Even with zero residual accelerations, the code will think that the IMU is still moving and keep changing position accordingly. Basically, the whole thing diverges pretty quickly!

Hi Franz
Would it be possible to convert/or use the RTIMULSM6DS33LIS3MDL.cpp and h files, you created to be able to use in Windows. The RTimulib is stable and works for me.

Hi @kwings714,

unfortunately I never tested it with Windows but it should be possible. What have you tried so far? Were you able to build RTIMULib without the files I provided under Windows? Was there a problem building under Windows with the source files from my github repo? Which compiler did you use?

Hi Franz,
I meant to ask if you are planning to convert your work into Windows format. Currently RTimulib does not support LSM6D and LIS3 (minIMU-9 v5).

@kwings714 currently I have not planned that because I don’t have Windows available. However, it should work on Windows too if you are able to compile all the source files using a c++ Windows compiler. I would try MinGW (free) or even Visual Studio and its c++ compiler. And you will probably have to download the Qt Library because the RTIMULib GUI requires it. With that in mind, you could also try to use Qt Creator for Windows (open source).