标题移动机器人全覆盖路径规划级仿真(三.地图分割)

标题算法流程

1.建立event类和CellNode类

2.将Wall(obostacle)每个坐标点变成event,加入event_list

3.根据event.x的值 对event施加event_type

4.对event_list中event.x排序

5.新建二维deque slice_list存放x值相同的event

6.根据slice_list中的event_type,执行相应的操作。

event类和CellNode类数据结构如下:

class Event
{public:Event(int obstacle_idx, int x_pos, int y_pos, EventType type=UNALLOCATED){obstacle_index = obstacle_idx;x = x_pos;y = y_pos;event_type = type;original_index_in_slice = INT_MAX;isUsed = false;}int x;int y;int original_index_in_slice;int obstacle_index;EventType event_type;bool isUsed;
};
class CellNode
{public:CellNode(){isVisited = false;isCleaned = false;parentIndex = INT_MAX;cellIndex = INT_MAX;}bool isVisited;bool isCleaned;Edge ceiling;Edge floor;int parentIndex;std::deque<int> neighbor_indices;int cellIndex;
};

一个CellNode可以由两个列表表示:一个CELING边缘列表和一个FLOOR边缘列表,因此,一个单元格结构包含两个指向边列表的指针:CELING指针和FLOOR指针。
CellNode结构还包含指向相邻单元的指针的链接列表。单元结构具有两个标志:visited和cleaned,

map_decomposition算法

std::vector<CellNode> ConstructCellGraph(const cv::Mat& original_map, const std::vector<std::vector<cv::Point>>& wall_contours, const std::vector<std::vector<cv::Point>>& obstacle_contours, const Polygon& wall, const PolygonList& obstacles)
{cv::Mat3b map = cv::Mat3b(original_map.size());map.setTo(cv::Scalar(0, 0, 0));cv::fillPoly(map, wall_contours, cv::Scalar(255, 255, 255));cv::fillPoly(map, obstacle_contours, cv::Scalar(0, 0, 0));std::vector<Event> wall_event_list = GenerateWallEventList(map, wall);std::vector<Event> obstacle_event_list = GenerateObstacleEventList(map, obstacles);std::deque<std::deque<Event>> slice_list = SliceListGenerator(wall_event_list, obstacle_event_list);std::vector<CellNode> cell_graph;std::vector<int> cell_index_slice;std::vector<int> original_cell_index_slice;ExecuteCellDecomposition(cell_graph, cell_index_slice, original_cell_index_slice, slice_list);return cell_graph;
}

分割后的结果如下图,灰色为分割后的cellNode。

移动机器人全覆盖路径规划及仿真(三.地图分割)相关推荐

  1. **基于深度强化学习的全覆盖路径规划飞行器**

    论文题目<UAV Coverage Path Planning under Varying Power Constraints using Deep Reinforcement Learning ...

  2. 全覆盖路径规划思想(2)

    全覆盖清扫机器人思路 预规划路线思路 方案一(可快速demo) 动态规划思路 方案二 预规划路线思路 机器人在遍历整个环境前,应已知环境,即已获取全局地图:目前较常见的为激光slam方案,如科沃斯.小 ...

  3. jeremy的路径规划学习-1.三维地图定义,散点拟合插值与粒子群算法(matlab实现)

    jeremy的路径规划学习-1.三维地图定义,散点拟合插值与粒子群算法(matlab实现) 本文基于小黎的ally学习资料实现,感谢该博主的无私奉献 三维地图与二维地图的差别 1.二维无高度信息,多用 ...

  4. 基于群智能的路径规划算法(三)------遗传算法

       本系列文章主要记录学习基于群智能的路径规划算法过程中的一些关键知识点,并按照理解对其进行描述和进行相关思考.    主要学习资料是来自 小黎的Ally 的 <第2期课程-基于群智能的三维路 ...

  5. 机器人路径规划之分段三次Hermite插值(PCHIP) [包括Python和Matlab代码实现]

    前言 在机器人的路径规划中针对离散采样点做插值计算生成平滑的曲线轨迹也是挺重要的一部分,本文主要介绍一下目前使用较多也是个人觉得挺好用的一个插值方法--分段三次 Hermite 插值(PCHIP),并 ...

  6. 最新导航综述!SLAM方法/数据集/传感器融合/路径规划与仿真多个主题

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[SLAM]技术交流群 后台回复[SLAM综述]获取视觉SLAM.激光SLAM.RGBD ...

  7. 【大作业】基于MATLAB的PRM算法的路径规划设计(随机地图+GUI+源码+报告)

    基于MATLAB的PRM算法的路径规划设计 下载链接: [Matlab期末大作业]基于MATLAB的PRM算法的路径规划设计(大报告+源代码+注释) 课题内容和要求 学会运用MATLAB 解决实际优化 ...

  8. 机器人学习--从路径规划侧面看栅格地图

    移动机器人路径规划--很多种算法,如果有计算机学科基础的话,可以参考数据结构中的深度优先算法或者广度优先算法 https://zhuanlan.zhihu.com/p/51112799 https:/ ...

  9. 基于matlab的Qlearning强化学习室内路径规划控制算法仿真

    目录 1.算法概述 2.仿真效果 3.MATLAB仿真源码 1.算法概述 强化学习与监督学习不同之处在于,它不需要教师信号,又不同于仅能完成极其有限功能的无监督学习在学习过程中得不到任何提示,它强调与 ...

最新文章

  1. manacher算法----O(n)最长回文串
  2. 定时将应用日志移动到指定目录
  3. 传统外贸不好做,为什么不来做跨境电商?
  4. jQuery之简单的表单验证
  5. jvm(6)-java类文件结构(字节码文件)
  6. ssh无密码登陆权威指南
  7. opencv怎么2个摄像头_内脏脂肪过高怎么办?从2个方法入手,坚持3个月甩掉小肚腩...
  8. TCP-IP详解:SACK选项(Selective Acknowledgment)
  9. 网站死链接检测工具 Xenu 汉化版
  10. 罗马帝国 Ancient Rome 简易修改器
  11. RAC下Fatal NI connect error 12170.报错处理
  12. int 和 枚举类型enum的转换 in c++
  13. 【PCB专题】什么是通孔、盲孔、埋孔?
  14. 甲骨文中间件与主数据管理平台
  15. Redis 基础 - 优惠券秒杀《非集群》
  16. luoguP1456 Monkey King
  17. 3G门户Android面试题(2013年)
  18. sparksql中大小表jion
  19. 【现代控制理论】| 线性系统的状态空间法
  20. js脚本爬取网页数据案例解析

热门文章

  1. 文件夹配额linux,Linux磁盘配额
  2. WordPress快速增加百度收录,加快网站内容抓取
  3. 在VUE中使用Echarts世界地图,并根据经纬度标记位置
  4. Deepin 使用教程:前言
  5. 异贝服装店都可以做会员营销?神奇的逆向思维让他快速裂变赚钱!
  6. 在tensorflow下进行pip操作时需要注意的地方
  7. linux环境查看cpu是否开启睿频
  8. 计算机应用基础(专)【7】
  9. 墨海醉笔,又流逝了多少华年?
  10. 使用ul li 实现图片的左右滚动