当前位置: 首页 > news >正文

自动驾驶仿真:角雷达坐标系转换详解

文章目录

  • 一、 为什么要转换角雷达坐标?
  • 二、角雷达坐标系和车辆坐标系
      • 1、角雷达的安装角度
      • 2、角雷达的坐标系
      • 3、车辆坐标系
  • 三、 坐标系转换思路
      • 1、坐标系绕Z轴旋转
      • 2、坐标系平移
      • 3、其他目标值转换
  • 四、 其余角雷达的转换公式
      • 1、左前角雷达转换公式
      • 2、左后角雷达转换公式
      • 3、右后角雷达转换公式
  • 五、XY轴旋转拓展
      • 1、旋转公式至矩阵转换
      • 2、绕X轴Y轴旋转的矩阵关系式


一、 为什么要转换角雷达坐标?

  • 我们在做角雷达传感器仿真的时候,使用场景软件搭建角雷达模型会发现角雷达有独立的坐标系,它与车辆坐标系是不一致的。而实际车辆需要用到的目标数据一般都是参照车辆坐标系输出,为了确保仿真角雷达输出的目标数据与实际雷达一致。我们需要对角雷达输出的数据进行适配,即目标值的旋转平移,以获取到参考车辆坐标系输出的数据。

注:本文主要介绍的是角雷达安装绕Z轴旋转的转换方法,但会提供绕X轴、Y轴旋转的公式。

二、角雷达坐标系和车辆坐标系

1、角雷达的安装角度

1)如下图所示θ角为角雷达的安装角度(我们的角雷达只绕Z轴旋转),另外需要注意每个车厂对于安装角度的定义不太一致,我们在套用公式的时候需要注意对安装角度的转换。

在这里插入图片描述

2、角雷达的坐标系

1)如上图角雷达的安装角度所示,橙色的线相当于角雷达的背板,垂直于背板就是角雷达X+(上)的方向,平行于背板就是Y+(左),如下图所示:
在这里插入图片描述

3、车辆坐标系

1)车头方向是Y+,垂直于车头就是X+,如下图所示:
在这里插入图片描述

我们要做的就是将角雷达坐标旋转至车辆坐标,但不是真正意义的坐标系旋转,而是角雷达数据的目标值相对于车辆坐标系输出

三、 坐标系转换思路

1、坐标系绕Z轴旋转

1)使用右前角雷达作为案例进行转换(先旋转再平移),而且为了让公式推导看起来更简单,讲解时先让原点重合一下:

2)下图示,障碍物在右前角雷达的坐标系的坐标为(x1,y1),而目标物在自车坐标系的坐标则为(x0,y0),右角雷达坐标系与自车坐标系的夹角为α,注意α并非右角雷达的安装角度θ。

在这里插入图片描述

2)对坐标系做辅助线处理。
在这里插入图片描述
由上图得X0(自车坐标系旋转后)公式:
x 0 = x 1 c o s α − y 1 s i n α x_0 = x_1cosα- y_1sinα x0=x1cosαy1sinα
由上图得Y0(自车坐标系旋转后)公式:
y 0 = x 1 s i n α + y 1 c o s α y_0 = x_1sinα+ y_1cosα y0=x1sinα+y1cosα

注意:
1、以上两条公式是旋转后得原始公式,如果α的参照一致则可以直接代入。
2、由于我的角雷达只是绕Z轴旋转,所以 Z0 = Z1。

并且由于我的α不是实际的车辆安装角度θ,因此:
x 0 = x 1 c o s ( 90 ° − θ ) − y 1 s i n ( 90 ° − θ ) x_0 = x_1cos(90° - θ)- y_1sin(90° - θ) x0=x1cos90°θy1sin90°θ
y 0 = x 1 s i n ( 90 ° − θ ) + y 1 c o s ( 90 ° − θ ) y_0 = x_1sin(90° - θ)+ y_1cos(90° - θ) y0=x1sin90°θ+y1cos90°θ

