如何创建并导入新的地图
1.创建新的map
所需文件:
- Binaries
.fbx
-你创建地图所需的网格,i.e. 道路、车道线、人行道etc. - OPENDRIVE
.xodr
-车辆在地图中进行循环运行所需的路网信息
在现有的CARLA地图中进行修改也是可行的,请查阅地图修改教程
下面的步骤会介绍如何使用Runner软件创建地图,如果地图是使用其它软件创建的可以直接查阅本教程的3.2部分
2.通过RoadRunner创建新的地图
RoadRunner是一个功能强大的从Vector Zero创建3D场景的软件,使用起来也很简单,在很少的步骤后你就可以创建令人印象深刻的场景,你可以在VectorZreo的网页上下载RoadRunner的教程。
查阅RoadRunner的文档进行安装并开始。
他们也提供了很有用的教程来帮你学习如何使用RoadRunner,最好学习一下!
注意:在地图中心(0,0)创建地图
2.1校验地图
-
检查所有的连接处和图形都看起来是对的。
- 通过点击
OpenDRIVE Preview Tool
来将OpenDRIVE路网可视化
注意OpenDRIVE Preview Tool
按钮帮助你检查所使用地图的完整性,如果地图中的连接处有任何错误,请点击Maneuver Tool
和Rebuild Maneuver Roads
按钮
2.2导出地图
在检查没有任何错误之后,是时候将地图导出至CARLA中了。
1.使用主菜单中的CARLA选项来导出场景:
File > Export > CARLA (.fbx + .xml + .xodr)
2.确保Export individual Tiles
为没有选中,这样的话就会保证所有的块会足证一个fbx文件,可以方便追踪地图。
3.点击
Export
按钮。
这会在others文件中产生
mapname.fbx
和mapname.xodr
文件
如果想要更深入的了解相关的导出选项,请参考VectorZeros's的文档。
3.导入至Unreal
这一节分为两部分,第一部分展示如何从RoadRunner中导入,第二部分展示如何从其它可以生成.fbx
和.xodr
文件的软件中导入。
注意.fbx
和.xodr
文件必须有相同的文件名,i.e.mapname.fbx
和mapname.xodr
我们也创建了新的导入资源至Unreal中的方法,请参考这里
3.1从RoadRunner中导入
3.1.1 安装插件
RoadRunner提供了一些的插件来使导入变得简单。
1.将RoadRunner的插件放置在RoadRunner的安装文件夹下:
/usr/bin/VectorZero/Tools/Unreal/Plugins
2.将这些文件复制到CarleUE4的插件目录下:
/carla/Unreal/CarlaUE4/Plugins/
3.重新编译插件
在Windows中重新编译
1.创建项目文件
- 右击
uproject
文件,并选择Generate Visual Studio project files
2.打开项目并编译插件
在Linux中重新编译插件
> UE4_ROOT/GenerateProjectFiles.sh -project="carla/Unreal/CarlaUE4/CarlaUE4.uproject" -game -engine
最后,重启Unreal引擎,并确保检查框中两个插件的开关都是开的Edit > Plugins
3.1.2导入
- 使用
import
按钮导入mapname.fbx文件至/Content/Carla/Maps
目录下
2.设置Scene > Hierarchy Type
至 Create One Blueprint Asset状态(默认是这样的)。
3.设置Static Meshes > Normal Import Method
至Import Normals状态。
4.点击
Import
5.保存当前的层级
File > Save Current As...
> mapname.
新地图现在应该在Unreal Engine的内容浏览器的其它地图旁边了。
就这样,地图就准备好了,可以上菜了!
3.2从文件中导入
这是导入地图至Unreal中的通用方式。
1.在Ureal的Content/Carla/Maps
下面的Add New > Level
中创建新的层级。
2.从BaseMapContent/Carla/Maps/BaseMap
中复制赵明文件夹及其内容,将其张贴至新的层级中,否则地图中没有光会是一片黑暗。
二进制文件(.fbx)
1.使用import
按钮导入mapname.fbx至/Content/Carla/Maps
下的新文件夹,确保以下选项是没有被选中的:
- Auto Generate Collision
- Combine Meshes
- Force Front xAxis
- Normal Import Method - Import Normals
2.检查以下选项:
- Convert Scene Unit
- 如果你想要导入材质和纹理:
- Material Import Method - Create new materials
-
Import Textures
一旦所有的文件上载完毕,你应该会以在你选中的文件夹中的一些静态网格结束。
3.将他们全部拖曳至层级中。
4.当Unreal Engine结束加载后,使网格于点(0,0,0)位置处居中,你就获得了Unreal中的地图!可喜可贺!可喜可贺!
5.创建碰撞collision,这样的话车辆和行人才不会掉进深渊里。
- 选择要具有碰撞属性的网格
- 右击
Asset Actions > Bulk Edit via Property Matrix...
- 在Property's Matrix的搜索框中搜索collision
- 将
Project Default
中的Collision complexity
改为Use Complex Collision As Simple
- 去
File > Save All
保存
6.最后,为了语义分割的地面真实性,将Content/Carla/Maps/mapfolder
文件夹导入的静态网格移至Carla/Static
之后的文件夹:
Terrain/mapname
Road/mapname
-
RoadLines/mapname
OpenDRIVE(.xodr)
1.复制Content/Carla/Maps/OpenDrive
文件夹下的.xodr
文件
2.打开unreal的层级,并将*Open Drive Actor *拖曳至此,它会读取层级的名称,搜索同名的Opendrive文件并读取之。
然后就是这样,路网信息就加载至了地图中。
4.设置交通行为
一旦所有的设定都加载至了层级中,是时候创建交通行为了。
1.点击* Open Drive Actor*
2.以下面的框处于同样的命令:
- Add Spawners
- (Optional) On Intersections (For more spawn points)
- Generate Routes
这会生成一群RoutePlannerVehicleSpawnPoint角色,这使得车辆能够生成并进入自动驾驶模式。
4.1交通灯和信号
为了规范交通,交通灯和信号必须被放置到地图中去。
1.拖曳traffic light / sign角色至层级中,并放置它们
2.调整每个交通信号/灯的trigger box
直至它覆盖了其发挥效用的道路。
3.如果是交叉路口的交通灯,拖曳traffic light group角色至层级面板中,并绑定包含的所有信号灯。
后面的这些步骤可能需要一些错误和尝试,交通灯定时和激活框可能需要一些调整和测试才能完美的适合模拟的城市环境。
5.添加行人导航区域
为了使行人网格能够导航,我们使用了Recast & Detour库。https://github.com/recastnavigation/recastnavigation.
1.克隆或下载
Recast & Detour。
2.在编译RecastDemo之前,你需要在RecastDemo/Source/MeshLoaderObj.cpp
MeshLoaderObj contructor中改变m_scale
变量,将其从1.0f
更改为0.01f
。
rcMeshLoaderObj::rcMeshLoaderObj() :
m_scale(0.01f),
m_verts(0),
m_tris(0),
m_normals(0),
m_vertCount(0),
m_triCount(0)
{
}
然后编译RecastDemo,可以参考其指引。
返回到unreal engine中
1.选择你所希望让“行人”产生和行走所处的网格。
2.将它们以mapname.obj
文件导出并保存,File > Export Selected....
3.运行 RecastDemo./RecastDemo
- 从
Sample
的参数框中选择Solo Mesh
- 从
Input Mesh
的参数框中选择mapname.obj文件。
4.先点击Build
按钮,然后在编译完成后,点击Save
按钮
5.改变RecastDemo/Bin
中生成的binary文件的文件名为mapname.bin
6.将mapname.bin
文件拖曳至Content/Carla/Maps
路径下的Nav
文件夹中。
现在“行人”就可以随机的生成,并可以在选择的网格上行走。
技巧
- Traffic light group控制着哪个交通灯在什么时候激活(变色)。你可以在
GreenTime
中设定其保持为绿色的时间,在YelloTime
设置其保持为黄灯的时间,你可以在ChangeTime
中设置有红灯变为下一个绿灯所需的时间。
-
你可以添加车辆生成点,它应该位于路径规划触发框两到三米的高度上,且其方向如图中向量所示,当车辆从空中落下时,它会触碰到激活框,然后autopilot就会接管车辆。
- 当你在Open Drive Actor中检测
Generate Routes
时,它会生成路网,但是不会显示每个规划,如果想要让其显示这些点,可以按以下步骤进行:
1.选择RoutePlanner
角色。
2.移动它们。
3.按Crtl + z
,然后它们就会显示在地图中。
-
OpenDRIVE路线可以手动人为修改。
- 如果想要将地图添加至Unreal packaging aystem,你可以去到:
Edit > Project Settings > Project > Packaging > Show Advanced > List of maps to include...
然后添加层级到array中。
- 如果想要改变材质为carla中自带的材质的话,可以在这里
Content/Carla/Static/GenericMaterials
找到它们。- unreal找到材质和资源的快捷键:
Right-click on the Asset > Browse to Asset
Right-click on the Material > Asset Actions > Select Actors Using This Asset
- unreal找到材质和资源的快捷键:
UE4操作
https://carla.readthedocs.io/en/latest/tuto_A_map_creation/#3-importing-into-unreal