ROS2极简总结-Nav2-概述(上)规划器
meta-package:元功能包(或综合功能包)为一系列功能包的组合。
Navigation 2 是一个元功能包,它使移动平台能够到达预定目标。
- 加载、服务和存储地图 ([nav2_map_server])
- 在地图上定位机器人 ([nav2_amcl])
- 围绕障碍物规划从 A 到 B 的路径([nav2_planner])
- 控制机器人跟随路径([nav2_controller])
- 将传感器数据转换为世界的代价地图表示 ([nav2_costmap_2d])
- 使用行为树([nav2__behavior_trees] 和 [nav2_bt_navigator])构建复杂的机器人行为
- 计算发生故障时的恢复行为 ([nav2_recoveries])
- 按照顺序航点([nav2_waypoint_follower])
- 管理服务器的生命周期 ([nav2_lifecycle_manager])
- 启用自定义算法和行为的插件 ([nav2_core])
规划概述 Planning
注意黄色标出部分。 扩展如下:
其中目标-路径-/cmd_vel-机器人。
插件 Plugins
[nav2_core]:托管插件的抽象接口(虚拟基类)
规划 Planning
规划器会帮助找到成本最低的路径。
成本包含很多方面(物体接近度、持续时间、向后运动、旋转……)
代价地图 Costmap
[nav2_costmap_2d] 代价图计算障碍物周围的成本,并标出机器人安全和不安全的地方。
障碍物膨胀 Inflatation of obstacles
图Figure 1:工作空间W到配置空间C的转换
(a) W 空间中的圆形机器人和障碍物 (b) 基于机器人足迹的变换 (c) C 空间中的点机器人和膨胀障碍物
图Figure 2:障碍物膨胀
(a) 点机器人(无充气) (b) 小型圆形机器人 (c) 大型圆形机器人
代价地图配置 Costmap Configuration
每一层的细则("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
规划服务器 Planner Server
规划服务器[nav2_planner]:尝试为到达目标点找到全局规划路径。
默认是 nav2_navfn_planner:
- 支持2种搜索算法:
- Dijkstra:找到最短路径
- A*:使用启发式来引导自身,但不保证找到最短路径
- 使用全局代价地图(仍可以通过机器人传感器更新)
在以下位置发布路径:~/plan (nav2_msgs/Path)
Dijkstra | A* |
规划服务器配置 Planner Server Configuration
- ~allow_unknown (bool, default: true)
- ~tolerance (double, default: 0.0)
参考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)。
文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。
原文链接:zhangrelay.blog.csdn.net/article/details/120048639
- 点赞
- 收藏
- 关注作者
评论(0)