多传感器时间同步

多传感器时间同步

为什么要时间同步

  1. 每个传感器都有自己的时钟源
  2. 不同传感器具有不同的采样频率
  3. 另外数据传输、camera曝光等都会产生不可控的延迟

为了有效融合多个传感器的感知数据,必须进行时间同步


各传感器时间戳

传感器 时间戳
GPS/GNSS时间戳 GPS时间指的是GPS原子时,是以UTC时间1980年1月6日0时0分0秒为时间基准,以后按照TAI秒长累计计时
camera时间戳 自动驾驶上使用rolling shuttercamera是支持外部触发曝光的,但由于camera帧周期包括曝光时间和readout时间(整帧像素点读出),所以需要关注曝光时间,对于相同cmos芯片的camera,其readout时间是固定的,来反推图像真实时间戳(一般采用曝光中间时间)
lidar时间戳 目前自动驾驶中所使用的lidar,从硬件层面上就支持授时,即有硬件trigger触发LiDAR的数据,并给这一帧数据打上时间戳,LiDAR通常有两种时间同步接口:基于IEEE 1588的以太网时间同步机制和PPS+NMEA协议 (基于GNSS的时间同步机制)
毫米波雷达时间戳 目前主流的车载毫米波雷达采用FMCW调制方式,其上电后开始进行信号的发送和接收,内部有专门的时间机制,无法接收外部的时间。另外毫米波雷达周期性发送can信号,所以可以从can信号中获取数据时间
IMU时间戳 一般IMU与GNSS集成在一起的,假设集成在FPGA上,那么接收FPGA输出的高精度时间脉冲,从而将传感器信号打上高精度时间戳

统一时钟源

通过统一的时钟源给各传感器提供相同的基准时间,各传感器根据提供的基准时间校准各自的时钟时间,从硬件上实现时间同步。因为时钟源都有钟漂,而且每个时钟源钟漂不同,所以即使把各个传感器时间戳在初始时刻对齐,运行一段时间之后,之前对齐的结果就会偏离。解决这个问题的办法就是在硬件上把时钟源统一。

在自动驾驶的传感器配置里,GNSS接收机是必不可少的设备之一,GNSS中导航卫星内置高精度原子钟,GNSS接收机通过解算导航卫星信号,可以获得超高精度的时钟信号。GNSS信号能够达到定位要求时,自身时钟也会受到卫星上原子钟的校正,从而进一步提高精度。
一般可以采用GNSS时间作为统一时间源,通过GNSS给各个传感器提供基准时间,各传感器根据提供的基准时间校准各自的时钟时间;除了GNSS之外,根据需求还可以加入PTP和NTP授时方案,利用网络来进行时间同步。

几个概念:

  1. GNSS授时主要原理是通过PPS+NMEA(例如GPRMC)来授时,GPRMC报文提供年月日时分秒信息(一般通过波特率9600串口发送接收,处理时间为毫秒级别)、PPS则通常使用1PPS即频率为1次每秒的秒脉冲,接入工控机,当工控机支持时,设备接收到PPS脉冲后,毫秒及以下位清零重新计算。整体的时间就是与GPRMC报文中的UTC时间整秒相加,得到系统时间。具体可以参考PPS+GPRMC授时原理

  2. NTP(Network Time Protocol)是用于不同计算机之间同步时钟的网络协议。它的设计目标是使所有的互连的机器之间的时钟与UTC时间只相差若干毫秒。

  3. PTP(Precision Time Protocol,1588 V2)是基于以太网的高精度时钟同步协议,能够实现以太网中多个从节点(各种传感器)与主节点(主机)之间的亚微秒级时钟同步,前提是所有节点之间都通过以太网互联,交换机支持PTP协议,并且每

基于单片机的多传感器时间同步是指在单片机的控制下,使多个传感器能够在同一时间基准下进行数据采集和处理。多传感器时间同步在许多应用中非常重要,如机器人导航、环境监测和工业自动化等。以下是基于单片机的多传感器时间同步的一些关键步骤和考虑因素: 1. **选择合适的时间同步协议**: - **NTP(网络时间协议)**:适用于需要高精度时间同步的网络应用。 - **PTP(精确时间协议)**:适用于需要更高精度时间同步的应用。 - **本地时间同步**:通过硬件中断或定时器实现本地时间同步。 2. **硬件设计**: - **时钟源**:选择一个稳定的时钟源,如晶振或外部时钟模块。 - **通信接口**:确保传感器和单片机之间的通信接口能够支持时间同步协议。 - **中断管理**:使用中断来触发传感器数据采集,确保数据采集的实时性。 3. **软件实现**: - **初始化**:在系统初始化时设置时钟源和通信接口。 - **时间同步算法**:实现时间同步算法,确保所有传感器在同一个时间基准下工作。 - **数据采集和处理**:在同步的时间点采集传感器数据,并进行处理。 4. **调试和验证**: - **调试工具**:使用逻辑分析仪或示波器调试时间同步信号。 - **验证测试**:通过实验验证时间同步的精度和稳定性。 以下是一个简单的示例代码,展示了如何在单片机上实现基本的时间同步: ```c #include <avr/io.h> #include <avr/interrupt.h> volatile unsigned long system_time = 0; ISR(TIMER1_COMPA_vect) { system_time++; } void init_time_sync() { // 初始化定时器1 TCCR1B |= (1 << WGM12) | (1 << CS11) | (1 << CS10); // CTC模式,预分频器64 OCR1A = 15624; // 1秒中断 TIMSK1 |= (1 << OCIE1A); // 允许比较匹配中断 sei(); // 全局中断使能 } unsigned long get_system_time() { cli(); // 禁用中断 unsigned long time = system_time; sei(); // 启用中断 return time; } int main() { init_time_sync(); while (1) { unsigned long current_time = get_system_time(); // 在current_time时刻采集传感器数据 } return 0; } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值