首页 > 其他分享 >OpenDrive转lanelet2的方法

OpenDrive转lanelet2的方法

时间:2024-03-05 19:33:05浏览次数:30  
标签:__ lanelet2 OpenDrive self commonroad file import path 方法

1. 常用的高精地图格式如下:

 

2. 本文采用OpenDrive->CommonRoad->Lanelet2的方式进行地图格式转换

 

3. 转换代码如下:

import sys
import os
from lxml import etree

from commonroad.scenario.scenario import Tag
from commonroad.common.file_writer import CommonRoadFileWriter, OverwriteExistingFile
from commonroad.planning.planning_problem import PlanningProblemSet
from commonroad.common.file_reader import CommonRoadFileReader

# OpenDrive to CommonRoad
from crdesigner.map_conversion.map_conversion_interface import opendrive_to_commonroad
from crdesigner.map_conversion.opendrive.opendrive_parser.parser import parse_opendrive
from crdesigner.map_conversion.opendrive.opendrive_conversion.network import Network

# CommonRoad to Lanelet
from crdesigner.map_conversion.map_conversion_interface import commonroad_to_lanelet

class Xodr2lanelet2:
    def __init__(self, name):
        self.name = name
        self.opendrive_path = os.path.dirname(os.path.realpath(__file__)) + "/" + self.name + ".xodr"
        self.commonroad_path = os.path.dirname(os.path.realpath(__file__)) + "/" + self.name + ".xml"
        self.lanelet2_path = os.path.dirname(os.path.realpath(__file__)) + "/" + self.name + ".osm"

    def xodr2lanelet2(self):
        self.__xodr2commonroad()
        self.__commonroad2lanelet2()

    def __xodr2commonroad(self):
        # load OpenDrive file, parse it, and convert it to a CommonRoad scenario
        scenario = opendrive_to_commonroad(self.opendrive_path)

        # store converted file as CommonRoad scenario
        writer = CommonRoadFileWriter(
            scenario=scenario,
            planning_problem_set=PlanningProblemSet(),
            author="Synkrotron",
            affiliation="Synkrotron",
            source="CommonRoad Scenario Designer",
            tags={Tag.URBAN},
        )
        writer.write_to_file(self.commonroad_path, OverwriteExistingFile.ALWAYS)

    def __commonroad2lanelet2(self):
        commonroad_to_lanelet(self.commonroad_path, self.lanelet2_path)        

def main(name):
    convert = Xodr2lanelet2(name)
    convert.xodr2lanelet2()

if __name__ == "__main__":
    main(sys.argv[1])

 

4. 转换方法:

(1) 安装地图转换包commonroad:

pip3 install commonroad-all -i https://pypi.tuna.tsinghua.edu.cn/simple

(2) 修改地图转换包commonroad中的代码:

~/.local/lib/python3.10/site-packages/crdesigner/map_conversion/opendrive/opendrive_parser/parser.py中将

with file_path.open("r") as file_in:

改为:

with open(file_path, "r") as file_in:

~/.local/lib/python3.10/site-packages/crdesigner/config/lanelet2_config.py中将

autoware = Attribute(False, "Autoware", "Boolean indicating whether the conversion should be autoware compatible")

改为:

