# costmap_prohibition_layer
**Repository Path**: yongwangzhiqiankai/costmap_prohibition_layer
## Basic Information
- **Project Name**: costmap_prohibition_layer
- **Description**: 开源代码,魔改的支持数据库动态虚拟墙,支持虚拟墙动态刷新,支持代码中操作虚拟墙。
- **Primary Language**: C++
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 14
- **Created**: 2022-04-22
- **Last Updated**: 2025-07-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#### 虚拟墙使用介绍
基于costmap_prohibition_layer
git clone https://github.com/sukai33/costmap_prohibition_layer.git
git clone https://gitee.com/yongwangzhiqiankai/costmap_prohibition_layer.git
开源代码,魔改的支持数据库动态虚拟墙,支持虚拟墙动态刷新,支持代码中操作虚拟墙。
#### 软件架构
开发者 苏凯
欢迎交流:
csdn博客:https://blog.csdn.net/qq_15204179?type=blog
B站 再遇咖啡: https://b23.tv/Yvt8noQ
日期:2022-04-21
系统:ubuntu20.04
ros平台:noetic
开发工具 clion
项目路径:~/workspace/xuniqiang/src
注意:一定要把克隆下来的代码放这个路径下 ~/workspace/xuniqiang/src/ ,或您有代码能力的就不需按我说的要这么做;
数据库文件路径:
~/workspace/xuniqiang/src/slamproject/db/TABLE_OR_ROOM_POSE.db
-------------------------------------------------------------------------
#### 安装教程
1. 直接下载到你的工作空间上编译
1.0 把此工程与movebase项目放一起
1.1 按顺序编译
catkin_make --pkg disinfect_msg
catkin_make --pkg disinfect_srvs
catkin_make
1.2 或者一条命令直接编译
source catkit_make_source.sh
2. 设置你的mve_base.launch文件
3. 分别在global_costmap 和local_costmap 的文件中 plugins 下添加
global_costmap_params.yaml 中:
plugins:
- {name: costmap_prohibition_layer, type: "costmap_prohibition_layer_namespace::CostmapProhibitionLayer"}
local_costmap_params.yaml 中:
plugins:
- {name: costmap_prohibition_layer, type: "costmap_prohibition_layer_namespace::CostmapProhibitionLayer"}
#### 测试启动使用介绍:
0. roscore
1.创建数据库 [数据库只需要创建一次就可以了]
rosrun slamproject currencyChassis_CreateSqlDatabaseMain_node
2.数据库调用 [启动导航前优先启动]
rosrun slamproject currencyChassis_sqlDatabaseMain_node
3.虚拟墙qt界面编辑 [qt界面增加虚拟墙数据只支持 line,具体使用看图片]
rosrun slamproject currencyChassis_KSDemoDlgTABLE_COSTMAPLAYERMain_node
4.刷新虚拟墙 【当数据库更改虚拟墙数据后需要发送topic重新加载虚拟墙】
4.1 引入头文件
#include
4.2创建 Publisher
ros::Publisher costmapProhibitionControl_pub = node.advertise("/costmapProhibitionControl", 10);
4.3发送数据
std_msgs::String data;
data.data="refreshCostMapPlayer";
costmapProhibitionControl_pub.publish(data);
#### 代码中使用介绍:
1.查询虚拟墙数据
1.1 引入头文件
#include
1.2 数据库操作
ros::ServiceClient SqlQueryClient = nh.serviceClient("/QSqlQuery");
1.3【默认条件查询 MerchantNumber=EMPTY MerchantName=EMPTY RobotNumber=EMPTY MapName=EMPTY Robotfloor=EMPTY,
需要改条件的话自己去数据库节点src/currencyChassis/currencyChassis_sqlDatabaseMain.cpp改源码,类中搜索 queryAllFromTable_CostMapPlayer 】
disinfect_srvs::testInfo_srvs table_CostMapLayerService;
table_CostMapLayerService.request.request_type="queryAllFromTable_CostMapPlayer";
SqlQueryClient.call(table_CostMapLayerService);
for (int i = 0; i
5.2创建 Publisher
ros::Publisher costmapProhibitionControl_pub = node.advertise("/costmapProhibitionControl", 10);
5.3发送数据
std_msgs::String data;
data.data="refreshCostMapPlayer";
costmapProhibitionControl_pub.publish(data);
#### 项目实战通过 turtlebot3 仿真运行
1.首先确定数据库是否存在,不存在就创建
1.1 roscore
1.2 创建数据库 [数据库只需要创建一次就可以了]
rosrun slamproject currencyChassis_CreateSqlDatabaseMain_node
2.启动数据库 [启动导航前优先启动]
rosrun slamproject currencyChassis_sqlDatabaseMain_node
3.启动turtlebot3
roslaunch turtlebot3_gazebo turtlebot3_house.launch
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=/home/iimt/map.yaml
4.启动虚拟墙编辑器,取2点,录入数据 [qt界面增加虚拟墙数据只支持 line,具体使用看图片]
rosrun slamproject currencyChassis_KSDemoDlgTABLE_COSTMAPLAYERMain_node
5.启动rqt_publisher , 选择topic名字 /costmapProhibitionControl 发送 "refreshCostMapPlayer" 重新加载数据
rosrun rqt_publisher rqt_publisher
####可能出现的问题
项目依赖qt
对于新手可能不会搞qt环境 ,导致项目运行不起来;
这里我归纳一段按我的操作来做试试能不能解决:
1.把依赖装一下:
sudo apt install libqt5serialport5-dev
sudo apt-get install qtmultimedia5-dev
sudo apt-get install libqt5websockets5-dev
sudo apt-get install libqt5webchannel5-dev
sudo apt-get install libqt5multimedia5-plugins
sudo apt-get install sqlitebrowser
2.sudo gedit ~/.bashrc 把qt的环境边量都注释掉
#export PATH=/home/iimt/Qt5.9.9/5.9.9/gcc_64/bin:$PATH
#export LD_LIBRARY_PATH=/home/iimt/Qt5.9.9/5.9.9/gcc_64/lib:$LD_LIBRARY_PATH
#export QT_PLUGIN_PATH=/home/iimt/Qt5.9.9/5.9.9/gcc_64/plugins:$QT_PLUGIN_PATH
#export QML2_IMPORT_PATH=/home/iimt/Qt5.9.9/5.9.9/gcc_64/qml:$QML2_IMPORT_PATH
3. 然后source ~/.bashrc
4.确认系统是ubuntu20.04,ros版本是 noetic