# 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