autoware = Attribute(True, "Autoware", "Boolean indicating whether the 
conversion should be autoware compatible")

将:

use_local_coordinates = Attribute(False, "Use local coordinates",
                                      "Boolean indicating whether local coordinates should be added")

改为:

use_local_coordinates = Attribute(True, "Use local coordinates",
                                      "Boolean indicating whether local coordinates should be added")

(3) 运用3中的代码进行转换,示例如下:

python3 xodr2lanelet2.py Town01/Town01

  

参考文献:

[1] https://autowarefoundation.github.io/autoware-documentation/main/how-to-guides/integrating-autoware/creating-maps/converting-utm-to-mgrs-map/

[2] https://zhuanlan.zhihu.com/p/393715053

[3] https://commonroad.in.tum.de/getting-started

[4] https://commonroad.in.tum.de/tutorials/map-conversion

标签:__,lanelet2,OpenDrive,self,commonroad,file,import,path,方法
From: https://www.cnblogs.com/rzy-up/p/18054736

相关文章

  • Java 切入点 JoinPoint的使用,用于拦截方法,与自定义注解
    这里的代码案例是外卖系统中,用于统一修改新增和更新内容中的更新时间与更新人内容,根据具体情况,在使用时进行自定义修改就行了第一部分是annotation的,因为是为了自动填充数据准备,所以创建annotation包后,在其中创建了AutoFill的注解类型/***自定义注解,用于标识某个方法需要用......
  • 揭秘麦肯锡的方法:产品经理解决问题指南
    您是否想知道世界上最成功的产品经理如何始终如一地提供不仅满足而且超出预期的解决方案?秘密可能就在于世界上最负盛名的咨询公司之一麦肯锡公司所磨练的方法论。本文深入探讨了麦肯锡的问题解决流程,该流程专为希望提升水平的产品经理量身定制。01.麦肯锡方法:产品管理风......
  • 在PowerShell中下载文件是一项常见的任务,可以通过多种方法完成。下面我将介绍使用Invo
    在PowerShell中下载文件是一项常见的任务,可以通过多种方法完成。下面我将介绍使用Invoke-WebRequest、New-Object和Start-BitsTransfer命令来下载文件的方法。使用Invoke-WebRequestInvoke-WebRequest是一个非常强大的命令,用于向网页发送HTTP和HTTPS请求。你可以使用它来下载文......
  • Graphics2D二维码绘制自动换行文本方法
    /***绘制自动换行文本(默认最大3行,代码中的数字都是调试好的,不可轻举妄动!!)**@paramg{@linkGraphics2D}*@paramstr文本*@paramy坐标Y*@paramwidth文字区域总宽度*@paramlineHeight每行高......
  • sql注入--基础注入判断方法(构造闭合)
    在我们拿到一个sql注入的题目之后,在确定了注入点之后,接下来要做的事情就是进行基础注入判断。在开始前,我们需要理解一个SQL注入中最常用的词汇——构造闭合。对于SQL处理语句后台的写法:SELECTusername,passwordFROMusersWHEREid=?这里的问号可以有多种的闭合方式,......
  • Nginx负载均衡配置方法
    首先,确保已经安装了nginx,然后编辑配置文件/etc/nginx/nginx.conf第一步:定义upstream组在配置文件中定义一个upstream组,用于指定一组后端服务器。每个服务器可以通过IP地址和端口号来指定,并且可以为每个服务器设置权重(weight)以表示它们处理请求的能力。upstreambackend_group......
  • 动态代理中debug设置断点会执行invoke方法且args为null的原因
    情景写了个proxyExample,运行一看,竟然debug的结果跟run的结果竟然不一样,debug中会多次执行invoke方法,且并不调用sayHello方法代码publicclassProxyExampleimplementsInvocationHandler{privateObjecttarget;/***创建代理,将真实对象的类、构造方法等信息告诉代理类并......
  • 数据挖掘概念与技术 - chapter 6 - 挖掘频繁模式、关联与相关性:基本概念与方法
    ***关联推荐!频繁模式:频繁地出现在数据集中的模式,给出数据集中反复出现的联系。频繁序列模式:如有序购买一系列产品频繁结构模式:如组合购买产品sample购物篮分析:通过发现顾客放入他们购物篮中的商品之间的关联,分析顾客的购物习惯,这种关联度发现可以帮助零售商在哪些商品频繁......
  • macOS14使用brew下载Redis时出现的问题和解决方法
    当我使用brew下载redis时系统:macOS14(base)hanxuxian@hanxuxiandeMacBook-Air~%brewinstallredis报错信息:Error:git:unknownorunsupportedmacOSversion::dunnoError:'git'mustbeinstalledandinyourPATH!Warning:YouareusingmacOS14.Wedon......
  • Git无法正常工作,因为检测到XXX存储库可能不安全(unsafe repository)的解决方法
    背景前两天因为对硬盘进行了误操作,导致系统无法进入,只能重新安装。待系统安装完毕后第一时间将VS下了回来。在VS开发环境部署完毕后,我打开了自己的解决方案,结果在“Git更改”选项卡内遇到了如下图的提示(分别是VS2022和VS2019): 过程在点击“将其标记为安全”后该存储库可以正......