Nuscenes数据集中radar到image投影的源码解析

了解一个事物最好的办法就是debug一遍其源码,类似于看本质。

Nuscenes中的Radar pointcloud格式:

共有18个特征,包括x,y,z,……。可以看到z默认是0,也就是说,radar只能探测到x,y坐标,没有z的信息的。
在这里插入图片描述
在这里插入图片描述

通过token读到pointsensor的信息

在这里插入图片描述
在这里插入图片描述

总览

Radar -> image 投影可以分为五次映射
在这里插入图片描述

1. radar坐标系 -> 车辆ego坐标系(radar外参)

radar相对于ego的旋转、平移变换,信息存储在pointsensor[‘calibrated_sensor_token’]中。
在这里插入图片描述
在这里插入图片描述

其中,旋转信息是以四元素的方式存储,需要调用下面函数先转换成旋转矩阵以便计算

在这里插入图片描述
调用后
pc变换前后(仅对18个特征的前三个做了变换):
在这里插入图片描述

2. ego坐标系 -> global坐标系(radar)

从pointsensor[‘ego_pose_token’]中获取雷达探测时刻小车相对于全局的pose
在这里插入图片描述
在这里插入图片描述

pc变换前后(仅对18个特征的前三个做了变换):
在这里插入图片描述

3. global坐标系 -> ego坐标系(相机外参)

从cam[‘ego_pose_token’]中获取相机拍摄时刻小车相对于全局的pose,注意,此处应是逆变换。由于:

若 A, B 均可逆,则 (AB)^(-1) = B^(-1) A^(-1)

所以先平移后旋转,并且都是原矩阵的逆矩阵(注:其中旋转矩阵为正交矩阵其逆等于其转置)。
在这里插入图片描述

在这里插入图片描述
pc变换前后(仅对18个特征的前三个做了变换):
在这里插入图片描述

4. ego坐标系 -> camera坐标系

从cam[‘calibrated_sensor_token’]中获取相机拍摄时刻相机外参,即旋转平移参数(注意,cs_record中还包括内参,第五步将用到)
在这里插入图片描述

在这里插入图片描述
pc变换前后(仅对18个特征的前三个做了变换):
在这里插入图片描述

5. camera坐标系 -> image坐标系 (相机内参)

从cs_record[‘camera_intrinsic’]中获取相机内参
在这里插入图片描述
将pc投影至image平面,注意,由于投影后会损失一个维度的信息(深度),因此额外保存该通道信息
在这里插入图片描述
上面函数的主要内部构造
pc变换前后:
在这里插入图片描述
保留的深度信息:
深度信息
最终结果:
在这里插入图片描述

一个思考:

为什么要多做一步投影到global坐标系下?

因为camera和radar并不是同时触发的,其时间戳存在一定延迟,在这一小段延迟中,车辆可能已经行驶了小段路程,要把这个作为传感器运动的补偿考虑进去。当然,我们默认两份数据中感知到的环境在小段时间内变化不大。
在这里插入图片描述
如果车辆是完全静止,两个状态小车完全重叠,就不需要投影到global坐标系下。
————————————————————————————————————————————
nuscenes源码

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值