自动驾驶中的障碍物时间对齐法

描述

自动驾驶算法使用的系统往往不是实时系统,因此每个节点间拿到的数据可能不是同一时间的数据,从而造成系统误差,针对这一现象,工程上往往采用时间对齐内插外推法。这里我们用感知障碍物来举例。

自动驾驶系统有许多重要模块,假设每个模块占用一个进程,即节点,那么进程与进程间需要相互通信来传递数据。决策规划节点需要感知节点传来的障碍物信息来做决策规划。假设在 t 1 t1 t1时间点,决策规划收到了感知障碍物的数据,但这个障碍物的位姿一定是在 t 1 t1 t1时间点的位姿吗,不一定,因为不是实时系统,数据传输存在延时,所以决策规划在 t 1 t1 t1时间点收到的感知障碍物数据很可能是更早的 t 0 t0 t0时间点的数据,这个时间错位可能是几毫秒到几十毫秒,这个时间错位对高速场景可能最终导致障碍物实际距离差出了几米。所以针对这种非实时系统导致的时间错位的情况,我们需要进行时间对齐,内插外推出感知障碍物更准确的位姿。

具体做法

因为感知和定位的需要,自动驾驶系统中往往存在一个全局里程计odometry,odometry是个相对概念,并不代表车辆真实的utm位姿,只是反映了不同时间点位姿的变化过程,这个里程计由translation和rotation组成,反映了车辆x y z yaw pitch roll六个维度的变化。

  1. 在决策规划节点里,我们需要记录odometry历史到现在的一段时间轴,时间轴设置几秒即可,因为延时不会太大,时间轴长了反而会降低程序效率。

  2. 假设在 t 1 t1 t1时刻,决策规划拿到了感知障碍物的数据,那么先读取感知障碍物自带的时间戳,假设为 t 0 t0 t0,这个时间戳是感知发布那一帧信息时打的,这个时间戳往往比此时决策规划的现在的时间更早,因为信息传递需要时间。拿到这个时间戳后,在第1步里记录的时间轴里去找对应的odometry的位姿,并记录为 p o s e 0 pose0 pose0

  3. 根据此时的 t 1 t1 t1时刻,在时间轴里去找对应的odometry的位姿,并记录为 p o s e 1 pose1 pose1

  4. p o s e 0 pose0 pose0 p o s e 1 pose1 pose1可计算出从 t 0 t0 t0时刻到 t 1 t1 t1时刻的位姿转移变化矩阵,记为 t f tf tf

  5. t f tf tf施加到 t 0 t0 t0时刻感知障碍物的位姿上,得到的结果是 t 0 t0 t0时刻感知障碍物在 t 1 t1 t1时刻时相对于本车的位姿

  6. 因为障碍物可能存在速度,因此在做完tf转换后还需预测推理更准确的位置,这里我们采用最简单的cv预测(恒定速度预测),注意在预测前还需对障碍物速度方向施加tf转换。预测时间为 t 1 − t 0 t1-t0 t1t0

  7. 预测的距离方向施加在第5步得到的位姿上,即可得到 t 1 t1 t1时刻,相对于本车,更准确的障碍物车辆的位姿坐标

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/699174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust核心:【所有权】相关知识点

rust在内存资源管理上采用了(先进优秀?算吗)但特立独行的设计思路:所有权。这是rust的核心,贯穿在整个rust语言的方方面面,并以此为基点来重新思考和重构软件开发体系。 涉及到的概念点:借用&am…

C++线性搜索

#include <iostream> #include <vector>int linearSearch(const std::vector<int>& arr, int target) {for (int i 0; i < arr.size(); i) {if (arr[i] target) {return i; // 返回找到元素的索引}}return -1; // 如果没有找到目标元素&#xff0…

使用Postman和JMeter进行signature签名

一、前言 ​ 有些接口的请求会带上sign&#xff08;签名&#xff09;进行请求&#xff0c;各接口对sign的签名内容、方式可能不一样&#xff0c;但一般都是从接口的入参中选择部分内容组成一个字符串&#xff0c;然后再进行签名操作, 将结果赋值给sign; 完整规范的接口文档都会…

Spring Boot与HikariCP:性能卓越的数据库连接池

点击下载《Spring Boot与HikariCP&#xff1a;性能卓越的数据库连接池》 1. 前言 本文将详细介绍Spring Boot中如何使用HikariCP作为数据库连接池&#xff0c;包括其工作原理、优势分析、配置步骤以及代码示例。通过本文&#xff0c;读者将能够轻松集成HikariCP到Spring Boot…

六、回归与聚类算法 - 模型保存与加载

目录 1、API 2、案例 欠拟合与过拟合线性回归的改进 - 岭回归分类算法&#xff1a;逻辑回归模型保存与加载无监督学习&#xff1a;K-means算法 1、API 2、案例

利用序列化和反序列化实现深拷贝

