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

一、背景

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

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

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

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

二、操作步骤

2.1 下载record文件并解压

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

请添加图片描述

# 下载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系统使用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_to_wgs84
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi20240217

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值