Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ORION — MotionRecorder

Original Raw Inertial-Nav Logger · 双通道运动数据采集器

ORION 是一款面向机器学习数据集的 Android 运动数据采集应用。它以 IMU(惯性测量单元)+ GNSS(卫星定位)双通道独立采集的方式记录原始运动数据,并以双 CSV 文件格式输出,直接对接下游 PyTorch 训练流水线(motion-ml V6 会话数据集格式)。

应用内名称:ORION(versionName 1.5.2 / versionCode 2


功能特性

  • 双通道独立采集
    • IMU:加速度计 + 陀螺仪 + 旋转矢量(欧拉角),采样率约 50 Hz(SENSOR_DELAY_GAME
    • GNSS:原生 LocationManager 定位 + GNSS 卫星状态监听,采样率约 1 Hz(不依赖 Google Play Services)
  • 5 种运动模式标注:静止 / 行走 / 电动自行车 / 汽车 / 火车(或更高速)
  • 实时遥测仪表盘
    • GPS 速度、累计里程、最高/平均速度
    • 瞬时 G 力、纵向/横向 G 力、峰值 G 力
    • 卫星锁定数、定位精度、HDOP、定位供应商
    • 电池电量、IMU/GNSS 实测采样率、采集质量评估(GOOD/FAIR/POOR)
  • 前台服务录制foregroundServiceType="location"):息屏/切后台持续采集,通知栏实时状态
  • 双 CSV 独立落盘:Android 10+ 走 MediaStore,低版本走公共存储 Documents/MotionRecorder/
  • 设置页:跟随系统 / 浅色 / 深色主题切换(DataStore 持久化)

技术栈

组件 选型
UI Jetpack Compose + Material 3(BOM 2026.06.01
语言 Kotlin 2.2.10
构建 AGP 9.3.1 · Gradle 9.5.0(Kotlin DSL)
架构 MVVM:MainActivity + MainViewModel + RecordingService(LifecycleService)
异步 Kotlin Coroutines / Flow(StateFlow 状态同步)
导航 Navigation Compose 2.9.8
存储 DataStore Preferences 1.2.1
CSV opencsv 5.12.0(本应用为自研轻量写入)
最低系统 Android 8.0(API 26),targetSdk 34,compileSdk 37

环境要求

  • JDK 17(sourceCompatibility / targetCompatibility = 17)
  • Android SDK Platform 37
  • Gradle Wrapper 9.5.0(首次构建自动下载;国内网络建议将 gradle-wrapper.properties 中的发行地址替换为腾讯镜像)

构建

# 调试 APK
./gradlew assembleDebug
# 产物: app/build/outputs/apk/debug/app-debug.apk

# Release(当前未开启混淆)
./gradlew assembleRelease

使用 Android Studio 打开项目根目录直接同步运行即可。

使用说明

  1. 首次启动:授权「精确位置」「通知」权限(通知权限仅 Android 13+ 需要)
  2. 选择运动模式:在主页面上选择本次采集对应的运动类型
  3. 开始录制:点击录制按钮,应用进入前台服务录制模式,可息屏/切后台
  4. 停止录制:点击停止,数据自动写入 Documents/MotionRecorder/,并弹出保存成功对话框(含路径与样本数)

输出位置

系统版本 保存路径
Android 10+ Documents/MotionRecorder/(MediaStore,MIME: text/csv
Android 8–9 /storage/emulated/0/Documents/MotionRecorder/

每个会话输出两个文件(以所选模式和时间戳命名,如 CAR_20260811_143000_imu.csv):

数据格式(CSV)

IMU 文件 — <MODE>_<timestamp>_imu.csv

字段 单位 说明
1 timestamp ms 采集时刻(System.currentTimeMillis()
2–4 acc_x acc_y acc_z m/s² 三轴线性加速度
5–7 gyro_x gyro_y gyro_z rad/s 三轴角速度
8–10 roll pitch yaw deg 旋转矢量换算的欧拉角
11 label 运动模式标签(STATIONARY/WALKING/CYCLING/CAR/TRAIN

GNSS 文件 — <MODE>_<timestamp>_gnss.csv

字段 单位 说明
1 timestamp ms GNSS 定位时刻(Location.time
2 latitude deg 纬度
3 longitude deg 经度
4 altitude m 海拔
5 speed m/s 地速(统一 m/s,非 km/h)
6 bearing deg 航向角
7 accuracy m 水平定位精度
8 satelliteCount 参与解算的卫星数(usedInFix
9 fixStatus 定位状态:LOCKED(accuracy < 20m)/ ACTIVE

数据有效性过滤:纬度/经度为 0 或 accuracy <= 0 的定位点会被丢弃。

项目结构

app/src/main/java/com/motionrecorder/
├── MainActivity.kt              # 主 Activity:权限请求 + 服务绑定 + 页面导航
├── data/
│   ├── ImuCollector.kt          # IMU 传感器采集器(50Hz,含欧拉角换算)
│   ├── GNSSCollector.kt         # GNSS 采集器(原生 LocationManager,1Hz)
│   ├── SensorDataRepository.kt  # 数据仓库:双缓冲 + 双 CSV 落盘
│   ├── MotionMode.kt            # 运动模式枚举
│   ├── RecordingUiState.kt      # 录制 UI 状态 + 质量/连接状态枚举
│   ├── SettingsRepository.kt    # 主题设置(DataStore)
│   ├── GNSSFeatureProvider.kt   # GNSS 特征接口(为未来 IMU+GNSS 融合预留)
│   └── model/
│       ├── IMURecord.kt         # IMU 数据模型 + CSV 序列化
│       ├── GNSSRecord.kt        # GNSS 数据模型 + CSV 序列化
│       └── MotionSession.kt     # 会话模型(独立 IMU/GNSS 流)
├── service/
│   └── RecordingService.kt      # 前台录制服务:采集编排 + 遥测统计 + 通知
├── ui/                          # Compose 页面(模式选择/录制/设置/保存成功)
├── viewmodel/
│   └── MainViewModel.kt         # 状态同步 + 录制控制 + 主题
└── ui/theme/                    # 主题(支持深色模式)

配套项目

本应用是 DG-LAB 运动识别流水线的数据采集端:

MotionRecorder (本应用, Android) ──双CSV ──> motion-ml (PyTorch 训练, V6 会话数据集)
  • motion-ml:PyTorch 时间序列分类流水线(LSTM / CNN-LSTM),直接消费本应用产出的双 CSV 会话数据

注意事项

  • 本应用面向数据集采集设计,数据只写不读、不上传,请妥善保管个人轨迹数据
  • GNSS 精度受环境(楼宇遮挡、隧道)影响,建议开阔场地采集;accuracy >= 20m 时里程累计自动暂停
  • 若需修改 Gradle 发行源,编辑 gradle/wrapper/gradle-wrapper.propertiesdistributionUrl

About

使用IMU和GNSS的双通道运动数据采集器

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages