APEX AD10 GMSL相机获取相机时间戳#
配置方式#
相机工作模式说明#
工作模式 |
模式说明 |
用法差异 |
注意 |
|---|---|---|---|
使用时间戳 |
曝光开始时间受到设备控制,并且为了时间戳准确,在启动SDK前,相机不会进行拍摄。 |
只能使用sdk来获取图像,使用其他方式无法获取图像。 |
所有相机需使用相同的工作模式。 |
功能作用:#
当用户希望需要精确记录每一帧图像曝光起始时间,用于和其他传感器进行时间匹配的时候,可以使用该工作模式来达到。
当启用“使用时间戳”模式后,相机系统将提供高精度的硬件时间戳信息,直接关联到每张图片的曝光开始时刻。为了确保时间戳的绝对准确性,相机在初始化后会保持待机状态,直到通过专用SDK启动图像采集流程,此时相机才开始拍摄并严格同步于系统时钟。
关键优势:#
高精度时间基准: 核心价值在于提供微秒级甚至更高精度的硬件时间戳,精确标记每帧图像的曝光起始点。
系统级时间同步: 所有支持该功能的相机共享同一时间基准,其触发频率被统一设定为该基准下的所有相机共同支持的频率,保证不同相机采集帧之间时间戳的可比较性和同步性。
消除启动干扰: 应用程序通过SDK正式启动采集前,相机处于非活动状态,不会产生任何图像数据或时间戳。确保了从开始采集的第一帧起,时间戳就是准确、纯净且与应用启动时间严格对齐的。
为关键应用保障数据可靠性: 通过严格控制采集启动时机和时间戳生成机制,为依赖精确时间信息的算法和系统提供了可靠的数据基础。
应用场景:#
此功能适用于对图像帧的绝对时间或相对时间差有严格要求的场景,例如:
多传感器融合:
自动驾驶/机器人定位导航: 精确对齐摄像头图像与激光雷达点云、毫米波雷达信号、IMU数据的时间戳,是进行精准环境感知和定位的关键。
工业自动化: 将相机捕捉到的工件位置、姿态图像与机器人运动控制指令、传感器读数进行毫秒级对齐,实现精确的闭环控制。
高速运动分析与测量:记录高速运动物体在特定时刻的位置和状态,需要精确知道每帧图像对应的曝光时间点来计算速度、加速度或进行轨迹分析。
同步多相机系统:当多个相机需要独立工作但其图像数据最终需要基于精确时间戳进行后处理对齐时(例如离线多视角三维重建或事件分析)。
科学实验数据记录:在物理、生物等实验中,需要将视觉捕捉到的现象与其他实验设备(如高速数据采集卡、信号发生器)记录的数据在时间轴上精确关联。
事件分析:分析特定事件(如冲击、闪光、故障)发生时前后几帧的图像,精确的时间戳有助于确定事件发生的精确时刻和持续时间。
使用方法#
选择对应的相机后,如果该相机支持获取时间戳,则”使用时间戳”可以选择。

选择支持的触发频率
由于触发对于所有相机都相同,因此可选的频率是所有相机共同支持的触发频率。

使用说明#
# export CHECK_TIME=1 调试使用log 测试时不需要执行,否则log太多会阻塞程序
sudo jetson_clocks
rm /tmp/cameras_sdk_demo.log
/opt/miivii/features/gmsl_camera/bin/cameras_sdk_demo
#在屏幕打印中会增加打印日志
#在/tmp/下,会生成cameras_sdk_demo.log文件

字段 |
单位 |
物理含义 |
测试方法 |
|---|---|---|---|
TriggerTimestamp |
纳秒 |
触发该帧的时间 |
根据传输延迟,从队列中获得的触发时间 |
TriggerInterval(trigger) |
毫秒 |
触发间隔 |
与前一Timestamp的差值 |
InterfaceCallInterval |
毫秒 |
接口调用间隔 |
验证方法#
如何确认时间戳是否准确?#
在代码中,会通过检查FrameInterval的方式,来确认时间戳是否准确。
执行命令:
# export CHECK_TIME=1 调试使用log 测试时不需要执行,否则log太多会阻塞程序
sudo jetson_clocks
rm /tmp/cameras_sdk_demo.log
./bin/cameras_sdk_demo -s 1280x720 -d /dev/video0
如果时间戳正常,则不会产生log文件
如果时间戳异常,则产生log文件并在/tmp/cameras_sdk_demo.log中会记录多组时间戳:
Timestamp : 1620958367246484576 FrameInterval : 1620958367246484576 FrameTransferDelay : 67111424 LinuxGetFrameTime : 1620958367313596000 LinuxFrameInterval : 1620958367313596000
Timestamp : 1620958739646034432 FrameInterval : 1620958739646034432 FrameTransferDelay : 67403568 LinuxGetFrameTime : 1620958739713438000 LinuxFrameInterval : 1620958739713438000
Timestamp : 1620958748796023808 FrameInterval : 1620958748796023808 FrameTransferDelay : 80901192 LinuxGetFrameTime : 1620958748876925000 LinuxFrameInterval : 1620958748876925000
Timestamp : 1620958789795973504 FrameInterval : 1620958789795973504 FrameTransferDelay : 72186496 LinuxGetFrameTime : 1620958789868160000 LinuxFrameInterval : 1620958789868160000
Timestamp : 1620959793244763712 FrameInterval : 1620959793244763712 FrameTransferDelay : 73185288 LinuxGetFrameTime : 1620959793317949000 LinuxFrameInterval : 1620959793317949000
Timestamp : 1620959854794691840 FrameInterval : 1620959854794691840 FrameTransferDelay : 68099160 LinuxGetFrameTime : 1620959854862791000 LinuxFrameInterval : 1620959854862791000
Timestamp : 1620960274844196896 FrameInterval : 1620960274844196896 FrameTransferDelay : 68391104 LinuxGetFrameTime : 1620960274912588000 LinuxFrameInterval : 1620960274912588000
Timestamp : 1620960283994186240 FrameInterval : 1620960283994186240 FrameTransferDelay : 71857760 LinuxGetFrameTime : 1620960284066044000 LinuxFrameInterval : 1620960284066044000
Timestamp : 1620960291394178080 FrameInterval : 1620960291394178080 FrameTransferDelay : 68419920 LinuxGetFrameTime : 1620960291462598000 LinuxFrameInterval : 1620960291462598000
如何确认时间戳精度?#
执行命令
# export CHECK_TIME=1 调试使用log 测试时不需要执行,否则log太多会阻塞程序
sudo jetson_clocks
./bin/cameras_sdk_demo -s 1280x720 -d /dev/video0 > log
确认方法
把log导入excel
对FrameInterval取最大最小值
通过最大最小值的差,可以获取时间戳精度。