利用序列化和反序列化可以实现对象的深拷贝,具体步骤如下: 将要深拷贝的对象序列化为字节流。从字节流中反序列化出一个新的对象,即完成了深拷贝。下面是一个示例代码: import java.io.*;class MyClass implements Serializable {private static final long serialVersion…

vue : 无法加载文件 C:\Program Files\nodejs\node_global\vue.ps1,因为在此系统上禁止运行脚本。

解决方法&#xff1a; 打开PowerShell&#xff0c;在命令框输入set-ExecutionPolicy RemoteSigned 在PowerShell中输入会出现如下图&#xff0c;输入y即可。

RabbitMQ 部署方式选择

部署模式 RabbitMQ支持多种部署模式&#xff0c;可以根据应用的需求和规模选择适合的模式。以下是一些常见的RabbitMQ部署模式&#xff1a; 单节点模式&#xff1a; 最简单的部署方式&#xff0c;所有的RabbitMQ组件&#xff08;消息存储、交换机、队列等&#xff09;都运行在…

第九节HarmonyOS 常用基础组件28-Select

1、描述 提供下拉选择菜单&#xff0c;可以让用户在多个选项之间选择。 2、接口 Select(options:Array<SelectOption>) 3、SelectOption对象说明 参数名 参数类型 必填 描述 value ResourceStr 是 下拉选项内容。 icon ResourceStr 否 下拉选项图标。 4…

【前端素材】推荐优质后台管理系统Sneat平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;它通常作为一个独立的后台界面存在&#xff0c;供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能&#xff1a; 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

浏览器录屏技术:探索网页内容的视觉记录之道

title: 浏览器录屏技术&#xff1a;探索网页内容的视觉记录之道 date: 2024/2/23 14:32:49 updated: 2024/2/23 14:32:49 tags: 浏览器录屏技术原理Web API应用场景用户体验在线教育产品演示 在当今数字化时代&#xff0c;浏览器录屏技术已经成为了一种强大的工具&#xff0c;…

​LeetCode解法汇总2583. 二叉树中的第 K 大层和

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一棵二叉树的根节点 root 和一个正整…

云原生(Cloud Native)简单介绍

云原生&#xff08;Cloud Native&#xff09;是指那些在云环境中构建和运行应用程序的方法&#xff0c;它充分利用了云计算的灵活性、可扩展性和弹性。云原生技术利用容器、服务网格、微服务、不可变基础设施和声明式API这些技术&#xff0c;来使软件开发和运行更加高效和自动化…

Microsoft 365自定义安装软件

如图&#xff0c;在安装类型的步骤的时候&#xff0c;可以勾选自己想要的软件&#xff08;而非一股脑儿的安装一大堆自己不需要的&#xff09;。

HTB pwn Dragon Army

逆向分析 程序使用了alloca函数扩大了栈区 此处可以泄露libc的地址 程序主要功能在下面 while ( 1 ){while ( 1 ){fflush(stdin);fflush(_bss_start);fprintf(_bss_start, "\n%sDragons: [%d/%d]%s\n\n", "\x1B[1;34m", v5, 13LL, "\x1B[1;37m"…

Java中受检异常和非受检异常

什么是受检异常和非受检异常 受检异常&#xff08;Checked Exceptions&#xff09;和非受检异常&#xff08;Unchecked Exceptions&#xff09;是Java中异常处理的两种主要类型&#xff0c;它们在处理方式和适用场景上有所不同。 受检异常是指在编译时期就必须处理的异常&…

【VIP专属】Python应用案例——基于Flask框架的医疗专家系统小程序

目录 一、项目需求: 二、编译环境: 三、项目结构: 四、功能演示:

挑战30天学完Python:Day18 正则表达式

&#x1f4d8; Day 18 &#x1f389; 本系列为Python基础学习&#xff0c;原稿来源于 30-Days-Of-Python 英文项目&#xff0c;大奇主要是对其本地化翻译、逐条验证和补充&#xff0c;想通过30天完成正儿八经的系统化实践。此系列适合零基础同学&#xff0c;或仅了解Python一点…

测试开源C#人脸识别模块DlibDotNet

百度“C# 换脸”找到参考文献4&#xff0c;发现其中使用DlibDotNet检测并识别人脸&#xff08;之前主要用的是ViewFaceCore&#xff09;&#xff0c;DlibDotNet是Dlib的.net封装版本&#xff0c;后者为开源C工具包&#xff0c;支持机器学习算法、图像处理等算法以支撑各类高级应…

计算机网络实验六 OSPF

一、实验目的和要求 1、掌握 OSPF 的基本配置方法; 2、理解 OSPF 的工作原理。见实验指导书 二、实验环境 1、运行 Windows 2008 Server/XP/7 操作系统的 PC 一台。 2、PacketTracer。 三、实验内容与过程(实验题目和代码) 实验内容: 根据以下任务配置网络:某单位拥…