meta-package:元功能包(或综合功能包)为一系列功能包的组合。
Navigation 2 是一个元功能包,它使移动平台能够到达预定目标。
注意黄色标出部分。 扩展如下:
其中目标-路径-/cmd_vel-机器人。
[nav2_core]:托管插件的抽象接口(虚拟基类)
规划器会帮助找到成本最低的路径。
成本包含很多方面(物体接近度、持续时间、向后运动、旋转……)
[nav2_costmap_2d] 代价图计算障碍物周围的成本,并标出机器人安全和不安全的地方。
障碍物膨胀 Inflatation of obstacles
图Figure 1:工作空间W到配置空间C的转换 (a) W 空间中的圆形机器人和障碍物 (b) 基于机器人足迹的变换 (c) C 空间中的点机器人和膨胀障碍物
图Figure 2:障碍物膨胀 (a) 点机器人(无充气) (b) 小型圆形机器人 (c) 大型圆形机器人
每一层的细则("static_layer", "obstacle_layer", "voxel_layer", "inflation_layer"):
- 静态地图层Static Map Layer:来自一个不变的数据 外部来源(静态地图) - 障碍物层Obstacle Layer:在读取时跟踪障碍物 通过传感器数据(2D、LaserScan) - 体素层Voxel Layer:使用跟踪障碍物 点云2(3D) - 膨胀层Inflation Layer:膨胀障碍物 表示机器人的配置空间
turtlebot-burger,配置如下:
局部代价地图
local_costmap:
local_costmap:
ros__parameters:
update_frequency: 5.0
publish_frequency: 2.0
global_frame: odom
robot_base_frame: base_link
use_sim_time: False
rolling_window: true
width: 3
height: 3
resolution: 0.05
robot_radius: 0.1
plugins: ["obstacle_layer", "voxel_layer", "inflation_layer"]
inflation_layer:
plugin: "nav2_costmap_2d::InflationLayer"
cost_scaling_factor: 1.0
obstacle_layer:
plugin: "nav2_costmap_2d::ObstacleLayer"
enabled: True
observation_sources: scan
scan:
topic: /scan
max_obstacle_height: 2.0
clearing: True
marking: True
data_type: "LaserScan"
voxel_layer:
plugin: "nav2_costmap_2d::VoxelLayer"
enabled: True
publish_voxel_map: True
origin_z: 0.0
z_resolution: 0.05
z_voxels: 16
max_obstacle_height: 2.0
mark_threshold: 0
observation_sources: pointcloud
pointcloud:
topic: /intel_realsense_r200_depth/points
max_obstacle_height: 2.0
clearing: True
marking: True
data_type: "PointCloud2"
static_layer:
map_subscribe_transient_local: True
always_send_full_costmap: True
local_costmap_client:
ros__parameters:
use_sim_time: False
local_costmap_rclcpp_node:
ros__parameters:
use_sim_time: False
global_costmap:
global_costmap:
ros__parameters:
update_frequency: 1.0
publish_frequency: 1.0
global_frame: map
robot_base_frame: base_link
use_sim_time: False
robot_radius: 0.1
resolution: 0.05
plugins: ["static_layer", "obstacle_layer", "voxel_layer", "inflation_layer"]
obstacle_layer:
plugin: "nav2_costmap_2d::ObstacleLayer"
enabled: True
observation_sources: scan
scan:
topic: /scan
max_obstacle_height: 2.0
clearing: True
marking: True
data_type: "LaserScan"
voxel_layer:
plugin: "nav2_costmap_2d::VoxelLayer"
enabled: True
publish_voxel_map: True
origin_z: 0.0
z_resolution: 0.05
z_voxels: 16
max_obstacle_height: 2.0
mark_threshold: 0
observation_sources: pointcloud
pointcloud:
topic: /intel_realsense_r200_depth/points
max_obstacle_height: 2.0
clearing: True
marking: True
data_type: "PointCloud2"
static_layer:
plugin: "nav2_costmap_2d::StaticLayer"
map_subscribe_transient_local: True
inflation_layer:
plugin: "nav2_costmap_2d::InflationLayer"
cost_scaling_factor: 1.0
inflation_radius: 0.55
always_send_full_costmap: True
global_costmap_client:
ros__parameters:
use_sim_time: False
global_costmap_rclcpp_node:
ros__parameters:
use_sim_time: False
规划服务器[nav2_planner]:尝试为到达目标点找到全局规划路径。
默认是 nav2_navfn_planner:
在以下位置发布路径:~/plan (nav2_msgs/Path)
Dijkstra | A* |
---|---|
参考turtlebot-burger
planner_server:
ros__parameters:
expected_planner_frequency: 20.0
use_sim_time: False
planner_plugins: ["GridBased"]
GridBased:
plugin: "nav2_navfn_planner/NavfnPlanner"
tolerance: 0.5
use_astar: false
allow_unknown: true
下一节为控制(Controller)。