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

news2025/7/19 10:17:47

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

文章目录

  • 代码:
  • 1.carla世界坐标介绍
  • 2.像素坐标介绍
  • 3.采集标定数据
    • 3.1.打开carla服务器
    • 3.2.获取像素坐标
    • 3.3.生成车辆遥控前往指定地点获取carla坐标
    • 3.4. 保存标定数据并进行标定
  • 4.RT矩阵结果

代码:

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]])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/37852.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【表白】html表白代码

目录一.引言二.表白效果展示1.惊喜表白2.烟花表白3.玫瑰花表白4.心形表白5.心加文字6.炫酷的特效一.引言 我们可以用一下好看的网页来表白,下面就有我觉得很有趣的表白代码 下载整套表白文件 二.表白效果展示 1.惊喜表白 2.烟花表白 源码:新建一个文本文…

基于51单片机的温度控制系统数码管显示蜂鸣器报警proteus仿真原理图PCB

功能: 0.本系统采用STC89C52作为单片机 1.系统实时监测并显示当前温度,并通过四位数码管显示 2.超过设定阈值,蜂鸣器将报警,同时控制相应继电器实现降温或者加热 3.系统具备三个功能按键,可更改温度上限和下限 4.采用D…

SpringBoot+Mybatis-Plus+Thymeleaf 实现增删改查+登录/注册

SQL -- student_info create table if not exists student_info ( sid int not null auto_increment comment 学生表主键 primary key, sname varchar(20) not null comment 学生账号登录名、姓名, pwd varchar(32) not null comment 密码, sex varchar(20) not null comment …

AQS源码解析 7.共享模式_CyclicBarrier重复屏障

AQS源码解析 —共享模式_CyclicBarrier重复屏障 简介 CyclicBarrier:循环屏障、循环栅栏,用来进行线程协作,等待线程满足某个计数。构造时设置『计数个数』,每个线程执行到某个需要“同步”的时刻调用 await() 方法进行等待&…

【多目标进化优化】多目标进化群体的分布性

0 前言 \quad\quad进化算法是模拟生物自然进化的人工方法,与大自然生态环境一样,进化的物种也需要平衡发展。因此,设计者必须制定合适的生存规则来维持种群的多样性和分布性。在多目标进化算法中,对于某些问题,Pareto最…

微机-------可编程并行接口8255A

目录 8255A的内部结构8255A控制信息和传输动作的对应关系⭐8255A的控制字一、方式选择控制字①方式0(基本输入输出工作方式)二、端口C置1/置0控制字8255A的工作方式②方式1(选通的输入输出工作方式)③方式2(双向传输方式)⭐⭐8255的编程及应用8255A的内部结构 ①数据总线…

Steam项目推进(二)—— 在项目中使用FairyGUI

一、遇到的问题 昨天把代码大致清理了一遍之后,发现代码中存在很大的一个问题是数据和表现耦合在一起了,如下: using UnityEngine; using UnityEngine.UI;public enum CardStateType {InDeck, InHand, InBattle, InSave, InAbandon }//卡牌…

Cisco简单配置(十八)—OSPF

开放式最短路径优先(Open Shortest Path First,OSPF)是广泛使用的一种动态路由协议,它属于链路状态路由协议,具有路由变化收敛速度快、无路由环路、支持变长子网掩码(VLSM)和汇总、层次区域划分…

设计模式-组合模式(决策树)

一、只如初见 组合模式也许大家第一联想到的就是把两个模块组合起来使用,其实好像是这样也其实不是这样,废话不多说,学习一件新的事物总要先了解一下他的概念,老规矩先上概念(摘自百度百科): 组…

【活动预告】金融大数据治理实践分享(12/03)

原创 DAMA数据管理 # 本期主题 金融大数据治理实践分享 数字化时代,数据的价值受到越来越多的关注,有人将其比作黄金,也有人将其比作石油,成为组织中的最重要资产之一。针对数据这种有特殊属性的资产,也存在着采集…

[论文阅读] 颜色迁移-N维pdf迁移

[论文阅读] 颜色迁移-N维pdf迁移 文章: N-Dimensional Probability Density Function Transfer and its Application to Colour Transfer, [paper ][code] 1-算法原理 简单来说, 本文将图像看作是随机变量的一组样本, 图像之间的颜色迁移可以看作是样本之间分布的迁移. 因而…

G1D23-RAGA报名蓝桥Attackg安装cudatorch

昨天太摸鱼啦~不过蛮开心的哈哈 今天主要是把积累的ddl都清理一下!!!第一项就是我和舍友一起读的论文嘿嘿!! 一、RAGA (零)总结(仅模型) 作为数据挖掘顶会2021年的论文…

【MATLAB教程案例46】三维数据的插值和滤波处理matlab仿真

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 本课程学习成果预览: 目录 1.软件版本 2.三维数据插值

openFeign夺命连环9问,这谁受得了?

1、前言 前面介绍了Spring Cloud 中的灵魂摆渡者Nacos,和它的前辈们相比不仅仅功能强大,而且部署非常简单。 今天介绍一款服务调用的组件:OpenFeign,同样是一款超越先辈(Ribbon、Feign)的狠角色。 文章目…

linux 安装新版傻妞+TG+青龙

一键安装命令 #国内服务器要先设置网络代理set sillyGirl download_prefix https://yanyu.ltd/#一键安装命令ssillyGirl;aarm64;if [[ $(uname -a | grep "x86_64") ! "" ]];then aamd64;fi ;if [ ! -d $s ];then mkdir $s;fi ;cd $s;wget https://yanyu.…

git回滚指定版本相关操作

当提交推送到远程仓库之后,需要回退到特定版本,去修改该代码,然后在推送到远程仓库; 1.查看目前版本状态: git status 2.查看提交日志,找到需要回滚的git版本号 git log 3.将当前分支回滚到id9c45732c5701fc84164bebe3c05760a72a4ece12 #这个是软回滚&am…

一个基于容斥原理的概率模型

为论述概率模型的思想,本部分以下图所描述的情况作为例子讲述,为简化图省略线路开关。 不同于单供网络,双供网络由于多条联络线,存在多个扩展供电方案。设供电路径P(p1,p2,..,pn)P(p_1,p_2,..,p_n)P(p1​,p2​,..,pn​)&#xff…

wodFtpDLX ActiveX 组件--Crack

wodFtpDLX ActiveX 组件 FTP 组件,安全(SSL、SSH)FTP ActiveX 客户端 FtpDLX 组件是 FTP(或者更确切地说,文件传输)客户端组件。它不仅提供老式的 FTP 协议,还允许您使用安全的 SFTP&#xff08…

短视频怎么在平台规则之内更快更好的吸引用户粉丝的关注

短视频怎么在平台规则之内更快更好的吸引用户粉丝的关注 每天一组短视频运营小技巧,碎片化学习优化自己的账号,今天来学习内容发布技巧: 内容上: 关心用户喜欢看什么 ,在视频中埋下泪点笑点吐槽点以及所有你能想到的可以激发观众…

浅谈Linux系统信息与资源

大家将来应用开发Linux程序,无论是ARM架构的板子,还是在Linux上开发应用程序,相信大家都会用到到一些系统相关的信息,譬如时间、日期、以及其它一些系统相关信息,今天带大家了解一下如何通过 Linux 系统调用或 C 库函数…