Carla Simulator (2):对KITTI Rotation_y和Alpha的理解

目的:根据Carla提供的其他车到相机的相对位姿,求其他车的rotation_y和观测角alpha,按KITTI MOT label.txt格式生成对应的GT文件。

结论:

alpha=rotation_y+beta

相当于将相机沿观测方向旋转后,车的rotation_y角。

1 标签文件的格式

选KITTI/Tracking/0000序列的标签文件中某一行作为例子:

 每行中元素代表的含义和数据类型参考devkit/readme.txt和./matlab/writeLabels.m(图1),依次是:

1.1 物体被检测的帧在序列中的id,int型。

1.2 物体在整个序列中的id,int型。

1.3 物体的类型,string型,包括'Car', 'Van', 'Truck', 'Pedestrian', 'Person_sitting', 'Cyclist', 'Tramy', 'Misc' or 'DontCare'。

1.4 物体被截断的程度,int型,取值为0\1\2。虽然.m文件中是float型,但这是object detection benchmark采用的数据类型(0-1的浮点数)。

1.5 物体被遮挡的程度,int型,取值为0全部可见/1小部分被遮挡/2大部分被遮挡/3未知。

1.6 物体被相机的观测角observation angle/alpha,注意alpha即物体的观测角经过wrapToPi函数,将角度变换至[-Pi,+Pi]的范围内。

alpha角的含义和计算过程见第2节,不按要照readme.txt文件参考cs_overview.pdf(这个文件只有一个功能,就是介绍了KITTI采用右手系,且z轴朝车头/相机观测方向,x轴水平向右,y轴竖直向下;但是r_y并不是rotation_y,和计算出的alpha与label.txt文件的数据不一致,详情参考KITTI 数据集 参数—— tracking devkit中的rotation_y和alpha角_kitti数据集tacking详解-CSDN博客)。

1.7 2D包围框的左上 右下角坐标,浮点型。

1.8 3D包围盒的高 宽 长/米,浮点型。

1.9 在当前frame帧相机系中该物体的坐标xyz/米,浮点型。

1.10 rotation_y,浮点型,要经过wrapToPi函数,将角度变换至[-Pi,+Pi]的范围内,含义见第二节。

1.11 目标检测的置信度得分,浮点型,GT文件可不提供。

图1. label元素的含义和数据类型

2.  alpha和rotation_y

参考KITTI 数据集 参数—— tracking devkit中的rotation_y和alpha角_kitti数据集tacking详解-CSDN博客

rotation_y:按照readme.txt,Rotation ry around Y-axis in camera coordinates [-pi..pi],is directly
given in camera coordinates. For example, a car which is facing along the X-axis of the camera coordinate system corresponds to rotation_y=0 no matter where it is located in the X/Z plane (bird's eye view)。如图2所示,是车的Z'轴与平行于相机x轴正向的夹角,方向按右手系顺正逆负,所以图2中rotation_y为负数。

要求alpha,按照readme.txt,Observation angle of object, ranging [-pi..pi]. while alpha also considers the vector from the camera center to the object center, to compute the relative orientation of the object with respect to the camera. alpha is zero only, when this object is located along the Z-axis of the camera. When moving the car away from the Z-axis, the observation angle will change.
alpha的计算还牵扯到车相对于相机的方位角beta,方向从视线指向相机z轴,顺正逆负,所以图2中beta为正。

图2 rotation_y的定义

根据上述参考博客,alpha=rotation_y+beta,

其中,beta计算过程为:记车在相机系的位置为car_x,car_y,car_z,则

beta=arctan(car_x/car_z)=(0.5*pi - arctan(car_z/car_x) )+ 2pi = 1.5pi + arctan(car_z/car_x)。

并需要mode alpha到[-pi,pi]范围内,即和下图3的计算过程一致。

图3 alpha的计算过程

那么alpha的含义怎么理解?我和上述参考博客的理解方式不同。如下图4所示。将相机系旋转beta角至Z轴与视线同向,旋转后的相机系为图4中红色坐标系;并且会找到和beta相同的角,如图4中红色beta所示;在此坐标系中车的rotation_y就是alpha,并且很清楚的看出来alpha=rotation_y+beta(图4中beta为正,rotation_y为负,所以alpha的绝对值<rotation_y的绝对值)。

图4 alpha的定义

那么用KITTI的真实图像和对应label验证一下,例图和例数据来自上述博客:

分析如图5所示,和label数值的正负属性、绝对值大小一致。

图5

3 rotation_y和车的偏航角的关系

接下来的问题在于,偏航角的定义和rotation_y并没有明显的等价性。如果按rotation_y计算出R,根据车在相机系的位置为t,就能按car的size将car的包围盒8个顶点投影到相机成像平面上,如果和2D BBX一致,那起码说明rotation_y确实就是yaw角。

以0000/000000.png中Van为例,将其rotation_y转换为旋转矩阵(欧拉角和旋转矩阵的关系参考欧拉角和旋转矩阵之间的转换 - 知乎 (zhihu.com)):

并根据在相机系的位置t,将8个包围盒的顶点从物体系变换至相机系,再投影至相机系(我是按的calibrate.txt中的P0)并归一化x/z,y/z。最终结果如图6所示,上面一行是投影得到的BBX左 上 右 下四个边界值,下面一行是labels中2D BBX的左上右下坐标。发现相似,也许是我不应该用P0,毕竟投到左目彩色相机,应该用P2。可见rotation_y==yaw

  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值