# SLAMRecorder
**Repository Path**: whitbyli/slamrecorder
## Basic Information
- **Project Name**: SLAMRecorder
- **Description**: 基于鸿蒙 3.0,使用 Java API 7 开发 APP 录制手机(华为 Nova 9)广角相机、IMU、重力计和 GPS 数据。同时搭建物理数据采集平台,在校园和城市道路场景采集数据,同时在 ORB-SLAM2 和 ORB-SLAM3 上进行运行测试。
- **Primary Language**: Java
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-09-11
- **Last Updated**: 2023-09-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 鸿蒙开发, SLAM数据采集
## README
# SLAMRecorder
## 介绍
基于鸿蒙 3.0,使用 Java API 7 开发 APP 录制手机(华为 Nova 9)广角相机、IMU、重力计和 GPS 数据。同时搭建物理数据采集平台,在校园和城市道路场景采集数据,同时在 [ORB-SLAM2](https://github.com/raulmur/ORB_SLAM2) 和 [ORB-SLAM3](https://github.com/UZ-SLAMLab/ORB_SLAM3) 上进行运行测试。
## 传感器标定
### 广角相机标定
这里使用手机的 800 万像素广角相机,录制分辨率为 1920×1080,录制帧率为 30 fps。笔者使用开源标定算法 Kalibr,Aprilgrid标定板进行标定,部分标定数据如下:
> 这里选用广角相机主要因为智能手机的主摄相机会自动对焦,会轻微改变相机内参,影响图像定位跟踪效果
智能手机广角相机本身做了一定去畸变处理,这里使用径向-切向畸变模型进行标定,标定结果为:
```bash
# 相机投影参数
fx: 880.3842060257779
fy: 880.4146163267155
cx: 939.1481015502462
cy: 542.5638884246227
# 畸变参数
k1: -0.04727872906456901
k2: 0.04543545853401388
p1: 0.0009606739301976519
p2: -0.0008318890478998227
```
### IMU 标定
对于手机中的低精度 IMU 传感器,一般基于阿伦方差计算偏置游走。这里使用 imu_utils 标定,标定结果如下:
```bash
NoiseGyro: 1.5619335837409199e-03 # 陀螺仪噪声
NoiseAcc: 1.3699261174421261e-02 # 加速度计噪声
GyroWalk: 2.4886931086381720e-05 # 陀螺仪零偏随机游走
AccWalk: 5.5743299958731706e-04 # 加速度计零偏随机游走
```
### 相机与 IMU 联合标定
相机与 IMU 联合标定,主要标定二者之间的刚体变换位姿,这里使用 Kalibr 标定结果如下:
```bash
T_body_camera:[0.005560297945577966, -0.9999639770283634, -0.006413090703850012, 0.04680557888837452,
-0.9998891120617873, -0.005648250819648627, 0.01377900007145867, -0.003064218420416064,
-0.01381472645575441, 0.00633576422365484, -0.9998844990420921, -0.02327739312277717,
0.0, 0.0, 0.0, 1.0]
```
相机与 IMU 在手机中的大概位置(IMU 大约在广角镜头下方 4.7 厘米处)和坐标系如下图所示。
### 数据录制
数据录制分为校园场景和城市道路场景,其中校园场景录制,使用三轴云台稳定器步行录制,如下图所示:
城市道路场景,在三轴云台稳定器基础上,装载一个 Z 轴稳定器,骑行录制,如下图所示。
### 原始数据格式
手机录制的原始数据文件目录如下:
```bash
2023-08-10-135348
├── gps.txt # GPS 数据(录制频率大约 1 Hz)
├── gravity.txt # 重力计数据 (100 Hz)
├── imu.txt # IMU 数据 (400 Hz)
├── times.txt # 相机帧时间戳,与 video.mp4 帧数一致
└── video.mp4 # 视频文件,HEVC 编码格式
```
这里提供一个程序 (https://gitee.com/whitbyli/phone-data-process) 可解析 mp4 文件,转换为图片序列并去除图像畸变,同时整理 imu 、重力计数据,便于后续开发测试。
> 另外值得注意的是,手机录制的图像数据以 MP4 视频格式保存,虽极大降低了存储空间需求,但不可避免会产生一些画质损失,但总体影响不大
这里提供校园场景和城市道路场景各一个下载连接:
* 校园场景数据下载:链接: https://pan.baidu.com/s/1qW_nSO6ptrIKBdOnWe4smA 密码: 6nc0
* 城市道路场景数据下载:链接: https://pan.baidu.com/s/1-hHFbiRQPdl4J-TR1cTdbQ 密码: 1gac
### 运行测试
这里仅展示在 ORB-SLAM3 上运行城市道路场景部分运行数据,如下所示(GIF 文件较大,好像需要登录才能加载,并且加载缓慢):