4.3.6 地图读取基本操作

1.准备工作

请先调用如下指令在工作空间的src目录下创建一个功能包:

ros2 pkg create mycar_map_server --dependencies nav2_map_server

在功能包下,新建launch文件夹,并在CMakeLists.txt中添加如下配置:

install(DIRECTORY launch DESTINATION share/${PROJECT_NAME})

2.读取地图

使用map_server读取地图时,常用的方式有两种,分别是使用终端指令与launch文件集成。两种方式效果一致,都可以以话题的方式发布地图消息。

方式1:终端指令

请在终端下进入工作空间,输入如下指令:

ros2 run nav2_map_server map_server --ros-args -p yaml_filename:=map/my_map.yaml

由于map_server是具有生命周期的节点,所以接下来还需要对节点进行配置和激活,请新开终端执行如下指令:

ros2 lifecycle set /map_server configure
ros2 lifecycle set /map_server activate

执行完毕若无异常,再调用ros2 topic list即可查看到/map话题了,说明地图消息已经被发布了。

方式2:launch集成

方式1需要手动设置map_server生命周期,步骤稍显繁琐,因此,我们还可以将该节点集成进launch文件,以简化启动步骤。在launch目录下新建名为map_server.launch.py的文件,并输入如下内容:

import os
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
  map_file = os.path.join('map', 'my_map.yaml')
  map_server_node = Node(
      package='nav2_map_server',
      executable='map_server',
      name='map_server',
      output='screen',
      parameters=[{'use_sim_time': True},
                  {'yaml_filename':map_file}]
  )
  manager_mapper_node = Node(
    package='nav2_lifecycle_manager',
    executable='lifecycle_manager',
    name='lifecycle_manager_mapper',
    output='screen',
    parameters=[{'use_sim_time': True},
      {'autostart': True},
      {'node_names': ['map_server']}]
  )
  return LaunchDescription([map_server_node,manager_mapper_node])

在该文件中,使用了功能包中nav2_lifecycle_manager中的lifecycle_manager组件,该组件可以自动的配置、激活其所管理的具有生命周期的节点。构建功能包后并执行该launch文件,其最终效果与方式一类似。

3.显示地图

打开rviz2,然后添加Map插件,并将话题设置为/map,并将该话题的Durability Policy

选项设置为Transient Local,就可以正常显示地图数据了。

results matching ""

    No results matching ""