Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

系统反算的经纬度存在问题? #67

Open
plumewind opened this issue Sep 12, 2024 · 12 comments
Open

系统反算的经纬度存在问题? #67

plumewind opened this issue Sep 12, 2024 · 12 comments

Comments

@plumewind
Copy link

你好,

我在导入一个xodr文件(由实际真实环境制作得出),该文件的投影方式是:

<geoReference><![CDATA[+proj=tmerc +lat_0=22.5114810444912479 +lon_0=114.03711701865901 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +geoidgrids=egm96_15.gtx +vunits=m +no_defs ]]></geoReference>

在实际仿真时发现,ego的经纬度信息和实际环境的经纬度信息不相符,经查阅源码,发现经纬度反算好像有问题?
common/map_sdk/map_import/src/OpenDriveParse.cpp中的170行的get_lane_scale_toEnu函数中:

transform_pts(points);
transform_pts(refs);
for (auto& itPt : points) {
  coord_trans_api::lonlat2enu(itPt.x, itPt.y, itPt.z, refs.at(0).x, refs.at(0).y, refs.at(0).z);
}

这里的计算方式是分别计算points、refs的WGS8经纬度信息,再叠加求解points实际对应的坐标信息。
在opendrive规范中: https://www.asam.net/index.php?eID=dumpFile&t=f&f=3768&token=66f6524fbfcdb16cfb89aae7b6ad6c82cfc2c7f2
比如7.1小节,点坐标是Start position (x inertial)使用惯性系,而惯性系是相对与origin坐标的,需要先计算该offset后,再计算经纬度,不知道上述points的坐标是否考虑这个细节,麻烦您检查一下?
或者指引一下,相关offset计算的代码?
非常感谢~

@plumewind
Copy link
Author

界面显示的x,y坐标好像也不太对,同一个xodr文件,分别用两个opendrive文件查看器查看,显示是一致的,但是和TADSIM里不同:
http://opendrive.bimant.com/
https://odrviewer.io/

你们可以对比看看~

@dongfeng2134
Copy link
Contributor

界面显示的x,y坐标好像也不太对,同一个xodr文件,分别用两个opendrive文件查看器查看,显示是一致的,但是和TADSIM里不同: http://opendrive.bimant.com/ https://odrviewer.io/

你们可以对比看看~

每个可视化都有自己的逻辑,tadsim 界面显示时 是 加了偏移,选了地图中心点经纬度映射到屏幕的 0.0

@songkeke
Copy link
Contributor

你的odr文件里,header里是否有东西南北值,tadsim会把他作为整个地图的xy偏移

@plumewind
Copy link
Author

你的odr文件里,header里是否有东西南北值,tadsim会把他作为整个地图的xy偏移

我的odr文件是没有偏移的,上述有提到

<geoReference><![CDATA[+proj=tmerc +lat_0=22.5114810444912479 +lon_0=114.03711701865901 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +geoidgrids=egm96_15.gtx +vunits=m +no_defs ]]></geoReference>

@plumewind
Copy link
Author

界面显示的x,y坐标好像也不太对,同一个xodr文件,分别用两个opendrive文件查看器查看,显示是一致的,但是和TADSIM里不同: http://opendrive.bimant.com/ https://odrviewer.io/
你们可以对比看看~

每个可视化都有自己的逻辑,tadsim 界面显示时 是 加了偏移,选了地图中心点经纬度映射到屏幕的 0.0

哦哦,果然和我猜测是一样的呢。那TADSIM输出的ego经纬度也会加上你说的这个偏移?这个偏移我怎么获取到呢,我需要恢复它,然后和我们自己的系统连调。非常感谢~

@songkeke
Copy link
Contributor

把odr里面header的south和west清空再试试。tadsim的逻辑是xy坐标先减去south和west,再proj为经纬度,清空west就相当于去掉了偏移

@plumewind
Copy link
Author

plumewind commented Sep 19, 2024

把odr里面header的south和west清空再试试。tadsim的逻辑是xy坐标先减去south和west,再proj为经纬度,清空west就相当于去掉了偏移

嗯嗯,按照你说的,改了一下:

    <header revMajor="1" revMinor="4" name="" version="1" date="2024-08-30T16:38:02" north="0.0" south="0.0" east="0.0" west="0.0" vendor="MathWorks">
        <geoReference><![CDATA[+proj=tmerc +lat_0=22.5114810444912479 +lon_0=114.03711701865901 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +geoidgrids=egm96_15.gtx +vunits=m +no_defs ]]></geoReference>
    </header>

然后,ego输出的经纬度坐标正常了!
但是,有一个疑问就是,xdor文件中的north="0.0" south="0.0" east="0.0" west="0.0" 是描述整个高精度地图范围的,这样的话相当于地图面积是0,不会影响使用?
或者,在输出ego的经纬度的时候,是不是应该把这个偏移加回去呢,这样才算比较正常吧?你们觉得呢?

@plumewind
Copy link
Author

plumewind commented Sep 23, 2024

你好,我们尝试不修改地图,手动计算这个偏移:

utm_x = ( east + west ) * 0.5;
utm_y = ( north + south ) * 0.5;
ego_x += utm_x;
ego_y += utm_y;

然后再回算ego 的经纬度坐标,发现结果不对。请问你们具体是怎么算的?有具体的代码段位置吗?麻烦告知一下,非常感谢~

@songkeke
Copy link
Contributor

TAD_Sim\common\map_sdk\map_import\src\OpenDriveStruct.cpp 这个文件是所有地图xml的解析源码,你屏蔽掉ODHeader::parse中south和west的解析,不会影响tadsim其他功能

@plumewind
Copy link
Author

ODHeader::parse

只需要屏蔽south和west的解析?

/*ODHeader*/
bool ODHeader::parse(XMLElement* element) {
  ELE_CKECK;

  north = element->DoubleAttribute("north");
  south = element->DoubleAttribute("south");
  east = element->DoubleAttribute("east");
  west = element->DoubleAttribute("west");
......

不需要屏蔽north和east?

@songkeke
Copy link
Contributor

没用到,都屏蔽也无妨

@plumewind
Copy link
Author

没用到,都屏蔽也无妨

好的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants