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)所示,展示了如何进行刺入查询。【根据这两个子图在世界坐标系中的位姿,可以计算出子图1中每个局部边界点在子图2中的对应位置。如果子地图1中的局部边界点仍然是子地图2中的局部边界点或未知点,则认为该边界点是全局边界点(例如,全局地图仅由两个子地图组成)。否则,表示该边界点在子映射2中被遮挡。对子地图2中的局部边界点执行相同的查询操作。】

B.Cartographer

它构建子图,并优化所有扫描和子图遵循稀疏位姿调整;并且图优化只优化子图之间的相对位姿,而不改变

在ROS Noetic版本中,`frontier_exploration` 是一种常用的自主探索算法实现,它基于边界(frontier)的概念进行未知区域的探索。该方法通过识别已知地图与未知区域之间的边界,并将这些边界点作为探索目标,指导机器人逐步扩展环境地图[^2]。 ### 实现指南 #### 1. 安装依赖 首先确保系统中安装了ROS Noetic,并配置好了工作空间。可以通过以下命令安装 `frontier_exploration` 包: ```bash sudo apt-get install ros-noetic-frontier-exploration ``` 此外,还需要安装相关的导航堆栈组件,如 `move_base` 和 `costmap_2d`,因为它们是 `frontier_exploration` 的核心依赖[^1]。 #### 2. 配置launch文件 创建一个 `.launch` 文件用于启动 `exploration` 节点。例如,在你的包中创建 `exploration.launch` 文件,并添加如下内容: ```xml <launch> <node name="exploration_server" pkg="frontier_exploration" type="explore_server" output="screen"> <rosparam file="$(find your_package)/config/costmap_params.yaml" command="load" ns="explore_costmap"/> <param name="goal_plugin_name" value="frontier_plugin" /> </node> <node name="plugin_client" pkg="frontier_exploration" type="plugin_client" output="screen"/> </launch> ``` 其中,`costmap_params.yaml` 文件需要定义 `explore_costmap` 的参数,包括传感器范围、障碍物检测阈值等。 #### 3. 启动SLAM和导航 在运行探索任务之前,需要先启动SLAM以构建地图并提供给 `frontier_exploration` 使用。可以使用 `gmapping` 或 `cartographer` 等SLAM包[^2]。 ```bash roslaunch your_robot_slam slam.launch ``` 随后,启动导航堆栈以支持机器人的移动控制: ```bash roslaunch your_robot_navigation move_base.launch ``` 最后,启动探索节点: ```bash roslaunch your_package exploration.launch ``` #### 4. 使用Rviz进行可视化 打开Rviz并加载相应的配置文件,可以看到当前的地图状态以及探索目标点的更新情况。通过 `actionlib` 提供的接口,用户可以在Rviz中设置探索目标,从而控制机器人进行探索[^1]。 ### 使用教程 - **初始化探索**:一旦所有节点启动完毕,`frontier_exploration` 将自动开始搜索边界点,并将这些点作为目标发送给 `move_base`。 - **动态调整参数**:在探索过程中,可以通过 `dynamic_reconfigure` 工具调整参数,例如探索半径、目标优先级等,以适应不同的环境条件。 - **手动干预**:如果需要,用户可以通过Rviz手动选择探索目标,覆盖默认的边界点选择机制。 ### 注意事项 - 在使用 `frontier_exploration` 时,确保 `costmap` 的配置正确,特别是传感器数据的输入和障碍物检测的灵敏度。 - 如果遇到节点无法启动的问题,检查节点是否具有可执行权限。可以通过以下命令修改权限: ```bash cd yourpackage chmod 777 yournode ``` - 确保所有依赖项已正确安装,避免因缺少库文件而导致的错误。 ###
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值