一文读懂TTC碰撞时间算法

2023-12-08 21:20

本文主要是介绍一文读懂TTC碰撞时间算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在当今的自动驾驶车上,需要更先进和复杂的驾驶辅助系统。大多数车通过一个前向摄像头来实现如LDW(lane departure warning)、TSR(traffic sign recognition)、FCW(forward collision warning)等功能。由于应用环境的复杂性,FCW是一个相当具有挑战的任务,一种鲁邦、可靠的ttc估计方法将显得尤为重要。

TTC为自车与前车发生碰撞的时间,定义为自车与障碍物之间的距离除以相对速度。在单目系统中,测距和测速并不是一个简单的任务。而基于单目视觉的TTC估计是在不需要计算实际距离和速度的前提下,算得自车与前车的碰撞时间

TTC计算理论

在视频流中,在一个短暂的时间内,TTC可以通过目标的尺寸除以尺寸变化来计算。证明如下:

令Z为自车与目标的物理距离,\bigtriangleup X为目标物理宽度,D=x2-x1为目标在图像上的像素宽度。

根据相机投影模型 x=Xf/Z可得,

x1=X_1f/Z,         x2=X_2f/Z

目标实际的物理宽度有

\Delta X=X_1-X_2=(x1-x2)*Z/f=D*Z/f

由于在实际的物理环境中,目标的物理宽度是不变的,对物理宽度求导可得:

但是在实际应用场景,相对速度是实时变化的,那么图像中目标的尺寸D和尺寸变化率也是实时变化的,那么,准确地计算出目标的尺寸和尺寸变化率并不是一件容易的事情。为鲁邦、可靠的估算TTC,仅靠上述公式,算得的ttc是不稳定的。

《Time To Contact Estimation Using Interest Points》提供了一种简单、稳定的TTC估算方法。以下内容将围绕该文章介绍TTC的估算方式。

Time To Contact Estimation Using Interest Points

该方法的主要思想:

  • 利用目标关键点估计目标的尺寸变化S;
  • 然后利用S建立目标的匀速运动模型和加速运动模型;
  • 用扩展Kalman滤波跟踪模型参数;
  • 采用策略融合多种运动模型的计算结果。

在实际应用中,本人认为采用匀加速模型(CA)和匀速模型(CV)即可。

运动模型建立

利用相似三角形原理,可得:

w(t)=f*W/d_\theta (t),其中,d_\theta (t)为带参数的运动模型。

那么,在不同时刻,我们有:

\frac{w(t_1) }{w(t_2)}=\frac{d_\theta(t_2)}{d_\theta(t_1)}

t_1=0, t_2=-\bigtriangleup t, s_i=\frac{w(0)}{w(-\bigtriangleup t_i)}。假定已测得若干组s,

则有

假定运动模型为:

其中,

利用最小二乘拟合该2阶曲线,即可求得\tilde{a}\tilde{v}

计算尺寸变化S

\vec{x_i}^{'}\vec{x_i}为不同帧中的对应点(该对应点可通过关键点匹配或者LK光流算得,对于关键点计算,在本文中不做讨论。欢迎评论或者留言)。采用放射变换计算s。

利用最小二乘算法,可求得:

{\hat{s}}是s的有偏估计,目标尺寸w越小,估计误差越大。

多模型跟踪

采用扩展卡尔曼模型跟踪运动模型的参数,运动模型为CA模型和CV模型。再进行多模型的融合决策,得出最终的TTC。

(该论文中,作者没有采用IMM Kalman (Interactive Multi model kalman filter algorithm)对多个模型进行融合。)

(对于Kalman、扩展Kalman、IMM等模型,将在后续文章中更新,欢迎关注、评论和留言)

状态向量为:(见公式7)

对CA模型,一步预测方程为:

雅克比矩阵为:

对CV模型,一步预测方程为:

雅克比矩阵为:

采用上述方程,对CA模型和CV模型进行跟踪。

多模型融合决策

该论文中,作者并没有采用IMM模型进行融合。而是采用了一种简单的逻辑策略,对各个模型计算的TTC进行融合。

融合策略如下:

  • 计算观测值在各个模型中的似然估计p1和p2,估计原理戳here;

d_a(t)=0,可求得ttc的值,即公式7的根。

实验结果

这篇关于一文读懂TTC碰撞时间算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/471356

相关文章

一文详解Java常用包有哪些

《一文详解Java常用包有哪些》包是Java语言提供的一种确保类名唯一性的机制,是类的一种组织和管理方式、是一组功能相似或相关的类或接口的集合,:本文主要介绍Java常用包有哪些的相关资料,需要的... 目录Java.langjava.utiljava.netjava.iojava.testjava.sql

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

java时区时间转为UTC的代码示例和详细解释

《java时区时间转为UTC的代码示例和详细解释》作为一名经验丰富的开发者,我经常被问到如何将Java中的时间转换为UTC时间,:本文主要介绍java时区时间转为UTC的代码示例和详细解释,文中通... 目录前言步骤一:导入必要的Java包步骤二:获取指定时区的时间步骤三:将指定时区的时间转换为UTC时间步

一文详解MySQL索引(六张图彻底搞懂)

《一文详解MySQL索引(六张图彻底搞懂)》MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度,:本文主要介绍MySQL索引的相关资料,文中通过代码介绍的... 目录一、什么是索引?为什么需要索引?二、索引该用哪种数据结构?1. 哈希表2. 跳表3. 二叉排序树4.

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则