Apollo详解之高精地图模块——相对地图模块代码简要分析

前言

本文主要关注相对地图模块的代码分析,有关相对地图的介绍和相关程序的使用方法可参考另一篇文章。
Apollo详解之高精地图模块——相对地图模块

navigator

navigator的作用是按一定规则解析路径文件里的内容,并将解析后得到的NavigationInfo发布至/apollo/navigation话题。可在modules/map/relative_map/proto/navigation.proto文件中查看发布消息NavigationInfo的定义

message NavigationPath {
  optional apollo.common.Path path = 1;
  // highest = 0 which can directly reach destination; change lane indicator
  optional uint32 path_priority = 2; // 根据navigator中命令行参数的顺序分配优先级,第一个是0,然后递增
}

message NavigationInfo {
  optional apollo.common.Header header = 1;
  repeated NavigationPath navigation_path = 2; ///< 导航路径,其个数由navigator中命令行参数的解析文件的个数决定
}

可以看出navigator发布的消息即为对应路径文件的导航路径。
Navigator理论上只需要发布一次即可,但是为了保证消息被正确接收,Navigator通常会发布多次。
由于navigator可以解析多个路径文件,因此NavigationInfo会有相应个数的navigation_path,并且其path_priority有命令行参数顺序指定。

relative_map_component

RelativeMapComponent::Init

relative_map_component是相对地图模块的主程序,在初始化函数RelativeMapComponent::Init当中,可以发现,其订阅了以下话题:

  • /apollo/navigation
    获取navigator发布的导航路径
  • /apollo/canbus/chassis
    获取车辆的底盘信息
  • /apollo/localization/pose
    获取车辆的定位信息
  • /apollo/perception/obstacles
    获取行驶环境的车道线信息

此外,该模块还有一个发布者,其向/apollo/relative_map话题发布MapMsg消息

// The map message in transmission format.
message MapMsg {
  optional apollo.common.Header header = 1;

  // Coordination: FLU
  // x: Forward
  // y: Left
  // z: Up
  optional apollo.hdmap.Map hdmap = 2;

  // key: type string; the lane id in Map
  // value: Navigation path; the reference line of the lane
  map<string, NavigationPath> navigation_path = 3;

  // lane marker info from perception
  optional apollo.perception.LaneMarkers lane_marker = 4;

  // localization
  optional apollo.localization.LocalizationEstimate localization = 5;
}

容易看出,这就是该模块计算得到的相对地图。

RelativeMapComponent::Proc

该函数会以一定的频率得到调用,其调用了RelativeMap::Process函数,计算得到了相对地图,并将其进行发布

RelativeMap

根据官方文档中的描述,我们可以通过navigator提供的导航路径或者感知模块获得的车道线信息得到相对地图,也可以两种方式一起使用,在配置文件modules/map/relative_map/conf/relative_map_config.pb.txt当中,可以看到

lane_source: OFFLINE_GENERATED

存在两种模式OFFLINE_GENERATEDPERCEPTION,前者会使用navigator提供的导航路径,并结合感知得到的车道线共同计算相对地图,后者则只会使用感知得到的车道线计算相对地图。
感知模块作用:

  • 填充相对地图中的车道线信息
  • 当不使用navigator提供的导航路径时,制作相对地图
  • 当使用navigator提供的导航路径时,对导航路径产的车道线进行修正
  • 填充车道线的类型
  • 获取车道线宽度信息

若不使用感知模块或感知模块无法感知车道线,则无法实现以上的功能,但不影响OFFLINE_GENERATED模式的正常工作。

CreateMapFromNavigationLane

RelativeMap::CreateMapFromNavigationLane函数会不断得到调用,计算出相对地图,首先会通过NavigationLane::GeneratePath生成导航路径。

NavigationLane::GeneratePath

该函数会计算得到制作相对地图的导航路径。
若使用的是OFFLINE_GENERATED,则该函数会

  1. navigator提供的导航路径进行坐标转换,得到FLU坐标系下的导航路径
  2. 对导航路径按照y轴坐标从小到大的顺序进行排序
  3. 得到车辆所在的导航路径current_navi_path_tuple_
  4. 设置车道线宽度
  5. 根据感知模块提供的车道线对路径进行修正
  6. 设置各个导航路径之间的宽度

若使用PERCEPTION模式,则会根据感知得到的车道线计算出一条导航路径,并设置为车辆所在的导航路径current_navi_path_tuple_
总之,该函数最终会得到车辆所在的导航路径current_navi_path_tuple_

NavigationLane::CreateMap

该函数会根据车辆所在的导航路径current_navi_path_tuple_,通过调用CreateSingleLaneMap函数得到高精地图中,为每个导航路径生成对应的一个车道信息,并根据各个车道,生成道路信息。
高精地图hdmap::Map得到了以下信息:

  • hdmap.lane: id、type、turn、speed_limit、central_curve、left_boundary、right_boundary、left_sample、right_sample、left_neighbor_forward_lane_id、right_neighbor_forward_lane_id
  • hdmap.road: id、section、boundary
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值