2、坐标系平移

平移只是简单得坐标点平移,假设右角雷达的安装位置为(X2,Y2):
由上图得X0(自车坐标系旋转平移后)公式:
x 0 = x 1 c o s ( 90 ° − θ ) − y 1 s i n ( 90 ° − θ ) + x 2 x_0 = x_1cos(90° - θ)- y_1sin(90° - θ) + x_2 x0=x1cos90°θy1sin90°θ+x2
由上图得Y0(自车坐标系旋转平移后)公式:
y 0 = x 1 s i n ( 90 ° − θ ) + y 1 c o s ( 90 ° − θ ) + y 2 y_0 = x_1sin(90° - θ)+ y_1cos(90° - θ)+ y_2 y0=x1sin90°θ+y1cos90°θ+y2

3、其他目标值转换

由于速度加速度等参数是不存其他关系,仅存在三角关系,则它们的关系,例:
v 0 = v 1 c o s ( 90 ° − θ ) 。 v_0 = v_1cos (90°- θ) 。 v0=v1cos(90°θ)

四、 其余角雷达的转换公式

前置条件:Z0 = Z1

1、左前角雷达转换公式

1)注意左前雷达的X为负值,Y为正值:
x 0 = x 1 c o s ( 90 ° + θ ) − y 1 s i n ( 90 ° + θ ) + x 2 x_0 = x_1cos(90° + θ)- y_1sin(90° + θ) + x_2 x0=x1cos90°+θy1sin90°+θ+x2

y 0 = x 1 s i n ( 90 ° + θ ) + y 1 c o s ( 90 ° + θ ) + y 2 y_0 = x_1sin(90° + θ)+ y_1cos(90° + θ)+ y_2 y0=x1sin90°+θ+y1cos90°+θ+y2

2、左后角雷达转换公式

1)注意左后角雷达的X为负值,Y为正值:
x 0 = x 1 c o s ( 270 ° − θ ) − y 1 s i n ( 270 ° − θ ) + x 2 x_0 = x_1cos(270° - θ)- y_1sin(270° - θ) + x_2 x0=x1cos270°θy1sin270°θ+x2

y 0 = x 1 s i n ( 270 ° − θ ) + y 1 c o s ( 270 ° − θ ) + y 2 y_0 = x_1sin(270° - θ)+ y_1cos(270° - θ)+ y_2 y0=x1sin270°θ+y1cos270°θ+y2

3、右后角雷达转换公式

1)注意右后角雷达的X为正值,Y为正值:
x 0 = x 1 c o s ( 270 ° + θ ) − y 1 s i n ( 270 ° + θ ) + x 2 x_0 = x_1cos(270° + θ)- y_1sin(270° + θ) + x_2 x0=x1cos270°+θy1sin270°+θ+x2

y 0 = x 1 s i n ( 270 ° + θ ) + y 1 c o s ( 270 ° + θ ) + y 2 y_0 = x_1sin(270° + θ)+ y_1cos(270° + θ)+ y_2 y0=x1sin270°+θ+y1cos270°+θ+y2

五、XY轴旋转拓展

1、旋转公式至矩阵转换

旋转的原始等式:

x 0 = x 1 c o s α − y 1 s i n α y 0 = x 1 s i n α + y 1 c o s α z 0 = z 1 \begin{matrix} x_0 = x_1cosα- y_1sinα \\ y_0 = x_1sinα+ y_1cosα \\ z_0 = z_1 \\ \end{matrix} x0=x1cosαy1sinαy0=x1sinα+y1cosαz0=z1

将上述等式转换成矩阵,即可得到

