
大家好,我是李慢慢。
总是有朋友私下问我Carla中加载OpenDrive地图的问题。其实这个问题,以前写过文章的,只不过藏的比较深(链接在这里),怪我。这里把它搬出来,然后简单做点扩展,也方便搜索。
正文如下。
OpenDrive是自动驾驶仿真领域公用的道路地图格式,我在之前的文章中有介绍到如何使用开源软件truevision或者开源python库scenariogeneration来创建OpenDrive格式的地图。诸君可以戳开看看:
1、介绍一款开源的OpenDrive地图制作软件-truevision
2、如何用python库scenariogeneration来创建静态地图+动态场景进行自动驾驶仿真
上面推荐的两个开源途径,完全免费,没有灵石的道友可以试试看,亲测可用。
然后,Carla软件也可以使用RoadRunner软件绘制出来的OpenDrive地图,这也是目前行业内比较主流的做法。
当我们有了OpenDrive地图时,就可以使用Carla来进行加载并使用了。
加载代码的API是“generate_opendrive_world()”,官方说明如下:

下面这个xodr文件是安装truevison时自带的,这里你可以换成你自己的xodr文件:

运行后可以从Carla的server端窗口看到更换后的世界地图,效果如下:


接下来可以试着往道路中添加一辆车了,控制其为自动驾驶模式,就能看到如下的效果了。一辆自动驾驶绕八字的特斯拉。

最后,简单记录下加载xodr地图后创建车辆时,遇到过的报错。
报错1:
我用RoadRunner创建了一条直路,然后加载这个xodr生成了新的world,并从world中获取所有的spawn_point时一个点都没有获取到(world.get_map().get_spawn_points()),导致无法选取点作为车辆的生成点。
这个可能是因为xodr的直路实在是太简单了,没有道路节点,路口啥的,导致xodr在加载后无法 正常生成一系列spawn_point,这个时候,要么把xodr地图画的复杂些,要么直接用carla.Transform类来直接指定生成点。
报错2:
“RuntimeError: Spawn failed because of collision at spawn position”。
路上明明没有车,为什么生成车辆时报碰撞发生的错误呢?搞了很久才明白,Carla里车辆无法直接生成在路面,而是从空中某个高度“掉”下来的。。。所以指定生成点的时候,最好给个高度。如下:
spawn_point = carla.Transform(carla.Location(x=0,y=0,z=3.0), carla.Rotation(pitch=0,yaw=0,roll=0))报错3:
不知道细心的朋友发现没有,加载出来的xodr地图,没有车道线信息。我一开始以为是我某个参数没有设置正确,后来四方咨询听说Carla加载的xodr地图本身就会不显示车道线信息。这个只能期待官方去解决了。
本文完。