Autoware.universe部署02:高精Lanelet2地图的绘制 |
您所在的位置:网站首页 › opendriver地图生成 › Autoware.universe部署02:高精Lanelet2地图的绘制 |
文章目录
引言Lanelet基础元素Lanelet2项目各个模块
一、安装Lanelet2项目1.1 安装依赖1.2 编译1.3 在ROS中使用lanelet2地图完成routing
二、Autoware Vector Map Builder绘制高精地图2.1 创建地图2.2 绘制车道2.2.1 Linestring合成2.2.2 Lanelet工具直接绘制2.2.3 绘制变道车道
2.3 绘制路沿2.4 绘制停止线和交通灯2.5 绘制人行道2.6 绘制路边停靠车道2.7 绘制禁停区2.8 绘制停车场以及停车位2.9 地图拓扑验证(可以跳过)2.10 Universe的使用
三、JOSM可视化和编辑Lanelet2地图3.1 配置Java环境3.2 配置Lanelet2格式
本文介绍如何绘制Autoware.universe使用的高精地图并验证地图,本系列其他文章: Autoware.universe部署01:Ubuntu20.04安装Autoware.universe并与Awsim联调 Autoware.universe部署03:与Carla(二进制版)联调 Autoware.universe部署04:universe传感器ROS2驱动 引言目前行业并没有通用的标准(OpenDrive并不是为自动驾驶设计的),Autoware自动驾驶系统的矢量地图和地图引擎计划使用Lanelet2,本文我们就来了解并且上手一下Lanelet2高精度地图框架。Lanelet2架构可以划分为: lanelet2称可以被观测到的要素为地图的物理层(physical layer) ,诸如路标、红绿灯、交通标志、防撞栏等等,其他的所有地图元素,比如车道(lane),是这些物理元素的一种抽象表示。同样地,交通规则是规则源(例如交通信号灯)与其所应用的车道之间的关联。根据这些物理元素我们可以追踪这些关联信息,我们称这些元素为地图的关联层(relational layer)。然而,并非地图的所有元素都可以与物理层相关联,因为道路交通中往往会包含隐含的规则,比如说在路口内,车道线和车道边缘并没有画出来,但是它们是存在的,HAD map必须包含这些隐含的元素以保证路网拓扑的连通性,这些元素都是我们的行为“常识”引入的,不和实际的可观测元素关联,即拓扑层(topological layer)。创建与Autoware兼容的矢量地图最简单的方法是使用TIER IV公司提供的基于Web的免费工具Vector Map Builder。Vector map builder是Autoware官方提供的一个在线lanelet2地图绘制工具矢量地图生成器,允许您创建车道,并使用点云地图作为参考添加额外的管制元素,如停止标志或交通灯。 对于开源软件选项,MapToolbox是专门为Unity设计的插件,用于为Autoware创建Lanelet2地图。虽然JOSM是另一个可以用来创建Lanelet2地图的开源工具,但是需要注意的是,为了使地图与Autoware兼容,必须进行大量的手工修改。这个过程可能是繁琐和耗时的,因此不建议使用JOSM。 Lanelet2默认的格式为XML形式的OSM地图格式,可以使用OSM地图编辑器进行编辑和可视化。Lanelet2假定地图中的所有元素均能投射到平面,不过元素的高度信息也会被保存,以避免将立交桥处理成十字路口的情况。当加载地图的时候,为了方便地图的使用,会采用通用莫卡托投射(UTM,Universal Transverse Mercator)将地图投射到笛卡尔坐标系。 Lanelet基础元素Lanelet2地图主要包含6类基元: Points:点Linestrings: 由点前后连接构成的折线序列Polygons:多边形Lanelets:车道的原子单元,或者说对车道的最小划分Areas:区域,类似与lanelet,但是它一般用于描述建筑、停车区等独立区域Regulatory elements:控制元素,能产生交通规则的元素,如信号灯、限速牌等前三类为物理层,其余为关联层,每一个元素都有自己唯一的ID Lanelet2项目各个模块Lanelet2论文的另外一个工作就是基于以上设计理念和基本要素开源了一套C++编写的地图框架,lanelet2项目依靠catkin编译,所以每个模块都是以ros package的形式进行管理,各个模块内容如下: lanelet2:基础模块,没有具体实现lanelet2_core:实现了基元、地理计算等核心库lanelet2_io:lanelet地图的IO库lanelet2_traffic_rules:提供地图交通规则的支持lanelet2_projection:提供WGS84坐标系到指定坐标系下的投影的实现lanelet2_routing:提供基于lanelet地图的routing功能lanelet2_maps:lanelet2官方提供的示例地图lanelet2_python:lanelet2的python接口lanelet2_validation:验证Lanelet2地图lanelet2_examples:教程和示例 一、安装Lanelet2项目注意:如果不需要额外的地图验证工具,可以直接到下一章节开始学习绘制Lanelet2地图 1.1 安装依赖环境是Ubuntu18.04,依赖于ROS melodic sudo apt-get install ros-melodic-rospack ros-melodic-catkin ros-melodic-mrt-cmake-modules ros-melodic-unique-id sudo apt-get install libboost-dev libeigen3-dev libgeographic-dev libpugixml-dev libpython-dev libboost-python-dev python-catkin-tools 1.2 编译 mkdir catkin_ws_lanelet2_mapping && cd catkin_ws_lanelet2_mapping && mkdir src catkin init # build in release mode (or whatever you prefer) catkin config --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo cd src git clone https://github.com/AbangLZU/ad_with_lanelet2.git cd .. catkin build 编译报错: error: ‘::memset’ has not been declared
打开报错的源码,添加以下头文件: #include 报错:![]() 这是由于我们之前安装Autoware1.15时安装了与当前项目同名的ROS包(lanelets一系列),导致现在找到了对应的老版本的ROS包,把它们卸载就行了: sudo apt-get remove ros-melodic-lanelet2-core ros-melodic-lanelet2-validation ros-melodic-lanelet2-io ros-melodic-lanelet2-maps ros-melodic-lanelet2-projection ros-melodic-lanelet2-routing ros-melodic-lanelet2-traffic-rules编译成功: 在你的ros workspace中,运行本项目: cd your_ros_workspace source devel/setup.bash roslaunch src/ad_with_lanelet2/run_map_simulator.launchrun_map_simulator.launch内容如下,一共会启动4个ros node: planning仿真节点:来自Autoware的简单planning仿真map loader:加载Autoware扩展版lanelet2地图,发送用于可视化的Rviz marker,以ros msg的形式发送mapmission planning模块:来自Autoware的任务规划模块,在本例中主要使用了Routing路线生成Rviz:启动Rviz并使用预先设置的配置参数如图,map被加载与Rviz中: 接着使用Rviz中的2D Nav Goal设置routing的终点,如图中所示,mission planner会根据设置的目标位姿动态生成routing路线(图中深绿色路线): 注:该样例地图为Tier 4公司(Autoware的主要维护者)开源的地图,在日本,所以是靠左行驶,routing的时候需要按照靠左行驶的规则设定起终点。 二、Autoware Vector Map Builder绘制高精地图Vector map builder需要多次练习熟练理解才能绘制出正确且美观的地图 Vector map builder是Autoware官方提供的一个在线lanelet2地图绘制工具,地址为:https://tools.tier4.jp/feature/vector_map_builder_ll2/,需要注册账号: (1)进入后选择右上角文件导入PCD点云地图 有两种方法,一种是先绘制Linestring,再合成Lanelet,另一种方法是直接利用工具绘制Lanelet 2.2.1 Linestring合成(1)选择Lanelet2Map工具,开始绘制 打开Linestring,点选车道线边缘绘制车道线,绘制完一侧之后关闭Linestring完成绘制,同样的方法绘制另一侧车道线边缘 使用Lanelet工具直接绘制车道线,打开Lanelet工具,然后鼠标直接根据车道中心线绘制车道线,再使用Join Lanelet连接车道,但宽度不对需要再微调,再用copy绘制相邻车道: 多向变道:在有节点的Lanelet端(从这里可以看出,尽量不要绘制一条到底的长直车道,尤其是路口一定要断,事实上,绘制太长也会导致规划的时候不够精确)绘制新的Lanelet,然后使用join Lanelet连接车道,最后微调节点位置即可: 打开Linestring,绘制路沿边线,然后在右侧属性表的type中选择road_boder即可: 选中要绘制停止线的车道,打开停止线工具,点击停止线位置即可生成 选中车道,然后打开Abstraction下的Crosswalk,点击人行道两端自动生成人行道,选中人行道,在右侧的participants属性下填写pedestrian: 选中路边停靠停靠车道对应的正常车道,然后点击右上角CopyLanelet(先画一条lanestring再与以有车道边合成也行,即必须与车道有一条公共边),再点击车道边线,即可自动生成并列车道,再把生成的车道的subtype属性修改为road_shoulder,即绘制了停靠车道(调整形状可以) 如下图在某建筑门前绘制禁停区,首先选中车道,然后打开上方东的NoStoppingArea,即可绘制禁停区域,同时自动生成一条停止线,选中角点调整形状: 选中车道,打开上方的NoStoppingArea,绘制Area,调整大小,然后在属性表中修改属性为parking_lot 绘制完成之后,确定右上角Problem项没有报错,即可点击File导出Lanelet2地图 然后使用第二节的功能包验证,将导出的地图复制到catkin_ws_lanelet2_mapping/src/ad_with_lanelet2/map/map_loader/data路径下,修改文件名称为lanelet2_map.osm 然后运行规划节点: source devel/setup.bash roslaunch src/ad_with_lanelet2/run_map_simulator.launch即可加载自己绘制的地图,按照第二节的方法可以验证地图,如果有问题方便及时修改 将生成的地图(命名为lanelet2_map.osm)与点云地图(命名为pointcloud_map.pcd)放在一个新建文件夹下,并创建一个yaml文件(map_config.yaml),填入以下内容: /**: ros__parameters: map_origin: latitude: 0.0 longitude: 0.0 elevation: 0.0 roll: 0.0 pitch: 0.0 yaw: 0.0运行Autoware.universe,路径换成你自己的: source install/setup.bash ros2 launch autoware_launch planning_simulator.launch.xml map_path:=${You_map_path} vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit可以planning 因为采用了OSM的地图格式定义,Lanelet2地图可以很方便地使用OSM的工具链进行查看和编辑,下面我们使用JOSM工具对项目内的lanelet2_map.osm地图进行可视化和编辑(不建议,但是JOSM事实上功能更多,只是不容易)。JOSM是一个Java实现的对OSM进行编辑的工具,因其为Java程序,所以可以跨平台使用,官网下载最新版本的JOSM,本文采用的是jar包的形式运行,jar下载链接:https://josm.openstreetmap.de/josm-tested.jar 3.1 配置Java环境参照教程:https://josm.openstreetmap.de/wiki/Download#Java 编辑源文件列表/etc/apt/sources.list.d/josm.list: sudo /etc/apt/sources.list.d/josm.list根据你的ubuntu版本选择填入下列源: # 22.04 deb [signed-by=/usr/local/share/keyrings/josm-apt.gpg] https://josm.openstreetmap.de/apt jammy universe # 20.04 deb [signed-by=/usr/local/share/keyrings/josm-apt.gpg] https://josm.openstreetmap.de/apt focal universe # 18.04 deb [signed-by=/usr/local/share/keyrings/josm-apt.gpg] https://josm.openstreetmap.de/apt bionic universe下载公钥: # Create the directory for manually downloaded keys if it was not already created sudo mkdir -p /usr/local/share/keyrings # Download the key wget -q https://josm.openstreetmap.de/josm-apt.key -O- | sudo gpg --dearmor -o /usr/local/share/keyrings/josm-apt.gpg然后更新源: # You may need to install ssl support for apt in advance: sudo apt-get install apt-transport-https # Refresh sources sudo apt-get update然后安装: # You can skip this first line if these packages were not installed before. sudo apt-get remove josm josm-plugins # 测试版(稳定版) sudo apt-get install josm # 最新版 sudo apt-get install josm-latest 通过java --version检查系统中安装的Java,我的环境如下(我装的版本可能有点低):通过java --version检查系统中安装的Java,我的环境如下(我装的版本可能有点低):
在JOSM中添加lanelet2的地图样式和预设组合标签,在JOSM中选择预设组合->预设首选项->地图样式->+,分别将ROS项目中lanelet2_maps/josm/目录下的lanelets.mapcss和lines.mapcss添加为地图样式: |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |