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

2023-11-05

在下面这篇参考博客中介绍了如何手动获取从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]])

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[carla]把carla世界坐标系 转换为 俯视地图像素坐标系 的相关文章

随机推荐

  • angularjs中post请求进行跨域

    post请求进行跨域 angularjs内置封装了类ajax的网络服务 http 所以实现了依赖外部插件来完成完整的前后端分离方案 scope main getData function http method POST url http
  • Git基于已有分支创建新的分支,简单的git 命令

    准备工作 进入要创建git分支项目目录 打开git命令行 1 基于已有分支代码创建新的分支 git checkout b new branch name origin source branch 2 将代码推送到新创建的git分支上 git
  • Qt Creator使用内存泄漏检测工具Valgrind

    Qt Creator使用内存泄漏检测工具Valgrind 随着软件变得越来越复杂 内存泄漏和野指针问题已经成为程序员最头痛的问题之一 幸运的是 现代IDE提供了许多工具来帮助我们解决这些问题 在这篇文章中 我们将介绍如何在Qt Creato
  • 单价数量和总价的公式_小学六年超全的数学公式!家长们赶紧给孩子看过来……...

    小学数学基础知识整理 一到六年级 小学一年级 初步认识加减法 学会基础加减 小学二年级 完善加减法 表内乘法 学会应用题 基础几何图形 小学三年级 学会万以内加减法 长度单位和质量单位 倍数的认知 多位数乘一位数 时间量及单位 长方形和正方
  • 租赁OLED透明屏:打造独特商业体验的智慧选择

    近年来 OLED透明屏技术在商业领域中迅速崛起 其高透明度和卓越的图像质量为商家创造了全新的展示方式 租赁OLED透明屏作为一种智慧选择 不仅能提升品牌形象和吸引力 还能创造与众不同的视觉体验 对此 尼伽将和大家一起深入探讨租赁OLED透明
  • 如何从零开始搭建公司自动化测试框架?

    搭建的自动化测试框架要包括API测试 UI测试 APP测试三类 以上三类其实可以简化为两类 那就是 1 接口自动化测试框架搭建 2 UI自动化测试框架搭建 没问题 安排 且是手把手教你如何搭建以上两类自动化测试框架 刷到这个问题的测试人员
  • Ubuntu上vscode调试C/C++代码

    这篇文章起初是我看了一个B站的视频 作者讲述了如何在Ubuntu的 环境中通过使用vscode调试C C 代码 这个教程非常好 也非常推荐给大家 但是这个教程有一个局限性 就是他在他的公共号上写的教程非常简略 以至于我想再次看一遍 需要重新
  • 微信小程序引入背景图的三种方法

    1 直接在标签里加上style样式 加上背景图
  • K8s集群组件、flannel网络插件、Pod详解

    文章目录 Kubernetes 1 K8S集群架构 2 角色与功能 3 部署环境要求 Master Node 4 flannel插件 flannel是什么 目的 5 Pod 什么是Pod 为什么要使用Pod Pod的生命周期 Pod的创建过
  • STL源码:lis容器(Qt5.8版本)

    初次学习STL源码 很多语义尚且比较模糊 需待二次学习 源文件结构 主要的实现都在
  • Odoo 16 企业版手册 - CRM (2)

    销售线索 在与客户或组织开展业务之前 可以将销售线索视为第一步 如果个人或组织对您的业务感兴趣 您可以将他们的兴趣转换为您的业务 作为销售线索 稍后可以转换为销售机会 在Odoo CRM的帮助下 可以从各种来源收集线索 通过电话 短信 电子
  • windows下安装git

    一 下载Git安装包 1 打开Git的官方网站 https git scm com 2 找到下载页 https git scm com downloads 3 找到Windows版本下载页面 https git scm com downlo
  • 数据结构复杂度分析

    文章目录 前言 一 什么是复杂度分析 二 为什么要进行复杂度分析 三 如何进行复杂度分析 1 大O表示法 2 复杂度分析法则 四 常用的复杂度级别 1 常数阶O 1 2 线性阶O n 3 平方阶O n 4 对数阶O logn 五 不常见的时
  • golang中多种方式设置时区

    关于我 文章首发 我的博客 欢迎关注 go语言的time Now 返回的是当地时区时间 time Now Format 2006 01 02 15 04 05 time设置自定义时区 var cstSh time LoadLocation
  • c++继承-----继承中构造函数写法

    父类中的属性 调用父类的构造函数初始化 成员函数的方式初始化 子类中的构造函数 必须要调用父类构造函数 必须采用初始化参数列表的方式 子类想构造无参对象 父类必须要写无参构造函数 隐式调用构造函数 class Parent public 我
  • 文字验证码:简单有效的账号安全守卫!

    前言 文字验证码不仅是一种简单易懂的验证方式 同时也是保护您的账号安全的重要工具 通过输入正确的文字组合 您可以有效地确认自己的身份 确保只有真正的用户才能访问您的账号 HTML代码
  • 关于mybatis的resultMap映射VO类

    今天的模块需要用到多表联查 将查到的结果放到一个新的实体类中 而这几张表的主键我需要用到 难过的是多个表的主键名都是 id 这就导致新的实体类中多个表的主键字段名无法区分 最后再查询语句中加入别名以区分多个表的主键 本以为这就可以了 但是在
  • Java 通配符泛型例子

    请看下面的代码 其中会发生错误的代码已经注释掉 并且写明了错误类型 总体来说 泛型通配符就是为了支持多态时父子类 接口扩展类之间的相互转换而生 package test import java util ArrayList import j
  • seaborn学习笔记(三):直方图、条形图、条带图

    html font family sans serif ms text size adjust 100 webkit text size adjust 100 body margin 0 article aside details figc
  • [carla]把carla世界坐标系 转换为 俯视地图像素坐标系

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