Open plumewind opened 2 months ago
界面显示的x,y
坐标好像也不太对,同一个xodr文件,分别用两个opendrive文件查看器查看,显示是一致的,但是和TADSIM里不同:
http://opendrive.bimant.com/
https://odrviewer.io/
你们可以对比看看~
界面显示的
x,y
坐标好像也不太对,同一个xodr文件,分别用两个opendrive文件查看器查看,显示是一致的,但是和TADSIM里不同: http://opendrive.bimant.com/ https://odrviewer.io/你们可以对比看看~
每个可视化都有自己的逻辑,tadsim 界面显示时 是 加了偏移,选了地图中心点经纬度映射到屏幕的 0.0
你的odr文件里,header里是否有东西南北值,tadsim会把他作为整个地图的xy偏移
你的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>
界面显示的
x,y
坐标好像也不太对,同一个xodr文件,分别用两个opendrive文件查看器查看,显示是一致的,但是和TADSIM里不同: http://opendrive.bimant.com/ https://odrviewer.io/ 你们可以对比看看~每个可视化都有自己的逻辑,tadsim 界面显示时 是 加了偏移,选了地图中心点经纬度映射到屏幕的 0.0
哦哦,果然和我猜测是一样的呢。那TADSIM输出的ego经纬度也会加上你说的这个偏移
?这个偏移我怎么获取到呢,我需要恢复它,然后和我们自己的系统连调。非常感谢~
把odr里面header的south和west清空再试试。tadsim的逻辑是xy坐标先减去south和west,再proj为经纬度,清空west就相当于去掉了偏移
把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的经纬度的时候,是不是应该把这个偏移加回去呢,这样才算比较正常吧?你们觉得呢?
你好,我们尝试不修改地图,手动计算这个偏移:
utm_x = ( east + west ) * 0.5;
utm_y = ( north + south ) * 0.5;
ego_x += utm_x;
ego_y += utm_y;
然后再回算ego 的经纬度坐标,发现结果不对。请问你们具体是怎么算的?有具体的代码段位置吗?麻烦告知一下,非常感谢~
TAD_Sim\common\map_sdk\map_import\src\OpenDriveStruct.cpp 这个文件是所有地图xml的解析源码,你屏蔽掉ODHeader::parse中south和west的解析,不会影响tadsim其他功能
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?
没用到,都屏蔽也无妨
没用到,都屏蔽也无妨
好的
你好,
我在导入一个xodr文件(由实际真实环境制作得出),该文件的投影方式是:
在实际仿真时发现,ego的经纬度信息和实际环境的经纬度信息不相符,经查阅源码,发现经纬度反算好像有问题? 在
common/map_sdk/map_import/src/OpenDriveParse.cpp
中的170行的get_lane_scale_toEnu函数中:这里的计算方式是分别计算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计算的代码? 非常感谢~