[ x 0 y 0 z 0 ] = [ c o s α − s i n α 0 s i n α c o s α 0 0 0 1 ] ∗ [ x 1 y 1 z 1 ] = R Z ∗ [ x 1 y 1 z 1 ] \left[ \begin{array}{c} x_0\\ y_0\\ z_0\\ \end{array} \right] =\left[ \begin{array}{ccc} cosα &-sinα &0\\ sinα &cosα &0\\ 0 &0 &1\\ \end{array} \right]* \left[ \begin{array}{c} x_1\\ y_1\\ z_1\\ \end{array} \right] =RZ* \left[ \begin{array}{c} x_1\\ y_1\\ z_1\\ \end{array} \right] x0y0z0 = cosαsinα0sinαcosα0001 x1y1z1 =RZ x1y1z1

把角雷达探测到的值和上述RZ矩阵进行矩阵乘法运算,就完成绕Z轴的旋转。这个绕Z轴旋转的矩阵称为RZ。

2、绕X轴Y轴旋转的矩阵关系式

另外只要继续完成了绕X轴和Y轴的旋转(矩阵分别为RX和RY),就是正真意义的完成转换,是否需要绕这两轴旋转的要根据具体情况选择。

推导得:

[ x 0 y 0 z 0 ] = R X ∗ R Y ∗ R Z ∗ [ x 1 y 1 z 1 ] \left[ \begin{array}{c} x_0\\ y_0\\ z_0\\ \end{array} \right] =RX*RY*RZ* \left[ \begin{array}{c} x_1\\ y_1\\ z_1\\ \end{array} \right] x0y0z0 =RXRYRZ x1y1z1

加上平移矩阵:
[ x 0 y 0 z 0 ] = R X ∗ R Y ∗ R Z ∗ [ x 1 y 1 z 1 ] + T x y z \left[ \begin{array}{c} x_0\\ y_0\\ z_0\\ \end{array} \right] =RX*RY*RZ* \left[ \begin{array}{c} x_1\\ y_1\\ z_1\\ \end{array} \right]+ Txyz x0y0z0 =RXRYRZ x1y1z1 +Txyz


综上,完成角雷达的坐标系转换

相关文章:

  • 教你如何制作浪漫的3D相册表白网站 HTML+CSS+JavaScript
  • 【Shell编程】Shell中for循环、while循环、until循环语句
  • Hadoop集群配置运行
  • 【数模/预测】灰色预测
  • 基于KDtree的电路故障检测算法的MATLAB仿真(包括matlab仿真录像)
  • 奇妙的“黑板擦”字符串
  • 神经网络参数的学习-损失函数与梯度下降
  • Go(Golang)编程语言
  • 简单DIV CSS布局网站 (HTML学生个人网站作业设计) 体育运动主题网页设计与实现
  • 知识点18--springboot多模块开发
  • 沉睡者IT:零基础学习短视频与+玩转抖音快手
  • 【CSS】伪类选择器有什么用?有哪些是常用的伪类?
  • VirtualBox虚拟机安装教程
  • docker 镜像打包发布
  • MyBatis(详)
  • Akka系列(七):Actor持久化之Akka persistence
  • C学习-枚举(九)
  • github指令
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • js写一个简单的选项卡
  • k个最大的数及变种小结
  • miaov-React 最佳入门
  • mockjs让前端开发独立于后端
  • 基于axios的vue插件,让http请求更简单
  • 前端性能优化--懒加载和预加载
  • 关于Android全面屏虚拟导航栏的适配总结
  • !$boo在php中什么意思,php前戏
  • #{}和${}的区别是什么 -- java面试
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #pragma pack(1)
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (三)Honghu Cloud云架构一定时调度平台
  • (一) storm的集群安装与配置
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)Scala的“=”符号简介
  • (转)Unity3DUnity3D在android下调试
  • (转)winform之ListView
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .apk文件,IIS不支持下载解决
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .net项目IIS、VS 附加进程调试
  • @property括号内属性讲解
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • []T 还是 []*T, 这是一个问题
  • []我的函数库
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [20181219]script使用小技巧.txt
  • [C++] Windows中字符串函数的种类