相机到 IMU 校准和同步工具包
项目描述
该工具箱提供了一个 python 库来执行滚动快门相机-陀螺仪系统的联合校准。
给定陀螺仪和视频数据,这个库可以找到以下参数
真实陀螺仪速率
时间偏移
相机和陀螺仪坐标系之间的旋转
陀螺仪测量偏差
如果您在工作中使用该软件包,请引用以下论文
Ovrén,H 和 Forssén,P.-E。“具有自动校准功能的基于陀螺仪的视频稳定功能。” 2015 年 IEEE 国际机器人与自动化会议 (ICRA)(第 2090-2097 页)。华盛顿州西雅图市
我可以在我的应用程序中使用这些方法吗?
此软件包中的校准方法假设如下
您的相机已校准,包括已知的读出时间
相机帧率是恒定的,并且已知
陀螺仪帧速率是恒定的,并且大约是已知的(在几赫兹或百分比内)
如果视频和陀螺仪数据不是均匀采样的,但您可以访问一些可靠的时间戳,那么您仍然可以使用该方法重新采样数据以使其均匀。“可靠”是指没有漂移的时间戳,也没有(或可忽略不计)抖动。
从 1.0 开始的变化
2.0 版本的crisp 具有新的全自动校准器。这意味着没有令人信服的理由使用以前版本的crisp 中的半手动方法。因此旧的示例脚本已被删除,旧的函数不会导入到模块命名空间中。没有删除旧功能,因此如果您想使用它们,它们仍然可以在子模块中使用。
安装
要使用该包,您需要以下 Python 包:
数字货币
科学派
开放式CV
matplotlib
最简单的方法是从 PyPI 安装:
$ pip install crisp
如果要从源代码构建包,还需要Cython 包。要构建和安装清晰模块,只需运行以下命令:
$ python setup.py build $ python setup.py install
对于仅限用户的安装,将--user添加到安装命令。
用法
陀螺仪和视频数据首先加载到流对象(GyroStream和VideoStream的子类)中。为了能够理解点如何从现实世界映射到图像,视频流还需要一个CameraModel (-subclass) 实例。
import crisp gyro = crisp.GyroStream.from_data(some_data_array) camera_model = crisp.AtanCameraModel(...) # One specific choice of camera model video = crisp.VideoStream.from_file(camera_model, video_file_path)
然后,我们使用AutoCalibrator实例将流连接在一起。由于校准过程需要估计时间偏移和相对旋转,因此首先使用 initialize()成员进行估计。此初始化只需要您提供一个近似的陀螺仪采样率(以赫兹为单位)。
calibrator = crisp.AutoCalibrator(video, gyro) calibrator.initialize(guessed_gyro_rate) result = calibrator.calibrate() # Dict of calibrated parameters
初始化和校准错误可以通过处理 InitializationError和CalibrationError来捕获。
示例脚本
我们捆绑了一个示例脚本gopro_dataset_example.py,它展示了如何将库与我们数据集中的数据一起使用 ( http://www.cvl.isy.liu.se/research/datasets/gopro-gyro-dataset/ )。这与用于生成上述 ICRA 2015 论文的数据集相同。
反馈
有关方法和论文的任何问题,请发送电子邮件至hannes 。奥夫伦@刘。瑟。
关于代码的问题,欢迎您使用 GitHub 提供的工具(问题报告等),或发送电子邮件。
执照
此存储库中的所有代码均在 GPL 版本 3 下获得许可。