我是靠谱客的博主 激动黄蜂,最近开发中收集的这篇文章主要介绍在Costmap_2d里面插入Prohibition_layer(禁止区域层)在Costmap_2d里面插入Prohibition_layer(禁止区域层),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在Costmap_2d里面插入Prohibition_layer(禁止区域层)

简介

costmap_2d在navigaition里面是一个很重要的板块,通常默认的是三层地图(静态/障碍/膨胀层)叠加在一起,构成整个完整的代价地图,但是我们也可以插入一些自定义的图层,然后实现自己定制化的功能,基础的教程大家可以参考costmap_2d中插入自定义层。本文的主要目的是来告诉大家如何在代价地图中插入Prohibition_layer(禁止层),然后在已经建好的地图中设立禁止通行区域,关于prohibition_layer具体的作用大家可以参照roswiki上的解释。

具体实现步骤

1 代码下载与编译
  之前我们学习插入simple_layer的时候是在自己的工作空间(catkin_ws)中建立一个pakage,然后再去自己创建.cpp文件和.h头文件,再去改cmakelist,添加.xml文件,在这个教程中我们不需要这么麻烦,我们可以直接在github上把prohibition_layer的包下载下来(源码下载地址戳这里).,解压后放在自己的工作空间中的 src 文件夹里面,然后在终端输入:

$ cd catkin_ws("catkin_ws"替换成你的工作空间名称)
$ catkin_make

编译完成以后在终端中输入:

rospack plugins --attrib=plugin costmap_2d

当你发现终端中输出:
在这里插入图片描述这就表明prohibition_layer已经是一个可供使用的地图插件了.

2 在代价地图中插入prohibition_layer
  完成步骤1后说明prohibition_layer已经可以供costmap使用了,现在我们要做的就是把prohibition_layer插入到costmap中去.
  我们在自己的代价地图参数配置文件夹中找到 global_costmap_params.yaml 和 local_costmap_params.yaml ,打开这两个文档,分别在两个文档的末尾做修改,修改后应该是下面的内容:

 plugins:
      - {name: static_map,       type: "costmap_2d::StaticLayer"}
      - {name: obstacles,        type: "costmap_2d::VoxelLayer"}
      - {name: costmap_prohibition_layer,        type: "costmap_prohibition_layer_namespace::CostmapProhibitionLayer"}     
      - {name: inflation_layer,        type: "costmap_2d::InflationLayer"}

3 修改launch文件
  完成插入地图后我们还需要修改自己的launch文件,我是在自己的move_base.launch 中插入的,这个大家根据自己的需求,你用的carlike就修改carlike的launch文件.打开自己的launch文件中插入如下内容:

<rosparam file="$(find turtlebot3_navigation)/param/prohibition_areas.yaml" command="load" ns="global_costmap/costmap_prohibition_layer" />
<rosparam file="$(find turtlebot3_navigation)/param/prohibition_areas.yaml" command="load" ns="local_costmap/costmap_prohibition_layer" />

其中的"turtlebot3_navigation"需要根据自己的情况修改,你打开自己的launch文件对照上下文就知道怎么更改了.

4 设置禁止区域坐标参数
  完成以上步骤所有的配置工作就剩下最后一步了,设置禁止区域坐标参数.
  首先需要在参数配置文件夹(就是和 global_costmap_params.yaml 以及 local_costmap_params.yaml 相同位置的文件夹)中创建新的文档,命名为 "prohibition_areas.yaml".
  然后在prohibition_areas.yaml文档中输入:

prohibition_areas:
#定义一个禁止点
 - [17.09, -6.388]
# 定义一个禁止通行的线
 - [[8.33, 2.11],
    [8.26, 5.11]]
# 定义一个禁止通行的区域
 - [[-11.15, -15.614],
    [-12.35, -13.89],
    [-10.05, -12.218]]
 

注意事项:
1 一定要严格按照上述格式来设置坐标,我之前遇到的格式错误导致不能识别禁止区域坐标情形有
  (1):坐标前的短横线没对齐
  (2):定义禁止区域或者禁止线,两坐标之间缺少了逗号
2 你可以同时定义多个禁止点/多个禁止线/多个禁止区域,或者混合定义多个点/线/区域.
3 禁止区域的坐标如何设置就需要你根据自己建的图来测量,这里就不赘述了.

5 结语
完成以上所有内容,你再次打开自己的导航就能够在rviz中看到自己的设置的禁止区域了,这里贴出我之前做的结果:
在这里插入图片描述这是我在实验室里面建立的地图,图中的红色三角形是我设立的禁止区域,矩形框是我画的四条禁止线,小车现在在矩形框内,当我把导航目标设置在矩形框外的时候,结果显示的是无法规划路线的.

最后

以上就是激动黄蜂为你收集整理的在Costmap_2d里面插入Prohibition_layer(禁止区域层)在Costmap_2d里面插入Prohibition_layer(禁止区域层)的全部内容,希望文章能够帮你解决在Costmap_2d里面插入Prohibition_layer(禁止区域层)在Costmap_2d里面插入Prohibition_layer(禁止区域层)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部