4D雷达跟踪算法代码实现——预处理

        算法设计请参考4D雷达目标检测跟踪算法设计-CSDN博客,这里仅讨论代码实现。

1.坐标转换

        坐标转换是将雷达点云从雷达中心点极坐标系转换到车辆后轴中心的直角坐标系,直接使用公式计算

        x = r*cos(ele+φ)*cos(azi+θ)+OFFSET_X

        y = r*cos(ele+φ)*sin(azi+θ)+OFFSET_Y

        z = r*sin(ele+φ)+OFFSET_Z

        这里ALIGN_PHI是俯仰角标定值,ALIGN_THETA是方位角标定值,为宏定义

tmp_radar.x = tmp_radar.distance * cosf(tmp_radar.elevation + ALIGN_PHI) * cosf(tmp_radar.azimuth + ALIGN_THETA) + OFFSET_X;
tmp_radar.y = tmp_radar.distance * cosf(tmp_radar.elevation + ALIGN_PHI) * sinf(tmp_radar.azimuth + ALIGN_THETA) + OFFSET_Y;
tmp_radar.z = tmp_radar.distance * sinf(tmp_radar.elevation + ALIGN_PHI) + OFFSET_Z;

 2.噪点剔除

        这里先根据ROI粗筛,再根据rcs做进一步处理。

        raw_radar_target和noise_target都是雷达点云结构体,前者是所有原始点云,后者代表噪声点云。被判定为噪声点的原始点云会打上噪声标签,噪声点云记录用作后续分析。

