首页/文章/ 详情

VTD场景搭建从听说到入门教程

10月前浏览3872

VTD作为自动驾驶主流仿真软件被各大主机厂与自动驾驶供应商广泛应用。但国内各大网站相关资料甚少,原厂文档又十分冗长。于是突发奇想决定试着写一个汉语精简版的VTD场景搭建的入门文章系列。
在实操之前让我们先来了解一下VTD。

1. VTD

VTD (Virtual Test Drive)是德国VIRES公司开发的一套用于驾驶辅助系统,主动安全和自动驾驶的完整模块化仿真工具。其运行于Linux 平台,功能覆盖了道路环境建模、交通场景建模、天气和环境模拟、简单和物理真实的传感器仿真以及高精度的实时画面渲染等。
VIRES公司是自动驾驶仿真开放格式OpenDrive, OpenCRG 和OpenScenario的主要贡献者,VTD的功能和存储也依托于这些开放格式。
VTD 的场景搭建主要包括道路环境搭建和动态场景配置这两个步骤。道路环境等静态场景的搭建使用路网编辑器Road Network Editor (ROD)完成;动态场景的配置场景编辑器Scenario Editor来实现。

2. 文章的大致内容与目录

本系列计划覆盖场景建设两个部分(静态场景,动态场景)的使用指南与操作说明。具体内容与目录如下:
静态场景部分(ROD使用说明)
1. 建立一个简单场景(环路)
  • 打开VTD与ROD
  • 设置需要显示的元素
  • 建立一个环路line
  • 将line转变为track
  • 延长track
  • 分解
  • 复 制道路
  • 完成道路设置
  • 导出道路文件
2. VTD进阶功能介绍
  • 建立立交桥
  • 建立路口
3. VTD道路文件简介
  • tdo文件

  • xodr文件

  • osgb文件

态场景部分(Scenario Editor使用说明)
4. 在Scenario Editor中导入静态场景文件
5. 添加交通参与者信息(车辆)
  • 设置车辆信息
  • 设置车辆动作与行驶路线
  • 添加路面障碍
6. 添加交通参与者信息(其他)
  • 添加行人
  • 随机交通流生成
7. 设置道路基础设施信息
  • 设置红绿灯时钟

以下正文。

1. 建立一个简单场景(环路)

