ROS2极简总结-Nav2-概述(上)规划器

举报
zhangrelay 发表于 2021/09/03 00:53:01 2021/09/03
【摘要】 meta-package:元功能包(或综合功能包)为一系列功能包的组合。 Navigation 2 是一个元功能包,它使移动平台能够到达预定目标。 加载、服务和存储地图 ([nav2_map_server])在地图上定位机器人 ([nav2_amcl])围绕障碍物规划从 A 到 B 的路径([nav2_planner])控制机器人...

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,配置如下:

局部代价地图


  
  1. local_costmap:
  2. local_costmap:
  3. ros__parameters:
  4. update_frequency: 5.0
  5. publish_frequency: 2.0
  6. global_frame: odom
  7. robot_base_frame: base_link
  8. use_sim_time: False
  9. rolling_window: true
  10. width: 3
  11. height: 3
  12. resolution: 0.05
  13. robot_radius: 0.1
  14. plugins: ["obstacle_layer", "voxel_layer", "inflation_layer"]
  15. inflation_layer:
  16. plugin: "nav2_costmap_2d::InflationLayer"
  17. cost_scaling_factor: 1.0
  18. obstacle_layer:
  19. plugin: "nav2_costmap_2d::ObstacleLayer"
  20. enabled: True
  21. observation_sources: scan
  22. scan:
  23. topic: /scan
  24. max_obstacle_height: 2.0
  25. clearing: True
  26. marking: True
  27. data_type: "LaserScan"
  28. voxel_layer:
  29. plugin: "nav2_costmap_2d::VoxelLayer"
  30. enabled: True
  31. publish_voxel_map: True
  32. origin_z: 0.0
  33. z_resolution: 0.05
  34. z_voxels: 16
  35. max_obstacle_height: 2.0
  36. mark_threshold: 0
  37. observation_sources: pointcloud
  38. pointcloud:
  39. topic: /intel_realsense_r200_depth/points
  40. max_obstacle_height: 2.0
  41. clearing: True
  42. marking: True
  43. data_type: "PointCloud2"
  44. static_layer:
  45. map_subscribe_transient_local: True
  46. always_send_full_costmap: True
  47. local_costmap_client:
  48. ros__parameters:
  49. use_sim_time: False
  50. local_costmap_rclcpp_node:
  51. ros__parameters:
  52. use_sim_time: False

全局代价地图:


  
  1. global_costmap:
  2. global_costmap:
  3. ros__parameters:
  4. update_frequency: 1.0
  5. publish_frequency: 1.0
  6. global_frame: map
  7. robot_base_frame: base_link
  8. use_sim_time: False
  9. robot_radius: 0.1
  10. resolution: 0.05
  11. plugins: ["static_layer", "obstacle_layer", "voxel_layer", "inflation_layer"]
  12. obstacle_layer:
  13. plugin: "nav2_costmap_2d::ObstacleLayer"
  14. enabled: True
  15. observation_sources: scan
  16. scan:
  17. topic: /scan
  18. max_obstacle_height: 2.0
  19. clearing: True
  20. marking: True
  21. data_type: "LaserScan"
  22. voxel_layer:
  23. plugin: "nav2_costmap_2d::VoxelLayer"
  24. enabled: True
  25. publish_voxel_map: True
  26. origin_z: 0.0
  27. z_resolution: 0.05
  28. z_voxels: 16
  29. max_obstacle_height: 2.0
  30. mark_threshold: 0
  31. observation_sources: pointcloud
  32. pointcloud:
  33. topic: /intel_realsense_r200_depth/points
  34. max_obstacle_height: 2.0
  35. clearing: True
  36. marking: True
  37. data_type: "PointCloud2"
  38. static_layer:
  39. plugin: "nav2_costmap_2d::StaticLayer"
  40. map_subscribe_transient_local: True
  41. inflation_layer:
  42. plugin: "nav2_costmap_2d::InflationLayer"
  43. cost_scaling_factor: 1.0
  44. inflation_radius: 0.55
  45. always_send_full_costmap: True
  46. global_costmap_client:
  47. ros__parameters:
  48. use_sim_time: False
  49. global_costmap_rclcpp_node:
  50. ros__parameters:
  51. 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


  
  1. planner_server:
  2. ros__parameters:
  3. expected_planner_frequency: 20.0
  4. use_sim_time: False
  5. planner_plugins: ["GridBased"]
  6. GridBased:
  7. plugin: "nav2_navfn_planner/NavfnPlanner"
  8. tolerance: 0.5
  9. use_astar: false
  10. allow_unknown: true

下一节为控制(Controller)。


文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/120048639

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。