void GetRoiTarget(RadarTarget* raw_radar_target, RadarTarget* noise_target)
{noise_target->timestamp = raw_radar_target->timestamp;noise_target->amb_speed = raw_radar_target->amb_speed;for (size_t i = 0; i < raw_radar_target->points.size(); i++) {auto radar_pt = raw_radar_target->points[i];if (radar_pt.x < noise_x && std::abs(radar_pt.y) < noise_y && radar_pt.z > noise_min_z && radar_pt.z < noise_max_z &&std::abs(radar_pt.azimuth) < noise_azi && std::abs(radar_pt.elevation) < noise_ele &&radar_pt.snr - radar_pt.rcs > noise_snr_rcs) {     // 设置ROI,粗筛radar_pt.noise_flag = false;// 设定噪声点判断条件,可能需要精细调整,目标RCS随距离增加而增加if (radar_pt.distance < noise_near_dis) {                            // 近距if (radar_pt.rcs < noise_near_rcs) {radar_pt.noise_flag = true;noise_target->points.push_back(radar_pt);raw_radar_target->points[i].noise_flag = true;}}else if (radar_pt.distance < noise_far_dis) {						// 中距if (radar_pt.rcs < radar_pt.distance * rcs_coef + noise_near_rcs - noise_near_dis * rcs_coef) {radar_pt.noise_flag = true;noise_target->points.push_back(radar_pt);raw_radar_target->points[i].noise_flag = true;}}else {																// 远距if (radar_pt.rcs < noise_far_rcs) {radar_pt.noise_flag = true;noise_target->points.push_back(radar_pt);raw_radar_target->points[i].noise_flag = true;}}}else {radar_pt.noise_flag = true;noise_target->points.push_back(radar_pt);raw_radar_target->points[i].noise_flag = true;}}raw_radar_target->target_num = raw_radar_target->points.size();noise_target->target_num = noise_target->points.size();
}

         常量数值设置可根据实际使用和数据统计分析得到,这里给出设置的参考

const float noise_near_dis = 10.0f;
const float noise_far_dis = 50.0f;
const float noise_near_rcs = -20.0f;				// 商泰给的地面点门限
const float noise_far_rcs = -10.0f;
// rcs随距离增加的系数
const float rcs_coef = 0.25f;
// 距离、方位角度门限值
const float noise_x = 100.0f;
const float noise_y = 25.0f;
const float noise_min_z = -0.5f;
const float noise_max_z = 2.0f;
const float noise_azi = 55.0f * DEG2RAD;            // 方位角一般120度,筛选110度
const float noise_ele = 10.0f * DEG2RAD;            // 俯仰角一般30度,筛选20度
const float noise_snr_rcs = 0.0f;					// rcs和snr差值,正常snr-rcs > 30

3.动静分离

        动静分离理论上可以选出大部分运动点云,但切向运动的目标由于径向速度接近0,也会被认为是静止点云,需要后续关联跟踪处理。

void SplitMoveStaticPoint(RadarTarget* raw_radar_target, const RadarVehicleInfo& vehicle_info, RadarTarget* static_target, RadarTarget* move_target)
{float threshold_vr = 0.0f;threshold_vr = 0.6f + vehicle_info.speed * 0.08f;static_target->timestamp = raw_radar_target->timestamp;static_target->amb_speed = raw_radar_target->amb_speed;static_target->mea_start_time = raw_radar_target->mea_start_time;static_target->mea_end_time = raw_radar_target->mea_end_time;move_target->timestamp = raw_radar_target->timestamp;move_target->amb_speed = raw_radar_target->amb_speed;move_target->mea_start_time = raw_radar_target->mea_start_time;move_target->mea_end_time = raw_radar_target->mea_end_time;float fix_angle = vehicle_info.steering_angle / trans_ratio * DEG2RAD;						// 雷达相对于车辆的转角for (size_t i = 0; i < raw_radar_target->points.size(); i++) {auto radar_pt = raw_radar_target->points[i];float coef = cosf(radar_pt.elevation) * cosf(radar_pt.azimuth - fix_angle);radar_pt.cal_vr = radar_pt.origin_vr - raw_radar_target->amb_speed;if (fabsf(radar_pt.origin_vr) < fabsf(radar_pt.cal_vr)) {radar_pt.comp_vr = radar_pt.origin_vr + vehicle_info.speed * coef;}else {radar_pt.comp_vr = radar_pt.cal_vr + vehicle_info.speed * coef;}// 非噪声点if (!radar_pt.noise_flag) {if (fabsf(radar_pt.origin_vr + vehicle_info.speed * coef) < threshold_vr ||fabsf(radar_pt.cal_vr + vehicle_info.speed * coef) < threshold_vr) {            // 静止点,后续精细计算概率radar_pt.static_status = 1;radar_pt.static_prob = 1.0f;static_target->points.push_back(radar_pt);}else {																				// 运动点,增加能量筛选        if (radar_pt.rcs > -20.0f) {radar_pt.static_status = 0;radar_pt.static_prob = 0.0f;move_target->points.push_back(radar_pt);}}}}static_target->target_num = static_target->points.size();move_target->target_num = move_target->points.size();
}

      这里涉及参数传动比,不同车辆的数值不同;从实现方法来说,动静分离的准确度和车辆的速度、转向角等有关,车辆传感器精度高结果会准确。

const float trans_ratio = 15.2f;					// 传动比

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

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

相关文章

Maven生命周期

Maven生命周期 通过IDEA工具的辅助&#xff0c;能很轻易看见Maven的九种生命周期命令&#xff0c;如下&#xff1a; 双击其中任何一个&#xff0c;都会执行相应的Maven构建动作&#xff0c;为啥IDEA能实现这个功能呢&#xff1f;道理很简单&#xff0c;因为IDEA封装了Maven提供…

Xred木马是什么

xred是非常常见的蠕虫病毒之一&#xff0c;属于AutoRun家族&#xff0c;样本变种极多&#xff0c;使用Dephi编写。 病毒可通过文件分享和U盘、移动硬盘等媒介传播。 最常见的域名就是&#xff1a; xred.mooo.com 一般会访问链接&#xff0c;下载文件&#xff0c;但是网址文件…

neo4j在Linux上安装及使用

1、简介 neo4j安装主要有两个步骤&#xff1a; 环境配置&#xff1a;Java安装工具下载&#xff1a;neo4j安装 2、java 安装 2.1 检查 安装前可以检查下&#xff0c;当前环境是否有Java 查看是否安装&#xff1a;java -version 说明当前环境没有&#xff0c;那么去下载 …

87基于matlab的双卡尔曼滤波算法

基于matlab的双卡尔曼滤波算法。第一步使用了卡尔曼滤波算法&#xff0c;用电池电压来修正SOC&#xff0c;然后将修正后的SOC作为第二个卡尔曼滤波算法的输入&#xff0c;对安时积分法得到的SOC进行修正&#xff0c;最终得到双卡尔曼滤波算法SOC估计值。结合EKF算法和安时积分法…

浅谈无线测温系统在海上石油平台高压配电盘的应用-安科瑞 蒋静

摘要&#xff1a;海上石油平台的封闭式中高压配电盘在平台电力系统起着十分重要的作用&#xff0c;通过统计其配电盘的 大部分故障为前期的热效应引起&#xff0c;由于配电盘内部空间封闭狭小&#xff0c;所以无法进行人工巡查测温&#xff0c;这给油田的供电系统埋下了一定的潜…

Web3.0时代:区块链DAPP将如何颠覆传统模式

小编介绍&#xff1a;10年专注商业模式设计及软件开发&#xff0c;擅长企业生态商业模式&#xff0c;商业零售会员增长裂变模式策划、商业闭环模式设计及方案落地&#xff1b;扶持10余个电商平台做到营收过千万&#xff0c;数百个平台达到百万会员&#xff0c;欢迎咨询。 随着…

css实现鼠标移入背景图片变灰并浮现文字的效果

首先上效果图 说明一下我的html结构 如上图是一个div包裹的img标签, div的块大小width, height 自己定义, 我说明一下核心样式代码 下面写法是scss, 请自行替换 .web-query-image {position: relative; // 相对定位, 方便浮现文案进行绝对定位border-radius: 8px;box-sizing: …

论文阅读——DDeP(cvpr2023)

分割标签耗时且贵&#xff0c;所以常常使用预训练提高分割模型标签有效性&#xff0c;反正就是&#xff0c;需要一个预训练分割模型。典型的分割模型encoder部分通过分类任务预训练&#xff0c;decoder部分参数随机初始化。作者认为这个方法次优&#xff0c;尤其标签比较少的情…

Kettle连接到GBase 8s数据库

1&#xff0c;将GBase 8s数据库驱动放到kettle的lib目录下 如下图&#xff0c;在data-integration\lib下添加连接GBase 8s数据库的驱动gbasedbtjdbc.jar(视Server版本&#xff0c;增加匹配的驱动) 2&#xff0c;在 文件 -> 新建 -> 数据库连接 或者是在 转换 -> D…

探索容灾架构演进之路,从单点到异地多活

1. 挑战与变革 在公司发展初期&#xff0c;业务发展和用户增长是首要关注的焦点。然而&#xff0c;随着业务规模不断扩大&#xff0c;用户数量逐渐攀升&#xff0c;应用稳定性的重要性也变得愈发凸显。在这个演进过程中&#xff0c;传统架构下的应用部署模式开始显露出多方面的…

【Java】IDEA 基本操作

0.IDEA 0.1 IDEA中的层级结构 0.1.1 结构分类 project&#xff08;项目、工程&#xff09;module&#xff08;模块&#xff09;package&#xff08;包&#xff09;class&#xff08;类&#xff09; 0.1.2 结构介绍 project&#xff08;项目、工程&#xff09; ​ 淘宝、京…

JS:获取当前日期是本年度的第几周

问题 根据当前的日期&#xff08;比如年月日&#xff09;&#xff0c;来得到当前日期属于本年度的第几周 解决 代码&#xff1a; // 获取当前日期是本年的第几周 //参数&#xff1a; a为年 b为月 c为日 function getYearWeek(a, b, c) {var date1 new Date(a, parseInt(b)…

【Axure高保真原型】3D金字塔图_移入显示数据标签

今天和大家分享3D金字塔图_移入显示数据标签的原型模板&#xff0c;鼠标金字塔区域时&#xff0c;对应区域会变绿&#xff0c;可以查看该区域对应的项目和数据&#xff0c;这个原型模板是用Axure原生元件制作的&#xff0c;所以无需联网&#xff0c;而且可以自由修改样式、交互…

百度智能小程序系统源码+关键词排名优化 附带完整的搭建教程

百度智能小程序系统的开发背景是基于百度强大的技术实力和对用户需求的深入理解。在移动互联网时代&#xff0c;用户对便捷、高效、智能的服务需求越来越高。而小程序作为一种轻量级的应用程序&#xff0c;恰好能够满足用户的这些需求。然而&#xff0c;开发一个小程序需要掌握…

Kafka 如何实现顺序消息

版本说明 本文所有的讨论均在如下版本进行&#xff0c;其他版本可能会有所不同。 Kafka: 3.6.0Pulsar: 2.9.0RabbitMQ 3.7.8RocketMQ 5.0Go1.21github.com/segmentio/kafka-go v0.4.45 结论先行 Kafka 只能保证单一分区内的顺序消息&#xff0c;无法保证多分区间的顺序消息…

uniapp挽留提示2.0

项目需求&#xff1a;有时候挽留的ui是全屏的&#xff0c;用page-container也可以。后来产品提了个问题&#xff0c;手机侧滑的时候没那么顺畅&#xff08;就是一用侧滑&#xff0c;就显示出来&#xff0c;产品要的方案是如下图&#xff0c;emmm大概是这个意思&#xff09; 后面…

Python入门04字符串

目录 1 字符串的定义2 转义字符3 字符串的常见方法4 分割字符串5 字符串反转6 字符串的链式调用7 格式化字符串8 多行字符串总结 1 字符串的定义 在Python中&#xff0c;字符串表示一个字符的序列&#xff0c;比如 str "hello,world"这里我们定义了一个字符串&…

java选择排序和冒泡排序

1.区别 选择排序和冒泡排序的区别主要在于算法逻辑、稳定性和交换成本。 算法逻辑&#xff1a;选择排序和冒泡排序都属于比较排序&#xff0c;但在具体算法逻辑上有所不同。冒泡排序是通过相邻元素之间的比较和交换&#xff0c;将较大&#xff08;或较小&#xff09;的元素逐…

邦芒解析:面试怎么谈自身优缺点

在面试时&#xff0c;当被问到你的优缺点时&#xff0c;你可以这样回答&#xff1a; 优点&#xff1a; 我的工作能力强&#xff0c;能够高效地完成任务。我对技术有热情&#xff0c;喜欢学习新的技能和知识。我善于沟通&#xff0c;能够与不同背景的人进行有效沟通。我注重细节…

Linux系统centos卸载python3.6.8重新安装python3.9.1

升级 CentOS 上的 Python 版本需要一些步骤&#xff0c;因为 CentOS 默认使用 Python 2.x&#xff0c;并且许多系统工具都依赖于特定版本的 Python。以下是在 CentOS 上将 Python 升级到 3.9.1 的步骤&#xff1a; 步骤 1&#xff1a;安装依赖项 确保系统上安装了所需的依赖项…