OpenAXES Example Calibration Dataset

This is an example dataset recorded using version 1.0 of the open-source-hardware OpenAXES IMU. Please see the github repository for more information on the hardware and firmware.

This dataset contains calibration sequences of four OpenAXES IMUs, which were performed using the icosahedral calibration fixture described in the OpenAXES repository and paper. For each IMU, five logs were recorded using the icosahedral calibration fixture according to the procedure described below. These can be found in the logs subdirectory.

Additionally, the cuboid_logs directory contains two logs for each IMU in which the device was only placed on the flat faces of the 3D-printed case. As stated in the preprint, these are not useful for calibration and yield no usable calibration results. They are only provided for completeness.

The openaxes_example_calibration_dataset subdirectory also contains the MATLAB scripts which were used to evaluate the dataset for [our preprint][3]. The script coefficients-from-mat-files.py can be used to extract the calibration coefficients from the .mat files.

Evaluation

The matlab_eval subdirectory contains the scripts used to calculate the evaluation data presented in [our preprint][3]. To run it, you need the patched imu_tk_matlab code from the OpenAXES repository see the file /calibration/README.md there.

Dataset Recording

The example dataset was recorded for all four IMUs according to the procedure detailed below.

  1. Make the environment as still as possible, for example:
  2. Choose a stury surface on which to perform the calibration, i.e. not a flimsy table that vibrates and sways with each touch.
  3. Avoid touching the surface on which you are working during the whole calibration procedure.
  4. Avoid walking around or moving on your chair during the whole calibration procedure.
  5. Remove all other people and other sources of movement from the room.
  6. Insert the IMU into the 3D-printed case
  7. Insert the case fully into the calibration fixture
  8. Place the fixture on a flat surface in front of the operator who will perform the calibration movements A. Place the face with digit 1 facing upwards toward the ceiling B. Orient the digit 1 such that the operator can read it naturally (top side of the digit facing away from the operator).
  9. Start recording the data with the following command: imu_control.py imuX -b --still=3 --reset --skip=50 --mode=INDEX,ACCEL_ADXL355,ACCEL_BMI160,GYRO This command will start recording the raw accelerometer and gyroscope data from both inertial sensor chips on the IMU, along with an increasing 16 bit counter.
  10. The argument imuX must be substituted with the designator of the IMU that is to be calibrated.
  11. The flag -b will print battery state information to the console before the measurement starts.
  12. The flag --reset will reset the internal state of the IMU before starting the measurement, specifically: *
    • Re-initialize the sensor ICs, e.g. performing gyroscope offset compensation
    • Reset the quaternion by calculating a new initial quaternion from the accelerometer data.
    • Reset the 16 bit INDEX counter
  13. The argument --still=3 emit a beeping sound when the IMU has lain still for 3 seconds after the last detected movement, prompting the operator to perform the next movement.
  14. The argument --skip=50 will discard the first 50 GATT notifications received, which corresponds to about half a second of data. This is necessary because the likelihood of packet loss is far greater at the beginning of the transmission due to unknown reasons.
  15. Leave the IMU still on the surface for 40 seconds
  16. Rotate the icosahedron such that the next numbered side faces up and is oriented correctly readable for the operator.
  17. (note: face number 2 contains the cutout for the IMU case and has no number)
  18. It is helpful to draw a small arrow on each face, which points in the general direction of the next number, to speed up the time needed to find the correct face.
  19. The movements should be practiced a few times to ensure smooth execution, because long periods of fumbling will increase the total calibration time, which might decrease the accuracy of the method.
  20. Place the rotated icosahedron back on the flat surface and let it rest completely motionless until the beeping sound indicates that the static phase has been detected.
  21. Again, make sure not to touch the table, walk around, or move on your chair during the still phase.
  22. Repeat steps 7-9 for the next numbered face up until number 20.
  23. After the first 20 faces, repeat steps 6-7 another 17-20 times, but rotate the icosahedron to a random face instead of the next numbered face.
  24. After 37-40 faces, stop the recording by pressing Ctrl+C in the terminal running imu_control.py.

[3]: https://arxiv.org/pdf/2207.04801.pdf "Preprint 'Improved Calibration Procedure for Wireless Inertial Measurement Units without Precision Equipment' by Webering et al."

Data and Resources

Cite this as

Fritz Webering, Nils Stanislawski (2023). Dataset: OpenAXES Example Calibration Dataset. https://doi.org/10.25835/oimsodoy

DOI retrieved: July 14, 2023

Additional Info

Field Value
Imported on August 4, 2023
Last update August 4, 2023
License CC0-1.0
Source https://data.uni-hannover.de/dataset/openaxes-example-calibration-dataset
Version 1.0
Author Fritz Webering
More Authors
Nils Stanislawski
Author Email Fritz Webering
Maintainer Fritz Webering
Maintainer Email Fritz Webering
Source Creation 14 July, 2023, 09:41 AM (UTC+0000)
Source Modified 24 July, 2023, 11:17 AM (UTC+0000)