1.1 打开VTD和ROD
进入VTD/bin文件夹,打开bin位置的Terminal。输入指令:
    sudo ./vtdstart.sh
    按回车打开VTD。这是通过管理员权限打开的VTD程序。(在Terminal进入VTD/bin位置后直接输入 ./vtdstart.sh也可以;或者可以自行创建快捷开启方式。)
    然后,确认上方工具栏绿色对勾是否亮起,亮起则license正确。按【新建文件(如下所示)】新建工程文件,在弹窗里输入命名,按对勾进入VTD准备界面。
    点击VTD上方工具栏【Tools->RoadDesigner】进入ROD,确认弹出的绿色窗口显示ROD has been initialized successfully。
    1.2 设置需要显示的元素
    ROD窗口上方的工具栏用来切换显示需要显示的元素。
    点击‘上图位置1处’显示背景网格,通过【View -->Grid】可以调整网格的大小,这里选择10m。点击‘上图位置2处’可追踪网格交点,这样可以通过网格快速的确认绘制道路的起点和终点。点击‘上图位置3处’显示车道线,以便之后可以直观的设置车道线。
    1.3 建立一个环线line
    1.3.1 画一条直线
    点击‘下图位置1处’图标开始画直线,ROD里面的直线工具通过选择直线的起点和终点来绘制直线,用红色光标左键点击直线,可以在右侧界面设置直线的长度,起点和终点。通过绘制四条直线的方法连接出一个50*50的正方形,如‘图4位置2处’。
    (因原图线太细,上传后看不清reference line,所以我这里把他们加粗了。)
    1.3.2 连接两条直线
    将光标切换到‘下图位置1处’,选择绘制的两条直线,点击‘下图位置2处’自动连接两条直线。用红色光标单击刚刚建立的圆弧。在右边设置界面可以改变圆弧的半径。
    小提示:连接的时候两条线要变成同一方向(先将line转变为track,换方向后再转变回line)。
    1.4 将line变成track
    全选刚才建立的环路,点击‘上图位置3处’图标将刚才建立的环线变成一条路,如下图。(因原图线太细,上传后看不清reference line,所以这里把他们加粗)。
    1.5 延长track
    鼠标左键选择道路后,右键单击选择的道路。在弹出的下拉菜单里选择【geometry ->add line】,就可以将道路沿着道路方向延长。
    1.6 分解
    鼠标左键选择道路,按住ctrl使用鼠标左键单击道路。右键在弹出的下拉菜单里选择【geometry-> split line】,就可以在道路中点处添加sticky point。(注意:这时候分开的是line,track并没有被分开)。
    鼠标左键选择道路,按住ctrl使用鼠标左键单击sticky point。右键在弹出的context menue里选择【geometry->split before element】,就可以将道路从sticky point处分解为两部分。
    1.7 复 制道路
    右键单击道路,将鼠标滑动到下拉菜单里的track栏,可以对道路进行复 制。复 制道路时,如果选择【Duplicate with properties】,会把道路和道路周围的街景一起进行复 制。如果选择【Duplicate without properties】,就不会把道路周围的街景一起复 制进来。如果想复 制道路一侧的街景,可以在同样的选项里选择【separate】,这样道路就被按照行驶方向分成了两部分。
    1.8 完成道路设置
    1.8.1 确定偏移量
    建立完道路之后拥有了一个道路的起点,这时候需要让道路拥有宽度。首先用红色光标左键点击道路,这时候会发现右侧出现道路设置界面。点击‘下图位置1处’编辑基本道路信息,在右侧POS栏下右键,新建并设置偏移量(偏移量就是即将设置的道路起点),此处从道路起点开始设置道路即偏移量为0。
    1.8.2 定义道路
    右键点击‘下图位置1处’,出现下拉目录。选择在基准线左侧新建一条道路,点击insert new left在00的左侧新建一条车道。此时的车道是没有宽度的,在offset里面点击右键,在下拉菜单里选择new,新建一个宽度信息。在width里输入需要设定的道路宽度,根据中国车道标准设置车道宽度为3.75m。
    在‘下图位置1处’里可以设置车道线的模式。同样,在offset里面新建一个车道线模块,在mark里选择需要定义的车道线格式,这里给两条车道的车道线都设置为solid(单实线)。
    在‘下图位置1处’可以设置路面样式,可以选择将路面设置为沥青路面,草坪,或者路缘。此处设置路面为standard。
    在‘下图位置1处’可以设置道路的限速,此处设置道路的限速为60km/h。
    如果对道路没有特殊要求可以使用VTD自带的参数自动生成道路类型。新建完track之后,在offeset里新建一个存储道路信息的文件。然后在view的下拉菜单里,将光标划到macro的位置。在macro里可以找到需要的道路模型,快速配置道路信息。
    1.8.3 设置交通标志
    左键点击设置栏里的‘下图位置1处’图标,在右侧的POS栏里新建一个文件,意为在此道路的相对距离处建立此交通标志。右键点击add,从库里导入一个新的标志。左侧栏中“add”的数量表示可以在这个位置添加的标志数量。Orientation可以设置交通标志的朝向,通常情况下交通标志的朝向都会与行驶方向相对。C-Offset可以设置当前交通标志相对于基准线的偏移量。
    此处添加一个描述道路限速的交通标志,鼠标右键点击add添加一个新的交通标志。选择【filter->static-town】,在里面找到相应的限速标志,添加进来。此处将路标放置在道路边缘,所以设定C-Offset为3.75m。然后在top lightp处设置标志高度为1.75m。
    由于要设置立式的交通指示牌,同样需要给这个交通标志加一个立柱。在add里面找到filter->poles添加我要的立柱类型。同样将c-offset设定为3.75m。
    设置完后可以在element里检查他们的z-offset,需要确认立柱的z-offst大于交通标志的z-offst才能保证交通标志是安装在立柱上的。
    然后再给道路添加两个红绿灯,在POS里新建两个文件,一个位置设置为30,另一个位置设置为75。用同样的方式把两个红绿灯放置到路边。
    对于红绿灯,需要设置清晰明了的id,以方便在之后SE的设置里设置相对应红绿灯的时钟。
    1.8.4 添加街景
    在这里可以使用excute marco快速创建街景。首先使用红色箭头选择道路。单击右侧设置界面的‘下图位置1处’按钮进入到设置界面。在设置界面点击【action->excute marco】,弹出下方设置窗口。
    在蓝色实线圈出的区域内,可以选择想要插入的街景类型。在这里选择【Motorway->RQ25】。在下方的信息栏side里可以选择给道路左边添加街景或者给道路右边添加街景。在type里可以选择添加路面类型(style和外部景观externals)。
    也可以使用更加复杂的方式自定义街景:
    在添加道路元素之前,首先添加路面信息。在右侧设置栏里选择‘下图位置1处’。
    建立路面:右键新建一个道路元素,更改道路元素的起点和终点,在道路外侧添加路面信息,编辑路面宽度。
    在建立内部路面的时候通常选择分段建立路面元素,将道路按照需分解为多段,给每段分别建立不同的道路信息。
    同时VTD也提供导入外部模型的选项,鼠标右键单击编辑面板,在下拉菜单里选择3D-model->add single。根据想要添加的元素选择filter,然后从面板里选择对应的模型。鼠标左键单击模型,可以在下方菜单里调整模型的位置,大小和角度。在下方编辑栏里可以编辑街景的大小,位置和角度。
    如果想要快速插入重复街景。可以使用repeat功能。首先选择重复的方式,这里选择了aligned on path。然后选择重复街景间的间隔距离。点击resolve就可以生成一个重复街景。通过控制s-offset的start和stop的值可以控制生成街景的数量。
    1.8.5 道路预览
    在建好道路之后可以对其中一部分或者整个道路进行预览。可以在左侧工具栏里点击‘下图位置1处’,用鼠标框出想要预览的区域。然后单击‘下图位置1处’,生成预览场景。
    (小tips1:在预览之前需要先保存文件才能正确预览。小tips 2:在道路场景比较复杂的情况下生成预览文件需要的时间较长,期间ROD不会给出任何提示,需要耐心等待一段时间)
    1.8.6 快速生成道路
    在VTD里可以使用插入tiles快速建立道路。
    使用红色鼠标,右键单击编辑面板,选择add tiles。使用filter选择需要的tiles添加到面板里。
    两个tiles内包含的路需要通过手动连接起来,否则在仿真中车辆无法通过连接点。使用红色鼠标选择两条路,右键在下拉菜单里选择【tracks->link logically】。
    如果想要在已编辑好的tile里新增element,需要同时选择element和tile。在上方下拉菜单里单击【edit->Tile->add element】。将新生成的tile使用save as 保存到TilelLib里,就可以重复调用新的tile了。
    新生成的tiles不能使用老的方法调用。点击File->Import->Merge overlays导入被编辑过的tiles。
    1.9 导出道路文件
    首先单击保存按钮保存文件为可编辑的【.tdo】格式,方便未来对道路进行调整。
    在最上方菜单里单击generate选项,在下拉菜单里选择Database生成【.osgb】文件,再点击OpenDRIVE生成【.xodr】文件。这两个文件包含了道路信息和道路相关的元素信息,之后再使用SE创建场景的时候会用到这两个文件。

    2.VTD进阶功能介绍

    2.1 建立立交桥
    为了方便对路面高度进行观察需要从上方菜单的view里加入Sec. View。在sec. View里可以观察到路面的高度变化。
    进入右侧道路设置栏里的路面高度设置栏。在POS栏里可以在不同位置添加结点,进入节点可以对节点的高度和节点半径进行编辑。
    2.2 建立路口
    ‘下图位置1处’的工具可以用来建立路口,使用这个工具圈出想要连接的道路节点,生成的黄色矩形区域为路口区域。在连接前需要确认现在建立的每条道路都是不相交的,如果道路之间有交叉,或者连接的部分,在生成道路的时候会报错。
    在右侧工具栏里可以找到圈出的节点conn,右键点击conn,然后使用add path给每个节点添加Path,添加的Path数量为当前节点需要连接的道路总和。
    使用鼠标左键选择需要连接的道路,被选择的道路区域会变为黄色。
    点击“Create Path”将选择的道路连接起来。
    再次用鼠标左键单击生成的路径可以在右侧信息栏里更改路径的半径和螺旋线的长度。

    3. 道路文件介绍

    3.1 tdo文件
    保存ROD项目时生成的文件,是ROD项目的可编辑模式。重新编辑项目时通过在路径里打开.tdo文件进行编辑。
    3.2 osgb文件
    通过ROD项目生成的贴图与路面纹理文件,导出Database时生成。包括了大量不影响车辆行驶的元素。不可在VTD中编辑。
    3.3 xodr文件
    通过ROD项目生成的道路信息文件,内容包括了所有路段在路面设置界面里定义的信息(包括长度信息,宽度信息,车道线信息)。不可编辑,可以编码。.xodr文件同.xml文件一样遵循Opendrive的路面定义标准。如下图所示:
    在生成两侧各有三条lane的道路时,会产生如下图所示xodr文件。
    由于参考路段只有一段,所以只有一段<road></road>的信息。当一个ROD文件里有多段路存在时,会在.xodr文件里将每段路的信息分开保存,一段路的信息存储在一段不同的<road></road>里。
    <link></link>里的信息说明了该路段在start处和在end处连接的路段id。
    <plan View></plan View>里的信息说明了该路段俯视图的形状。
    <lanes></lanes>里包含了不同id的车道线信息,包括id为0的中心线信息。所有在‘下图位置1处’里定义的信息都在lanes里以opendrive的格式显示。
    <signals>< /signals >里包含了车道上添加的交通标志的信息。
    关于opendrive不同语句对应的信息都可以在opendrive的说明书中找到对应的说明。
    xodr文件涉及到Opendrive标准问题,Opendrive标准日后会单独详细介绍。

    4. SE中导入静态场景文件

    在VTD界面上方菜单找到【Tools->SenarioEditor】,点击进入SenarioEditor。SenerioEditor主页面下图所示。
    点击Properties‘下图位置1处’,进入下图所示界面。在Layout File部分按照如下图所示路径导入.xodr文件,在Visual Database部分按照如下路径导入.opt.osgb文件。成功导入完两个文件后点击确认键生成场景。

    5.添加交通参与者信息(车辆)

    5.1 设置车辆信息
    首先将道路放大到想要添加车辆的位置。单击‘下图位置1处’图标开始放置车辆。鼠标左键单击场景,可以将车辆置界放置到鼠标所在的位置。
    双击车辆,进入到车辆的设置界面,如下图。
    此处首先建立一个可以沿着道路正常行驶的车辆。将车辆名称改为“1”,Animation选项选择external,行驶速度改为30km/h。
    在Action界面可以设置Trigger,使用trigger可以设置车辆在驶入或驶出trigger定义区域范围时进行的动作(变道,改变行进路线,或使用scp指令指示车辆做出一些复杂的操作)。(没有驾驶员的车辆不能做任何动作。)
    此处添加一个控制车辆减速的trigger。首先设置作用对象,将作用对象改为已经设置好的车辆“1”。Release Type代表Trigger的放置方式,此处选择Absolute Positon表示Trigger位置由坐标轴确定,使用鼠标可以将trigger拖拽到地图的任意位置。(Activation Radius可以改变Trigger的大小。)
    点开speed change,勾选use,将target speed改为0km/h。在下方选择on entre, 车辆就会在驶入trigger范围的时候触发减速动作,速度逐渐减为0。如果选择 on exit,车辆就会在驶离Trigger范围的时候触发减速。
    车辆行驶的方式同样受到设置的路面的限制(限速,路面状况等),如果要打破限制,需要给驾驶员设置特定的操作,或者给车辆一个强制属性。
    5.2 设置车辆路线
    首先需要在顶部菜单里调出显示车辆路线【view->Path/PathShape】。
    5.2.1 设置车辆路线
    鼠标左键单击‘下图位置1处’图标进入路线选择界面。Identifier处如果变成红色则表示道路名称重复。Status的颜色表示了定义目标路径的状态,黄色表示路径不完整,绿色表示路径完整且可以生成,红色表示路径之间有连接错误或者未进行连接,需要重新回到ROD里检查道路之间的连接状况。
    按顺序点击道路可以创建路径,如果两条道路之间有路口则可以忽略路口,直接点击两条道路,就可以在路口处自动生成路径。此处按顺序点击车辆所在道路,和十字路口下方道路,自动生成车辆行驶路径。
    确认路径之后,点击‘下图位置1处’创建新的路径,在右侧List里显示了每一段路的详细信息。
    要让车辆按照设定的Path行走,需要重新对车辆的Position Type进行设置。将车辆的Position Type改为Route,让车辆按照Route行走。在下方Route选项卡里选择相应的路线。
    5.2.2 设置车辆行驶精确路线
    鼠标左键单击‘下位置2处’图标开始设置车辆行驶线路。首先在Shape Type的位置选择拟合路线的方法,这里使用Polyline。单击道路上一点确认车辆行驶起点,接下来设置更多的点完善路线。
    设置完路线之后,在设置窗口里单击加号新建一个路线信息。在右侧的编辑窗口可以编辑每个坐标点的位置信息。使用鼠标拖动的方法也可以直接在场景里更改坐标点的位置。这里使用鼠标拖动的方法改变车辆起点。
    为了让车辆按照规定的路线行进,需要对车辆的行为方式进行更改。双击目标车辆进入车辆的设置界面,在Position Type里将车辆的位置选择方式改为PathShape。在下方的Path Shape界面选择路线,这样车辆位置将自动更改到设定路线的起点,在之后运行VTD的时候车辆就会沿着设定的路线行走。
    5.3 添加路面障碍
    鼠标左键单击‘下图位置1处’图标开始设置路面障碍。路面障碍高度默认为路面高度。刚添加的路面障碍是一个色子的样式。双击色子可以进入路面障碍编辑界面。
    在Object栏里可以设置障碍物的基本信息,Orientation可以改变障碍物的方向,Scalling Factor里可以改变障碍物x/y/z方向的大小。

    6.添加交通参与者信息(其他)

    6.1 添加行人
    点击‘上图位置1处’添加行人,行人的z坐标取决于道路,行人的z坐标随着他的移动随时更新。双击行人可以进入行人设置界面改变行人的设置。Initialisation里可以改变行人的基本设置。Action里可以用和设置车辆行为类似的方式设置行人的动作。
    此处给行人规定了一条路线,让行人按照路线行走。用给车辆创建精确路线同样的方法在十字路口创建一条路线。
    在行人设置界面的Action界面里点击New添加新动作。在Path Shape的下拉选项勾选use并选择创建好的路线。
    在Motion的下拉界面选择行人的动作。这里选择行人动作为Walk,在Speed里可以自由设置行人的移动速度。
    6.2 随机交通流生成
    在ScenarioEditor上方菜单栏里点击【Edit->Senario Properties】,点击Pulk Traffic进入编辑界面。在下方车辆选择界面选择想要目标车辆作为生成traffic的参考点。在右侧编辑窗口可以设置区域内自动生成的车辆数量,范围半径,范围距离本车的偏移量等信息。

    7.设置道路基础设施信息

    7.1 设置红绿灯时钟
    单击‘下图位置1处’图标进入红绿灯时钟设置界面。
    红绿灯有几种行为模式:
    在红绿灯的编辑过程中主要是对红绿灯Controller和Light Signs进行编辑。同一个controller下的红绿灯遵循相同的时钟,对于同一个controller下的traffic sign可以设置不同的亮灯状态。红绿灯的controller和Sign id都是在ROD里添加的时候进行编号的,如下如所示。所以在设置红绿灯的时候,对于相同相应方式的红绿灯需要设置相同的controller和不同的id。
    点击GUI中的Traffic Lights进入Configure Traffic Lights窗口,窗口中会有Controller的对应的数值,在Controller中修改时间相位。
    点击Create Phases,在弹出的Edit Controller Phases中单击New然后选择Phases Type即停止、通行、警惕等状态和设置保持时间Duration Time,依次添加所需的几个状态和时间。
    Controller的Phases编辑完成后展开Controller,可以看到分配到该Controller的Lights id。
    点击Create Lights,进入Edit Traffic Light Phases窗口,点击New增加Controller中每个相位对应的灯。
    这时再回到主界面就可以看到controller下拉菜单里,给不同id的红绿灯设置的不同闪烁方式。
    VTD的入门介绍就到这里了,希望大家工作愉快!
    文本完。
    本文转载自知乎。系数多篇文章的整合,内容稍有更改。原文链接见文末链接。本公 众号转载文章仅作学习使用,如有侵权,还请联系后台处理。
    来源:车路慢慢
    Virtual Test DriveVIRES自动驾驶控制渲染
    著作权归作者所有,欢迎分享,未经许可,不得转载
    首次发布时间:2023-06-22
    最近编辑:10月前
    李慢慢
    硕士 自动驾驶仿真工程师一枚
    获赞 10粉丝 57文章 122课程 0
    点赞
    收藏
    未登录
    还没有评论

    课程
    培训
    服务
    行家

    VIP会员 学习 福利任务 兑换礼品
    下载APP
    联系我们
    帮助与反馈