【ROS系列】坐标系转换介绍和对齐

这篇具有很好参考价值的文章主要介绍了【ROS系列】坐标系转换介绍和对齐。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、坐标系简介

本篇文章介绍:ECEF、ENU、UTM、WGS-84坐标系(LLA)

1.1、ECEF坐标系

ECEF坐标系也叫地心地固直角坐标系

原点:地球的质心,

x轴:原点延伸通过本初子午线(0度经度)和赤道(0维度)的交点。

z轴:原点延伸通过的北极,也就是理想地球旋转轴。

y轴:Z-->X 完成右手定则,穿过赤道和90度经度。如下图所示:

【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系

1.2、 WGS-84坐标系(LLA)

WGS-84坐标系也叫经纬高坐标系(经度(longitude),纬度(latitude)和高度(altitude)LLA坐标系),全球地理坐标系、大地坐标系。

特点:最为广泛应用的一个地球坐标系,它给出一点的大地纬度、大地经度和大地高程。更加直观地告诉我们该点在地球中的位置,故又被称作经纬高坐标系。

WGS-84坐标系:

X轴:指向BIH(国际时间服务机构)1984.0定义的零子午面(Greenwich)和协议地球极(CTP)赤道的交点。

Z轴:指向CTP方向。

Y轴:与X、Z轴构成右手坐标系。
其中:
(1)大地纬度是过点P的基准椭球面法线与赤道面的夹角。纬度值在-90°到+90°之间。北半球为正,南半球为负。

(2)大地经度是过点P的子午面与本初子午线之间的夹角。经度值在-180°到+180°之间。

(3)大地高度h是过点P到基准椭球面的法线距离,基准椭球面以内为负,以外为正。
图示可以参照上图,清楚描述ECEF 和 WGS-84的关系。WGS-84和GPS关系参照下图:

【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系

1.3、 东北天坐标系(ENU)

东北天坐标系(ENU)也叫站心坐标系以用户所在位置P为坐标原点。

坐标系定义为:

X轴:指向东边

Y轴:指向北边

Z轴:指向天顶

ENU局部坐标系采用三维直角坐标系来描述地球表面,实际应用较为困难,因此一般使用简化后的二维投影坐标系来描述。

二维投影坐标系中 统一横轴墨卡托(The Universal Transverse Mercator ,UTM)坐标系是一种应用较为广泛的一种。

UTM 坐标系统使用基于网格的方法表示坐标,它将地球分为 60 个经度区,每个区包含6度的经度范围,每个区内的坐标均基于横轴墨卡托投影,如下图所示:

【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系

将上图切分后展平得到下图:

DMAP: UTM Grid Zones of the World

【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系

根据中国utm分区表,确定所在地区的utm分区,最常用的对照以下表:

【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系

等会坐标转换就可以使用这个图上的分区。

二、坐标转换

2.1、工具介绍

主要使用pyproj工具进行坐标的转换,文档地址:入门 — pyproj 2.1.1 文档

2.2、坐标之间相互转换

知识前置,我们最常见的的是gps坐标拿到经纬度和海拔信息。gps使用的坐标系为WGS,其编号(EPSG)EPSG:4326 ,这个参数后续要用到

【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系

在使用UTM坐标系转化时要弄清处数据在utm分区表中哪一个分区,假设当前经纬信息为【121.398926,31.559815 】可以根据分区表得到北半球51分区,即51N

网站EPSG.io: Coordinate Systems Worldwide 上查询utm分区对应的utm坐标系编码,输入 51N 进行查询,找到对应WGS84 转换前坐标系。得到EPSG:32651

【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系

转换原理

【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系

(1) 经纬度坐标系转ECEF

 【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系

 (2)ECEF坐标系转LLA坐标系

【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系

【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系

start:lon是未知的,假设为0,经过几次迭代之后就能收敛

update公式:  alt=(p/cos(lat))-N

(3)ECEF坐标系转ENU坐标系

用户所在坐标原点𝑃0=(𝑥0,𝑦0,𝑧0),计算点𝑃=(𝑥,𝑦,𝑧)在以点𝑃0为坐标原点的ENU坐标系位置(e,n,u)这里需要用到LLA坐标系的数据,𝑃0的LLA坐标点为𝐿𝐿𝐴0=(𝑙𝑜𝑛0,𝑙𝑎𝑡0,𝑎𝑙𝑡0)

