如何通过Movesense展示应用或Python脚本关联传感器相对时间戳与UTC时间?
如何通过Movesense展示应用或Python脚本关联传感器相对时间戳与UTC时间?
嗨,我来帮你搞定这个Movesense时间戳关联的问题,刚好之前做临床研究采集IMU数据时踩过类似的坑,给你梳理两种可行的方案:
一、用Movesense Showcase App快速建立时间映射
你注意到的「Set Time」功能其实就是核心,只是需要按步骤来建立关联:
- 打开Showcase App并连接到你的Movesense MD传感器;
- 进入「Sensor Info」页面,点击「Set Time」——这个操作会把你手机的当前UTC时间同步到传感器的内部RTC模块:

- 切换到「Developer」选项卡,在REST API输入框中填入
/Time/Detailed,选择「GET」方法发送请求; - 你会收到包含两个关键值的响应:
UtcTime(当前UTC时间,单位微秒)和RelativeTime(传感器的相对时间戳,单位毫秒,自传感器启动或本次同步后开始累加); - 有了这组对应关系,所有IMU数据里的相对时间戳都能转成UTC时间:
目标UTC时间 = 同步时的UtcTime + (数据相对时间戳 - 同步时的RelativeTime) * 1000
(乘1000是把毫秒转微秒,和UtcTime单位统一)
如果采集周期超过49天(uint32相对时间戳的上限),记得定期重新获取/Time/Detailed更新基准,避免时间计算出错。
二、Python脚本方案(你的思路完全正确!)
你写的Python代码方向没毛病,订阅/Time/Detailed就是获取时间映射的标准方式,我帮你补几个关键细节:
1. 主动同步UTC时间(无需依赖Showcase)
如果想让脚本完全独立,可以在连接传感器后主动设置它的UTC时间:
import time import struct # 在run_ble_client函数的client连接成功后添加这段 current_utc_micros = int(time.time() * 1_000_000) # 构造PUT命令:操作码3(PUT)+ 会话ID201 + 资源路径 + 时间payload put_time_cmd = bytearray([3, 201]) + bytearray("/Time/Current", "utf-8") + struct.pack("<q", current_utc_micros) await client.write_gatt_char(WRITE_CHARACTERISTIC_UUID, put_time_cmd, response=True) print(f"已同步传感器UTC时间到:{current_utc_micros}")
2. 用/Time/Detailed的基准转换IMU时间戳
你的notification_handler已经能正确解析UtcTime和RelativeTime,把这组值存为基准后,后续订阅IMU资源(比如/Meas/Acc/13)拿到的相对时间戳,都可以用之前的公式转换成UTC时间。
3. 关于固件选择
你用的Sample GATT SensorData固件是官方推荐的GATT采集固件,完全不需要换其他固件,这个选择很对。
最后再总结下:不管用Showcase还是Python脚本,核心都是通过/Time/Detailed拿到UTC与相对时间的对应关系,以此为基准转换所有数据的时间戳。你的Python方案已经走在正确的路上,加上主动同步时间的逻辑就更完善了。
备注:内容来源于stack exchange,提问作者user28673465




