admin管理员组

文章数量:1597897

autoware_lanelet2_map_loader程序详解

  • 电脑上部署autoware相关的依赖库
  • 设置文件路径代码
  • 生成中心线(参考线)

电脑上部署autoware相关的依赖库

在电脑上部署autoware相关的依赖库(这里可以不用安装autoware),根据电脑的ros版本进行安装,使用命令 sudo apt install ros-melodic-autoware-库名。
基于ros1环境的lanelet2_map_loader包含的头文件如下:

#include <ros/ros.h>
#include <lanelet2_projection/UTM.h>
#include <lanelet2_io/Io.h>
#include <lanelet2_core/LaneletMap.h>
#include <lanelet2_extension/utility/message_conversion.h>
#include <lanelet2_extension/projection/mgrs_projector.h>
#include <lanelet2_extension/io/autoware_osm_parser.h>
#include <lanelet2_extension/utility/utilities.h>

#include <autoware_lanelet2_msgs/MapBin.h>

#include <string>
#include <boost/filesystem.hpp>

设置文件路径代码

在cpp里面设置文件路径代码,也可以在launch文件里面写地图路径,然后配置路径参数,在cpp中直接提取para即可。

pnh.param<std::string>("lanelet2_path", lanelet2_path, "/home/alex/ros_learn/catkin_ws/src/mapdata/new_lanelet2_maps3.osm");

把地图文件路径赋值给path,然后进行一系列的路径验证。

boost::filesystem::path path(lanelet2_path);

路径验证无误之后,使用lanelet::load函数读取地图,并存储于map变量中。
得到map之后,开始画车道中心线,如果计算画中心线,则把false改为true,不需要计算则保留false;

lanelet::utils::overwriteLaneletsCenterline(map, false);

生成中心线(参考线)

生成中心线的函数如下:

void overwriteLaneletsCenterline(lanelet::LaneletMapPtr lanelet_map, const bool force_overwrite)
{
for (auto & lanelet_obj : lanelet_map->laneletLayer) {
if (force_overwrite || !lanelet_obj.hasCustomCenterline()) {
const auto fine_center_line = generateFineCenterline(lanelet_obj);
lanelet_obj.setCenterline(fine_center_line);
}
}
}

把lanelet2地图转化成点,然后发布出去

lanelet::utils::conversion::toBinMsg(map, &map_bin_msg);
map_bin_pub.publish(map_bin_msg);

lanelet2地图下载程序到此解析结束。

本文标签: 详解代码程序详细autoware