从Apollo record文件中提取坐标信息绘制地图轨迹

从Apollo record文件中提取坐标信息绘制地图轨迹

    • 一、背景
    • 二、操作步骤
      • 2.1 下载record文件并解压
      • 2.2 查看record文件信息
      • 2.3 查询Sunnyvale的经纬度
      • 2.4 从record中提取position绘制地图轨迹
      • 2.5 绘制卫星地图轨迹
      • 2.6 运行脚本
    • 三、技术总结

一、背景

自动驾驶技术的发展离不开大量真实道路数据的收集和分析。百度Apollo平台使用record文件格式记录车辆在实际道路测试中的各种传感器数据,包括定位信息、摄像头图像、激光雷达点云等。这些记录文件就像汽车的"黑匣子",保存了车辆运行过程中的关键信息。

为什么我们需要提取轨迹信息呢?绘制车辆轨迹可以帮助我们:

  • 可视化车辆行驶路径,直观了解测试路线
  • 分析定位系统的精度,验证定位算法效果
  • 复现测试场景,用于调试和优化
  • 创建高精地图,为自动驾驶系统提供参考

本文将详细介绍如何从Apollo record文件中提取车辆的定位坐标信息,并绘制到地图上,让普通读者也能轻松掌握这项实用技能。

二、操作步骤

2.1 下载record文件并解压

首先我们需要获取Apollo平台提供的示例数据。百度Apollo开放平台提供了丰富的测试数据集,我们可以直接下载使用:

从Apollo record文件中提取坐标信息绘制地图轨迹_第1张图片

# 下载RGB传感器数据记录文件
https://apollo-system.bj.bcebos.com/dataset/6.0_edu/sensor_rgb.tar.xz

# 解压文件
tar -xvf sensor_rgb.tar.xz

为什么需要这一步?
record文件是Apollo系统的专有数据格式,包含了车辆在测试过程中收集的所有传感器信息。下载并解压后,我们就获得了绘制轨迹所需的原始数据。

2.2 查看record文件信息

在提取数据前,我们需要了解record文件包含哪些信息:

cyber_recorder info resources/records/bev_test.record

执行后输出:

record_file:    resources/records/bev_test.record
version:        1.0
duration:       19.221952 Seconds
begin_time:     2018-07-24-11:28:47
end_time:       2018-07-24-11:29:06
size:           5946901361 Bytes (5.538484 GB)
is_complete:    true
message_number: 7626
channel_number: 9
channel_info:
                /apollo/sensor/camera/CAM_FRONT_LEFT/image             224 messages: apollo.drivers.Image
                /apollo/localization/pose                             2963 messages: apollo.localization.LocalizationEstimate
                /tf                                                   2963 messages: apollo.transform.TransformStampeds
                /apollo/sensor/camera/CAM_FRONT/image                  224 messages: apollo.drivers.Image
                /apollo/sensor/camera/CAM_FRONT_RIGHT/image            217 messages: apollo.drivers.Image
                /apollo/sensor/camera/CAM_BACK_RIGHT/image             218 messages: apollo.drivers.Image
                /apollo/sensor/camera/CAM_BACK/image                   216 messages: apollo.drivers.Image
                /apollo/sensor/camera/CAM_BACK_LEFT/image              219 messages: apollo.drivers.Image
                /apollo/sensor/LIDAR_TOP/compensator/PointCloud2       382 messages: apollo.drivers.PointCloud

关键信息解析:

  • /apollo/localization/pose 通道包含了2963条定位信息
  • 每条定位信息使用 apollo.localization.LocalizationEstimate 格式
  • 定位频率约为150Hz(2963条/19.2秒)

为什么需要这一步?
了解record文件的结构可以帮助我们确定哪些通道包含所需的位置信息。在这个例子中,我们将使用/apollo/localization/pose通道的数据来提取车辆位置。

2.3 查询Sunnyvale的经纬度

Apollo的示例数据通常采集于美国加州Sunnyvale地区。为了正确转换坐标,我们需要知道该地区的经纬度:

  • 查询网址

从Apollo record文件中提取坐标信息绘制地图轨迹_第2张图片

为什么需要这一步?
Apollo系统使用UTM坐标系统(一种平面坐标系统),而地图绘制需要WGS84经纬度坐标(全球通用的地理坐标系统)。通过知道测试地点的经度,我们可以计算出正确的UTM带号,这是坐标转换的关键参数。

2.4 从record中提取position绘制地图轨迹

现在进入核心环节:编写Python脚本提取位置信息并绘制轨迹:

cat > extract_pos_plot_map_trajectory.py <<-'EOF'
import cv2
import sys
import sys
sys.path.append("/apollo/bazel-bin")
import numpy as np
from cyber.python.cyber_py3 import record
from modules.common_msgs.localization_msgs.localization_pb2 import LocalizationEstimate
from pyproj import Transformer
import folium
import webbrowser
from pyproj import Proj, transform

def longitude_to_utm_zone(longitude):
    """
    根据经度计算UTM带号
    :param longitude: 经度,范围 -180 至 180 (单位:度)
    :return: UTM带号,范围1~60
    """
    if not -180 <= longitude <= 180:
        raise ValueError("经度必须在-180到180之间")
    
    zone = int((longitude + 180) / 6) + 1
    if zone > 60:
        zone = 60  # 保证最大不超过60
    
    return zone

def utm_t

你可能感兴趣的:(代码片段,学习,Apollo,自动驾驶,地图)