OpenAXES Example Calibration Dataset
收藏DataCite Commons2023-07-24 更新2024-07-13 收录
下载链接:
https://data.uni-hannover.de/dataset/655d937b-8368-4cdc-8e7c-2403bddf93d5
下载链接
链接失效反馈官方服务:
资源简介:
**This is an example dataset recorded using version 1.0 of the [open-source-hardware OpenAXES IMU](https://github.com/OpenAXES-IMU/OpenAXES). 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](#dataset-recording). 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](https://github.com/OpenAXES-IMU/OpenAXES) see the file [`/calibration/README.md`](https://github.com/OpenAXES-IMU/OpenAXES/blob/main/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: 1. Choose a stury surface on which to perform the calibration, i.e. not a flimsy table that vibrates and sways with each touch. 2. Avoid touching the surface on which you are working during the whole calibration procedure. 3. Avoid walking around or moving on your chair during the whole calibration procedure. 4. Remove all other people and other sources of movement from the room. 2. Insert the IMU into the 3D-printed case 3. Insert the case fully into the calibration fixture 4. 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). 5. 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. * The argument `imuX` must be substituted with the designator of the IMU that is to be calibrated. * The flag `-b` will print battery state information to the console before the measurement starts. * 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 * 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. * 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. 6. Leave the IMU still on the surface for 40 seconds 7. Rotate the icosahedron such that the next numbered side faces up and is oriented correctly readable for the operator. * (_note:_ face number 2 contains the cutout for the IMU case and has no number) * 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. * 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. 8. 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. 9. Again, make sure not to touch the table, walk around, or move on your chair during the still phase. 10. Repeat steps 7-9 for the next numbered face up until number 20. 11. 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. 12. After 37-40 faces, stop the recording by pressing `Ctrl+C` in the terminal running `imu_control.py`. [1]: https://doi.org/10.1109/ICRA.2014.6907297 "Paper 'A robust and easy to implement method for IMU calibration without external equipments' by Tedaldi et al." [2]: https://github.com/JzHuai0108/imu_tk_matlab "Matlab scripts of David Tedaldi's ICRA14 paper, a robust and easy to implement method for IMU calibration by Jianzhu Huai" [3]: https://arxiv.org/pdf/2207.04801.pdf "Preprint 'Improved Calibration Procedure for Wireless Inertial Measurement Units without Precision Equipment' by Webering et al." [4]: https://bitbucket.org/alberto_pretto/imu_tk "The original imu_tk C++ implementation"
本示例数据集基于[开源硬件OpenAXES惯性测量单元(Inertial Measurement Unit, IMU)](https://github.com/OpenAXES-IMU/OpenAXES)的1.0版本录制而成。如需了解该硬件与固件的更多信息,请查阅其GitHub仓库。
本数据集包含四台OpenAXES惯性测量单元的校准序列,校准流程采用OpenAXES仓库与相关论文中提及的二十面体校准治具完成。针对每台惯性测量单元,我们按照[下文所述](#dataset-recording)的流程,使用该二十面体校准治具录制了5组日志数据,这些数据存储于`logs`子目录中。此外,`cuboid_logs`目录包含每台惯性测量单元的2组日志,此类日志仅将设备放置于3D打印外壳的平整平面上。如预印本所述,此类日志无法用于校准,也无法生成可用的校准结果,仅为保证数据集完整性而提供。`openaxes_example_calibration_dataset`子目录还包含用于评估本数据集的MATLAB脚本,对应[我们的预印本][3]。可通过脚本`coefficients-from-mat-files.py`从`.mat`文件中提取校准系数。
## 评估
`matlab_eval`子目录包含用于计算[我们的预印本][3]中评估数据的脚本。运行该脚本需要使用来自[OpenAXES仓库](https://github.com/OpenAXES-IMU/OpenAXES)的修改版`imu_tk_matlab`代码,具体可参考该仓库中[`/calibration/README.md`](https://github.com/OpenAXES-IMU/OpenAXES/blob/main/calibration/README.md)文件。
## 数据集录制
本示例数据集的四台惯性测量单元均按照下述详细流程录制:
1. 尽可能保持环境静止,具体要求如下:
1. 选择坚固的平面进行校准作业,请勿使用摇晃易震的脆弱桌面。
2. 在校准全过程中请勿触碰作业平面。
3. 校准全过程中请勿走动或挪动座椅。
4. 请将房间内其他人员与所有移动源移除。
2. 将惯性测量单元装入3D打印外壳。
3. 将外壳完全插入校准治具。
4. 将治具放置于操作员前方的平整平面上,以便执行校准动作:
A. 将标有数字1的面朝上朝向天花板。
B. 调整数字1的朝向,使操作员可自然读取(数字的顶面朝向操作员外侧)。
5. 使用以下命令开始录制数据:
imu_control.py imuX -b --still=3 --reset --skip=50 --mode=INDEX,ACCEL_ADXL355,ACCEL_BMI160,GYRO
该命令将开始录制惯性测量单元上两颗惯性传感器芯片的原始加速度计与陀螺仪数据,同时记录递增的16位计数器值。
* 参数`imuX`需替换为待校准惯性测量单元的标识符。
* 标志`-b`将在测量开始前于控制台打印电池状态信息。
* 标志`--reset`将在测量开始前重置惯性测量单元的内部状态,具体包括:
* 重新初始化传感器集成电路,例如执行陀螺仪偏移补偿。
* 通过加速度计数据计算新的初始四元数(quaternion),以此重置四元数状态。
* 重置16位INDEX计数器。
* 参数`--still=3`将在惯性测量单元自上次检测到运动后静止满3秒时发出蜂鸣声,提示操作员执行下一个动作。
* 参数`--skip=50`将丢弃前50条接收到的GATT(Generic Attribute Profile)通知,对应约半秒的数据量。此举十分必要,因为传输初始阶段因未知原因导致的数据包丢失概率更高。
6. 让惯性测量单元在平面上静止放置40秒。
7. 旋转二十面体,使下一个带编号的面朝上并调整至操作员可自然读取的朝向。
* (注:编号2的面带有IMU外壳的开槽,无数字标识)
* 可在每个面上绘制指向后续编号方向的小箭头,以加快寻找正确面的速度。
* 建议提前练习几次动作以确保操作流畅,因为长时间摸索会增加总校准时长,可能降低校准方法的精度。
8. 将旋转后的二十面体放回平整平面,使其完全静止,直至蜂鸣声提示静态阶段已被检测到。
9. 静态阶段再次确保请勿触碰桌面、走动或挪动座椅。
10. 重复步骤7至9,直至编号20的面朝上。
11. 完成前20个面的录制后,再重复步骤6至7共17至20次,但本次需将二十面体旋转至随机面,而非按顺序的下一个编号面。
12. 录制37至40个面后,在运行`imu_control.py`的终端中按下`Ctrl+C`停止录制。
[1]: https://doi.org/10.1109/ICRA.2014.6907297 "A robust and easy to implement method for IMU calibration without external equipments" by Tedaldi et al.
[2]: https://github.com/JzHuai0108/imu_tk_matlab "Matlab scripts of David Tedaldi's ICRA14 paper, a robust and easy to implement method for IMU calibration" by Jianzhu Huai
[3]: https://arxiv.org/pdf/2207.04801.pdf "Improved Calibration Procedure for Wireless Inertial Measurement Units without Precision Equipment" preprint by Webering et al.
[4]: https://bitbucket.org/alberto_pretto/imu_tk "The original imu_tk C++ implementation"
提供机构:
LUIS
创建时间:
2023-07-14



