[carla]把carla世界坐标系 转换为 俯视地图像素坐标系

在下面这篇参考博客中介绍了如何手动获取从carla世界坐标系到俯视地图像素坐标系的旋转平移矩阵.我也是采用了一样的思路和代码,这里把实现的过程以及最后所有地图的变换矩阵记录如下.
参考博客:carla真实世界坐标系与全局俯视地图像素坐标系变换

代码:

gitee配套C++代码,采用qt编译运行

在这里插入图片描述

1.carla世界坐标介绍

首先,在carla仿真环境中,车辆是一个actor,因此我们一般通过调用,actor的transform属性来获取carla世界坐标系下的车辆的坐标,我们称之为T1.
例如,如下图所示,左边的location(68.8,-34.8)就是carla世界坐标系下车辆的坐标.
在这里插入图片描述

2.像素坐标介绍

第二,我们通过官网可以下载到carla的jpg格式的俯视地图,坐标称为T2.如图所示:
在这里插入图片描述
我们想要求一个变换矩阵,能够实现从carla世界坐标系T1到像素坐标系T2的转换,这样我们就可以实时在全局地图上查看车辆位置了.

3.采集标定数据

3.1.打开carla服务器

./CarlaUE4.sh

3.2.获取像素坐标

通过获取图片对应位置的像素坐标,这提供了一个用opencv写的工具:
get_pix_label

将图片放到get_pix_label/pic目录下,这里以Town07.jpg为例:

打开界面后操作为:

  • 鼠标左键单击: 选择目标点并标记为蓝色
  • 鼠标中键单击: 将蓝色点的像素坐标保存到img_label.txt
  • 键盘输入c: 退出程序
    在这里插入图片描述
    保存的点的格式为:
[[301, 260], [333, 168], [295, 349], [229, 368], [445, 321], [311, 405], [307, 489]]

3.3.生成车辆遥控前往指定地点获取carla坐标

通过pythonAPI或者carla-ros-bridge打开一个小车,这里是通过carla-ros-bridge,然后指定了车辆为vehicle.audi.a2,指定了地图为town07

roslaunch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch role_name:="ego_vehicle" vehicle_filter:="vehicle.audi.a2" town:="town07"

我们把车开到3.2中通过像素标记的指定地点,然后运行下面这个程序获取carla坐标:

get_location.py

3.4. 保存标定数据并进行标定

将3.2和3.3采集到的7组按照预定的格式填入文件中,具体操作请看readme指南:

本步骤参考操作指南:transferMatric_Loc2Ima/calibration/readme.md https://gitee.com/cslibowen/carla_tutorial/blob/master/transform/transferMatric_Loc2Ima/calibration/readme.md

使用QT打开,编译并运行代码:carla世界坐标系到像素坐标系转换代码

运行后会得到下面的结果:
其中R是旋转矩阵,T是平移矩阵,out是第7组测试数据的转换结果,于test_imag_points的结果对比,发现差别在10个像素左右,误差对于我们的问题来说可以接受,毕竟是人手工选的点,误差肯定是会存在的.
在这里插入图片描述

4.RT矩阵结果

这里只转换了town01,02,03,05,07的,其他地图请各位自行转换.另外,由于是手工选点,难免存在一定误差.
RT_results.txt

    # Town01的变换矩阵
    R = np.array([[1.577447844831592, -0.0260328048010988], [0.0260328048010988, 1.577447844831592]])
    T = np.array([[31.49666980502371], [76.48981097252329]])

    # Town02的变换矩阵
    R = np.array([[2.91195124e+00, -5.40898686e-02], [-7.35309629e-03, 2.93199718e+00]])
    T = np.array([[8.61788912e+01], [-2.70949862e+02]])

    # Town03的变换矩阵
    R = np.array([[1.55628219498322, -0.01744074034859375], [0.05207615428285987, 1.453621762795462]])
    T = np.array([[270.6148345865518], [326.8114566281828]])

    # Town05的变换矩阵
    R = np.array([[-0.006232946646395232, 1.230904655706192], [-1.230904655706192, -0.006232946646395232]])
    T = np.array([[327.6292483315692], [273.3449850980829]])

    # Town07的变换矩阵
    R = np.array([[1.624402368677193, 0.01825124828532574], [0.02069841120825797, 1.61886922216472]])
    T = np.array([[463.1594657435309], [413.426694931497]])

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值