一、仿真地图导入概述

什么是仿真地图

仿真地图,说白了就是给自动驾驶算法「跑路」用的虚拟世界。它不是我们手机里那种导航地图,而是一个包含了道路几何、车道线、交通标志、红绿灯等信息的结构化数据集合。

我个人习惯把仿真地图比作「剧本」—— 算法是演员,地图就是舞台。舞台搭得不对,演员再厉害也演不出好戏。

举个例子,你在仿真里测试自动变道功能。如果地图里车道宽度、曲率、坡度这些数据不准,那算法学到的「变道能力」就是错的。等真车上路,后果可想而知。

核心要点:仿真地图不是「画出来的图」,而是「算出来的数据」。它必须能被计算机解析、索引、查询。

地图数据格式介绍

目前主流的仿真地图格式有三种。我一个个说,你记好。

1. OpenDrive 格式

这是行业标准,也是我最常用的格式。OpenDrive 用 XML 描述道路网络,精度能达到厘米级。

它的核心逻辑是「道路参考线」—— 每条路都有一条中心线,车道、路肩、标线都基于这条线定义。

<road name="测试路段A" length="500.0" id="1" junction="-1">
  <planView>
    <geometry s="0.0" x="0.0" y="0.0" hdg="0.0" length="500.0">
      <line/>
    </geometry>
  </planView>
  <lanes>
    <laneSection s="0.0">
      <left>
        <lane id="-1" type="driving" level="false">
          <width sOffset="0.0" a="3.5" b="0.0" c="0.0" d="0.0"/>
        </lane>
      </left>
    </laneSection>
  </lanes>
</road>

这段代码定义了一条 500 米长的直路,左侧有一条 3.5 米宽的车道。嗯,看着简单,但实际项目中一个路口可能就要写上千行 XML。

我的经验:OpenDrive 最大的坑是「版本兼容性」。不同仿真器对 OpenDrive 1.4、1.6、1.7 的支持程度不一样。我建议你统一用 1.6 版本,兼容性最好。

2. GeoJSON 格式

GeoJSON 是地理信息领域的通用格式。它用 JSON 描述点、线、面,非常适合表达道路边界、停车位、障碍物等几何信息。

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {"type": "lane_boundary"},
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [116.397, 39.908],
          [116.398, 39.909],
          [116.399, 39.910]
        ]
      }
    }
  ]
}

GeoJSON 的好处是轻量、易读。但缺点也很明显 —— 它没有车道拓扑关系。说白了,它只告诉你「线在哪」,不告诉你「线之间怎么连接」。

我在项目中通常把 GeoJSON 当「中间格式」用。从采集车拿到原始数据是 GeoJSON,转成 OpenDrive 后再导入仿真器。

3. PNG 栅格图

这个最简单,也最容易被忽视。PNG 栅格图就是一张普通的图片,用像素颜色代表不同区域。

比如:黑色是道路,白色是路肩,灰色是建筑物。仿真器读取图片后,根据像素颜色生成障碍物和可行驶区域。

注意:PNG 地图没有语义信息。它不知道哪条车道是左转道,哪个路口有红绿灯。说白了,它只能做「视觉展示」和「粗略碰撞检测」。精度要求高的场景,千万别用。
格式 精度 语义信息 适用场景
OpenDrive 厘米级 完整 自动驾驶算法测试
GeoJSON 米级 部分 数据交换、可视化
PNG 栅格图 像素级 无 快速原型、展示

仿真场景与地图的关系

这个问题我问过很多新人,十个有八个答不上来。其实很简单:地图是静态的,场景是动态的。

地图提供「基础设施」—— 路在哪、车道怎么划、限速多少。场景提供「剧情」—— 前面有辆车急刹、右边有行人横穿、天气突然下雨。

我曾经犯过一个错:在一个没有红绿灯的地图上测试「红灯停」算法。结果算法永远不停车,我还以为是代码写错了。查了半天才发现,地图里根本没定义红绿灯位置。

所以,导入地图后第一件事:检查地图里有什么,缺什么。缺的东西要么补上,要么在场景里手动添加。

一句话总结:地图是「舞台布景」,场景是「演员剧本」。两者缺一不可,但各司其职。

知识体系总览

下面这张图,是我自己梳理的。你看完应该能明白这一章在讲什么。

仿真地图导入 什么是仿真地图 地图数据格式 场景与地图关系 OpenDrive GeoJSON PNG 栅格图 地图 = 静态基础设施 场景 = 动态剧情编排

这张图把本章的知识结构串起来了。你从「仿真地图导入」出发,先搞清楚它是什么,再了解三种格式的区别,最后理解它和场景的关系。嗯,逻辑就这么顺。

避坑指南:我曾经在一个项目里,用 PNG 栅格图做车道级规划。结果车老是压线,查了三天才发现是图片分辨率不够,车道边界模糊了。从那以后,我定了个规矩:做规划用 OpenDrive,做展示用 PNG。

好了,这一章就到这里。记住我说的:地图是舞台,场景是剧本。下一章我们聊聊怎么把 OpenDrive 地图真正导入到仿真器里,以及导入过程中那些让人头疼的坑。

可可精品资料库