【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系

(4)ENU坐标系转ECEF坐标系

上面介绍S为单位正交阵

【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系

【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系

 (5)经纬度LLA坐标系直接转ENU坐标系

上述可以看到,从LLA坐标系转换到enu坐标系有较多计算量,在考虑地球偏心率𝑒很小的前提下,可以做一定的近似公式计算

【ROS系列】坐标系转换介绍和对齐,自动驾驶,Ros,坐标系文章来源地址https://www.toymoban.com/news/detail-738475.html

代码实现

(1) 经纬度转UTM坐标

    # 经纬度到UTM世界平面坐标系
    def wgs2utm_51N(lat,lon):
        crs = pyproj.CRS.from_epsg(4326)
        crs_cs = pyproj.CRS.from_epsg(32651)
        transformer = Transformer.from_crs(crs, crs_cs)
        x, y = transformer.transform(lat, lon)

        return [x, y]

(2)UTM转经纬坐标

    # 经纬度到UTM世界平面坐标系
    def utm_51N2wgs(x,y):
        transformer = Transformer.from_crs("epsg:32651", "epsg:4326")
        lat, lon = transformer.transform(x, y)
        return [lat, lon]

(3)经纬海拔转 地心地固坐标

    # 经纬度到地心地固(earth-central, earth-fixed)坐标系
    def wgs2ecef(lon,lat,alt):
        ecef = pyproj.Proj(proj='geocent', ellps='WGS84', datum='WGS84')
        lla = pyproj.Proj(proj='latlong', ellps='WGS84', datum='WGS84')
        x, y, z = pyproj.transform(lla, ecef, lon, lat, alt,
                                   radians=False)

        return np.array([x, y, z])

(4)地心地固转enu坐标

  # 用户所在坐标原点Pb=(x0,y0,z0),计算点P=(x,y,z)在以点P0为坐标原点的坐标系位置(e,n,u),
    # 这里需要用到LLA的数据,P0的LLA坐标点为LLAo=(lon0,lat0,alt0)
    # 地心地固到东北天坐标系
    def ecef2enu(self, point0, point):
        # 转换为弧度
        lat_r = math.radians(self.lat)
        lon_r = math.radians(self.lon)
        line1 = np.array([-math.sin(lon_r), math.cos(lon_r), 0])
        line2 = np.array([-math.sin(lat_r) * math.cos(lon_r),
                          -math.sin(lat_r) * math.sin(lon_r),
                          math.cos(lat_r)])
        line3 = np.array([math.cos(lat_r) * math.cos(lon_r),
                          math.cos(lat_r) * math.sin(lon_r),
                          math.sin(lat_r)])
        trans = np.vstack((line1, line2, line3))
        difference = point - point0
        [e, n, u] = np.matmul(trans, np.array(difference).T).T

        return [e, n, u]

(5)enu转地心地固坐标

    def enu2ecef(self, point):
        # 转换为弧度
        lat_r = math.radians(self.lat)
        lon_r = math.radians(self.lon)
        line1 = np.array([-math.sin(lon_r), math.cos(lon_r), 0])
        line2 = np.array([-math.sin(lat_r) * math.cos(lon_r),
                          -math.sin(lat_r) * math.sin(lon_r),
                          math.cos(lat_r)])
        line3 = np.array([math.cos(lat_r) * math.cos(lon_r),
                          math.cos(lat_r) * math.sin(lon_r),
                          math.sin(lat_r)])
        trans = np.vstack((line1, line2, line3))
        [B, L, H] = np.matmul(trans.T, point)

        return [B, L, H]

(6)enu转imu坐标

    # enu空间中的点在惯导坐标系下的坐标,俯仰角绕东轴(x)旋转,横滚角绕北轴(y)旋转,
    # 航向角绕天轴(z)旋转,这里可以认为简化,只考虑偏航角的情况下
    # def enu2imu(self, imu_enu, pitch, roll, yaw):
    def enu2imu(self, imu_enu, yaw, points_enu):
        Rz = np.array([[math.cos(yaw), -math.sin(yaw), 0],
                       [math.sin(yaw), math.cos(yaw), 0],
                       [0, 0, 1]])
        T = np.array(-imu_enu)
        trans = np.hstack((Rz, T))
        imu_xyz = np.matmul(trans, points_enu)

        return imu_xyz

