Frontier Detection and Reachability Analysis for Efficient 2D Graph-SLAM Based Active Exploration

介绍

该文的工作:
1、基于Cartographer设计边界检测算法,其中的改进为没有评估所有的子图,而是只选择那些经过图优化后位姿变化大于一定阈值的子图,减少了计算量。
2、分析并改进边界的可达性,提出一种聚类方法,将密集的边界聚类作为导航点来获取可达的导航点,从而避免了导航点不可达可能导致的路径规划无效问题。

准备

A.定义

占据概率标记:每个栅格单元的先验概率为0.5
则当概率=0.5,栅格状态未知;
概率>0.5,栅格为占据;
概率<0.5,栅格为自由。

边界:与至少一个未知网格相邻的所有自由网格的集合。如图2(a)所示,红点为WFD在子地图上检测到的局部边界。

子图:由几个连续的激光扫描组成的小型占用网格地图,每个子图中包含的激光扫描位姿和边界点存储在相对于子图的局部坐标系中。【如图2(a)所示,展示了由几个连续的激光扫描组成的子图。】

全局图:一种融合占用网格图,根据图优化得到的相对位姿将所有子图连接起来,由于每次优化后子映射之间的相对位姿都会发生变化,因此每次优化后都需要重新生成全局映射。【查询两个子地图的所有局部边界点后,得到全局地图的全局边界点,如图2(c )所示】

刺入查询:一项用来评估当地边界是否属于全局边界的操作,当且仅当局部边界点在所有几何共对子图中属于边界或未知状态时,将其视为全局边界点。如图2(b)所示,展示了如何进行刺入查询。【根据这两个子图在世界坐标系中的位姿,可以计

### 如何复现 FUEL Fast UAV Exploration Using Incremental Frontier Structure and Hierarchical Planning 为了成功复现FUEL项目,需理解其核心组成部分:增量前沿信息结构(FIS)和层次化规划。此方法旨在提高无人机在未知环境中的探索效率。 #### 1. 环境搭建 首先安装必要的依赖库,包括但不限于ROS(Robot Operating System),PCL(Point Cloud Library),以及用于优化轨迹生成的相关工具包。确保开发平台支持C++编程语言,并配置好编译器与调试环境[^4]。 ```bash sudo apt-get update && sudo apt-get install ros-noetic-desktop-full python3-catkin-tools libpcl-dev source /opt/ros/noetic/setup.bash catkin init ``` #### 2. 数据集准备 获取适用于三维点云处理的数据集,这些数据可以来自公开资源或是通过实际飞行采集而来。对于模拟实验而言,Gazebo或其他物理引擎可提供逼真的场景模型供测试之用。 #### 3. 实现增量前沿信息结构 (FIS) 构建一个高效的数据结构来维护已知区域的地图表示形式,同时动态识别潜在的未访问过的边界区。每当接收到新的传感器输入时,更新现有地图并扩展边界集合。具体来说: - 初始化空的地图网格; - 接收LiDAR扫描结果作为观测值; - 更新占用栅格图; - 提取当前可见范围内的所有候选边界点; - 对新发现的边界应用增量算法进行分类整理[^1]。 ```cpp // Pseudo-code for updating the frontier information structure void updateFrontiers(const sensor_msgs::LaserScan& scan){ // Convert laser data into point cloud format pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // Update occupancy grid based on new observations map.updateWithObservation(cloud); // Extract frontiers from updated map std::vector<Frontier> detected_frontiers = extractFrontiers(map); } ``` #### 4. 层次化规划策略设计 制定两阶段的任务分配方案——先确定宏观层面的最佳路径框架,再细化至局部动作序列。全局搜索应考虑整体连通性和可达性约束条件;而针对特定子目标,则利用快速采样技术寻找最优解。特别注意的是,在最终逼近选定视点之前,还需调整姿态以确保成像质量[^2]。 ```python def hierarchical_planning(start_pose, target_viewpoint): global_path = find_global_coverage_route(start_pose) # Generate coarse-level route local_trajectory = optimize_local_approach(global_path[-1], target_viewpoint) # Fine-tune approach path return concatenate_paths([global_path[:-1], local_trajectory]) ``` #### 5. 轨迹平滑与执行 采用B-spline曲线拟合技术对初步得到的动作指令加以修饰,使其更加流畅自然。此外,考虑到实时性能需求,建议预先计算多个可能的选择分支以便即时切换方向而不影响连续性[^5]。 ```matlab function bspline_control_points = generate_bspline(points) % Fit B-Spline to given waypoints tck = csaps(points(:,1), points(:,2)); % Cubic spline approximation u = linspace(0,1,length(points)); p = ppval(tck,u); % Evaluate fitted curve at sample locations bspline_control_points = [p; ...]; % Store control vertices of resulting BSpline end ```
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值