autoware_lanelet2_map_loader程序详解
电脑上部署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地图下载程序到此解析结束。