到了这里,关于【ROS系列】坐标系转换介绍和对齐的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 坐标转换(相机坐标系、世界坐标系、图像物理坐标系、图像像素坐标系)

    一般情况下我们所涉及到的坐标包括四个,即相机坐标系、世界坐标系、图像物理坐标系、图像像素坐标系。我们本文的讲解思路是在讲解每个坐标转换之前先讲清楚每个坐标系所表示的含义。本文主要参考由高翔主编的视觉SLAM十四讲第五章相机模型。 相机将三维世界的坐

    2024年02月09日
    浏览(53)
  • 世界坐标系、相机坐标系和图像坐标系的转换

    之前只是停留在会用的阶段,一直没去读懂计算的原理,今天通读了大佬的文章,写的言简意赅,感谢感谢~~特此记录一下,仅用作个人笔记 贴链接,十分感谢~ https://blog.csdn.net/weixin_44278406/article/details/112986651 https://blog.csdn.net/guyuealian/article/details/104184551 将三维物体转换成照

    2023年04月15日
    浏览(48)
  • 相机坐标系、像素坐标系转换

    相机内参矩阵是相机的重要参数之一,它描述了相机光学系统的内部性质,例如焦距、光学中心和图像畸变等信息。在计算机视觉和图形学中,相机内参矩阵通常用于将图像坐标系中的像素坐标转换为相机坐标系中的三维坐标,或者将相机坐标系中的三维坐标投影到图像坐标

    2024年02月13日
    浏览(32)
  • 柱坐标系与直角坐标系的转换

    1.柱坐标系转化为直角坐标系:柱坐标系(r,φ,z)与直角坐标系(x,y,z)的转换关系 x=rcosφ y=rsinφ z=z 2.直角坐标系转化为柱坐标系:直角坐标系(x,y,z)与柱坐标系(r,φ,z)的转换关系: r= φ= z=z

    2024年02月11日
    浏览(31)
  • 图像坐标系如何转换到相机坐标系。

    问题描述:图像坐标系如何转换到相机坐标系。 问题解答: 图像坐标系的定义: 图像坐标系是用于描述数字图像中像素位置的坐标系。图像坐标系的原点是相机光轴与成像平面的交点。X轴沿着成像平面的水平方向正向,Y轴沿着成像平面的垂直方向正向。 相机坐标系的定义

    2024年02月04日
    浏览(38)
  • Cesium:CGCS2000坐标系的xyz坐标转换成WGS84坐标系的经纬高度,再转换到笛卡尔坐标系的xyz坐标

    作者:CSDN @ _乐多_ 本文将介绍使用 Vue 、cesium、proj4 框架,实现将CGCS2000坐标系的xyz坐标转换成WGS84坐标系的经纬高度,再将WGS84坐标系的经纬高度转换到笛卡尔坐标系的xyz坐标的代码。并将输入和输出使用 Vue 前端框架展示了出来。代码即插即用。 网页效果如下图所示, 一、

    2024年02月06日
    浏览(33)
  • (02)Cartographer源码无死角解析-(80) 核心要点→local坐标系、子图坐标系、切片坐标系、地图坐标系等相转换与联系

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885   文末正下方中心提供了本人 联系方式, 点击本人照片

    2024年02月16日
    浏览(32)
  • WGS84地球坐标系,GCJ02火星坐标系,BD09百度坐标系简介与转换 资料收集

    高性能、低功耗 GPS、北斗双模定位模块 STM32 GPS定位_为了维护世界和平_的博客-CSDN博客 秉火多功能调试助手上位机开源!共六款软件,学到你吐... , - 电脑上位机 - 野火电子论坛 - Powered by Discuz! https://www.firebbs.cn/forum.php?mod=viewthreadtid=11985fromuid=64 地图坐标系之间的转换(百度

    2024年02月11日
    浏览(30)
  • Unity坐标系的转换—世界坐标转为UI坐标

    直接调用WorldToAnchorPos,传入对应的参数返回UGUI坐标

    2024年04月13日
    浏览(34)
  • Unity坐标系转换

    坐标系的转换 世界坐标系和本地坐标系的相互转换函数如下。 ● Transform.TransformPoint(Vector3position):将一个坐标点从本地坐标系转换到世界坐标系。 ● Transform.InverseTransformPoint(Vector3position):将一个坐标点从世界坐标系转换到本地坐标系。 ● Transform.TransformDirection(Vec

    2024年02月07日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包