基于 explore_lite包 的单个机器人自主探索建图

news/2024/5/7 12:49:06/文章来源:https://blog.csdn.net/zeroheitao/article/details/129339553

文章目录

      • 一、简介
      • 二、安装 explore_lite
      • 三、launch 文件配置
      • 四、实验效果
      • 五、常见问题

机器人自主建图有很多方式,比如基于位置边界的map-explore,基于快速搜索树的rrt-explore,指定区域自主探索建图frontier-explore,这几种方法各有优劣。

WIKI:explore_lite
GitHub:https://github.com/hrnr/m-explore

一、简介

explore-lite 提供了贪婪的基于边界的探索。当节点运行时,机器人会贪婪地探索它的环境,直到找不到边界,它的移动命令会发送至 move-base 节点。

explore_lite 不会创建自己的成本图,这使得配置更容易,效率更高(资源更少)。Node 只是订阅nav_msgs/OccupancyGrid 消息。机器人移动命令发送到 move-base 节点。

节点可以进行边界过滤,甚至可以在非膨胀地图上操作。目标黑名单允许处理机器人无法进入的地方,也就是说可以在 move-base 的的代价地图层中配置禁止层参数,explore-lite 也会识别到,并不去探索这部分边界。

二、安装 explore_lite

方法一 自动安装:sudo apt-get install ros-ros版本(melodic、noetic等)-explore-lite

方法二 手动安装:git clone https://github.com/hrnr/m-explore.git

(explore 就是 explore_lite包,这个功能包的使用也很简单,src 中是源码,include 中是头文件,而我们使用时只需配置好相应的 launch 文件即可。)

在这里插入图片描述

三、launch 文件配置

找到 explore_lite 的功能包,其中 launch 文件夹下面有两个,配置 explore_lite 即可。

在这里插入图片描述explore_costmap.launch 配置文件如下,其中需要注意的是 robot_base_frame、costmap_topic 和 costmap_updates_topic。

<launch><node pkg="explore_lite" type="explore" respawn="false" name="explore" output="screen"><!--机器人底盘坐标系--><param name="robot_base_frame" value="base_footprint"/><!--地图主题--><param name="costmap_topic" value="move_base/global_costmap/costmap"/><!--地图更新,如果地图来源始终发布完整更新,即不提供此主题,则不需要--><param name="costmap_updates_topic" value="move_base/global_costmap/costmap_updates"/><!--指定是否发布可视化边界--><param name="visualize" value="true"/>  <!--计算新边界和重新考虑目标的频率(Hz)--><param name="planner_frequency" value="0.33"/><!--时间以秒为单位。当机器人在 progress_timeout 没有任何进展时,当前目标将被放弃。--><param name="progress_timeout" value="30.0"/><!--用于加权边界。这个乘法参数影响前沿权重的前沿潜在分量(到边界的距离)。--><param name="potential_scale" value="3.0"/><!--用于加权边界。这个乘法参数影响前沿权重的前沿方向分量。此参数目前不执行任何操作,仅用于向前兼容。--><param name="orientation_scale" value="0.0"/><!--用于加权边界。这个乘法参数影响边界权重(边界大小)的边界增益分量。--><param name="gain_scale" value="1.0"/><!--变换机器人姿势时使用的变换容差。--><param name="transform_tolerance" value="0.3"/><!--将边界视为探索目标的边界的最小大小。以米为单位。--><param name="min_frontier_size" value="0.5"/></node>
</launch>

explore.launch 配置文件如下,其中需要注意的是 robot_base_frame、costmap_topic 和 costmap_updates_topic。

<launch><node pkg="explore_lite" type="explore" respawn="false" name="explore" output="screen"><param name="robot_base_frame" value="base_footprint"/><param name="costmap_topic" value="map"/><param name="costmap_updates_topic" value="map_updates"/><param name="visualize" value="true"/><param name="planner_frequency" value="0.33"/><param name="progress_timeout" value="60.0"/><param name="potential_scale" value="3.0"/><param name="orientation_scale" value="0.0"/><param name="gain_scale" value="1.0"/><param name="transform_tolerance" value="0.3"/><param name="min_frontier_size" value="0.75"/></node>
</launch>

explore_costmap.launch 与 explore.launch 相比只是关于地图话题 costmap_topic 和 costmap_updates_topic 做了修改,改为了 move_base 发布的地图话题,然后对最后一个参数进行了修改,因为 move_base 的代价地图有障碍物膨胀系数,所以将这个参数进行了略微扩大。

move_base launch 相关配置

<launch><!-- Arguments --><arg name="odom_frame_id"   default="odom"/><arg name="base_frame_id"   default="base_footprint"/><arg name="global_frame_id" default="map"/><arg name="laser_topic"     default="scan"/><arg name="cmd_vel_topic"   default="cmd_vel" /><arg name="odom_topic"      default="odom" /><arg name="move_forward_only" default="false"/><!-- move_base --><node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen"><param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" /><rosparam file="$(find nav_01)/param/costmap_common_params.yaml" command="load" ns="global_costmap" /><rosparam file="$(find nav_01)/param/costmap_common_params.yaml" command="load" ns="local_costmap" /><rosparam file="$(find nav_01)/param/local_costmap_params.yaml" command="load" /><rosparam file="$(find nav_01)/param/global_costmap_params.yaml" command="load" /><rosparam file="$(find nav_01)/param/base_local_planner_params.yaml" command="load" /><!-- <rosparam file="$(find nav_01)/param/move_base_params.yaml" command="load" /> --><!-- <rosparam file="$(find nav_01)/param/dwa_local_planner_params.yaml" command="load" /> --><param name="global_costmap/global_frame" value="$(arg global_frame_id)"/><param name="global_costmap/robot_base_frame" value="$(arg base_frame_id)"/><param name="local_costmap/global_frame" value="$(arg odom_frame_id)"/><param name="local_costmap/robot_base_frame" value="$(arg base_frame_id)"/><param name="DWAPlannerROS/global_frame_id" value="$(arg odom_frame_id)"/><param name="DWAPlannerROS/min_vel_x" value="0.0" if="$(arg move_forward_only)" /><remap from="cmd_vel" to="$(arg cmd_vel_topic)"/><remap from="laser_topic" to="$(arg laser_topic)"/><remap from="odom" to="$(arg odom_topic)"/></node>
</launch>

nav_01是自己创建的包,存放的是move_base相关配置,可以去官方网站复制

一个launch启动所有自主建图的节点

<launch><!--参数配置,运动是否只向前,false 则表示小车可以后退操作--><arg name="move_forward_only" default="true" />  <!--启动gmapping建图--><include file="$(find nav_01)/launch/nav01_slam.launch" /><!--启动move_base--><include file="$(find explore_lite_test)/launch/move_base.launch"><arg name="move_forward_only" value="$(arg move_forward_only)"/></include><!--启动rviz--><node pkg="rviz" type="rviz" name="rviz" args="-d $(find explore_lite_test)/rviz/rviz.rviz"/><!--启动explore_costmap--><include file="$(find explore_lite)/launch/explore.launch" /></launch>

还需要启动gazebo和robot,我是之前有写过这个launch,这里就直接用的之前的

<launch><param name="robot_description" command="$(find xacro)/xacro $(find urdf02_gazebo)/urdf/mycar.xacro" /><include file="$(find gazebo_ros)/launch/empty_world.launch"><!-- <arg name="world_name" value="$(find urdf02_gazebo)/worlds/box_house.world" /> --><arg name="world_name" value="$(find urdf02_gazebo)/worlds/demo03.world" /></include><node pkg="gazebo_ros" type="spawn_model" name="model" args="-urdf -model mycar -param robot_description"  /></launch>

注意:启动自主建图的步骤:

1、启动 gazebo

2、启动 cartographer 或者 gmapping 建图,发布 /map 话题

3、启动 move_base 保证接收到 goal 后能够发布 /cmd_vel 话题

4、启动 explore_lite launch 文件即可

四、实验效果

在这里插入图片描述小车经常出现撞墙的现象,不知道是哪里参数设置地有问题,,,弄清楚原因后再来补充。

五、常见问题

1、启动各个节点以后,并没有开始路径规划,小车未移动。

检查节点各个话题是否能对应上,tf 树是否正确,另外小车的基体坐标系是 base_link 还是 base_footprint。

2、节点话题都对应的上,小车还是不走的情况。

检查 cartographer 或者 gmapping 的地图发布频率,建议发布速度为 5Hz。或者检查 gmapping 建图中map_update_interval 这个参数,改为0.01。

3、若手动下载 explore_lite 包,功能包文件夹名称和package.xml文件中定义的不一致,需要先将文件夹名称进行修改。若编译功能区间时报错:这个功能包无法定位。

可以使用下面的代码解决:catkin_make -DCATKIN_WHITELIST_PACKAGES=explore_lite

上面是编译自主建图的功能包,下面是地图融合的功能包:catkin_make -DCATKIN_WHITELIST_PACKAGES=multirobot_map_merge

进行完这些步骤之后,就可以依次运行gazebo仿真、slam建图程序、move-base导航程序、rviz可视化界面、自主建图程序。

附:

1、各个节点后的节点图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_77617.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高码率QPSK调制解调方案(FPGA实现篇)

在前面的章节中,已经讲过QPSK调制的方案和Matlab算法仿真,在本篇中,主要讲解基于FPGA的高速QPSK调制的实现。根据前面提到的技术指标,本系统传输的数据速率为500Mbps,中频为720MHz,因此,传统的串行QPSK调制已经不合适在FPGA中实现,需采用全数字的并行方式进行调制,具体…

Redis学习【11】之分布式系统

文章目录一 数据分区算法1.1 顺序分区1.1.1 轮询分区算法1.1.2 时间片轮转分区算法1.1.3 数据块分区算法1.1.4 业务主题分区算法1.2 哈希分区1.2.1 节点取模分区算法1.2.2 一致性哈希分区算法1.2.3 虚拟槽分区算法二 分布式系统环境搭建与运行2.1 系统搭建2.1.1 系统架构2.1.2 …

LeetCode 349. 两个数组的交集和 692. 前K个高频单词

两个数组的交集 难度 简单 题目链接 这道题的难度不大&#xff0c;我们可以把数组里的数据存到set里面。这样就完成了排序和去重&#xff0c;然后我们再把一个set里面的数据和另外一个set数据进行比较。如果相同就插入到数组里。 代码如下&#xff1a; 但是这个算法的时间复…

【教学典型案例】14.课程推送页面整理-增加定时功能

目录一&#xff1a;背景介绍1、代码可读性差&#xff0c;结构混乱2、逻辑边界不清晰&#xff0c;封装意识缺乏![在这里插入图片描述](https://img-blog.csdnimg.cn/bbfc5f04902541db993944ced6b62793.png)3、展示效果不美观二&#xff1a;案例问题分析以及解决过程1、代码可读性…

数学建模(一):LP 问题

文章目录数学建模&#xff08;一&#xff09;&#xff1a;LP 问题一、 MATLAB求解二、 Python 求解数学建模&#xff08;一&#xff09;&#xff1a;LP 问题 在人们的生产实践中&#xff0c;经常会遇到如何利用现有资源来安排生产&#xff0c;以取得最大经济效益的问题。此类问…

IP 地址的简介

IP 地址 Internet 依靠 TCP/IP 协议&#xff0c;在全球范围内实现不同硬件结构、不同操作系统、不同网络系统的主机之间的互联。在 Internet 上&#xff0c;每一个节点都依靠唯一的 IP 地址相互区分和相互联系&#xff0c;IP 地址用于标识互联网中的每台主机的身份&#xff0c…

IDEA这些配置,简单高效

优化导包配置配置路径&#xff1a;File-> settings -> Editor -> General -> Auto ImportAdd unambiguous imports on the fly&#xff1a;自动导包Optimize imports on th fly (for current project)&#xff1a;自动删除无用包代码提示取消大小写配置路径&#x…

UML2——行为图

目录 一、前言 二、活动图 三、交互图 3.1 一般序列图 3.2 时间约束序列图 3.3 协作图 四、用例图 五、状态图 一、前言 UML 是由视图&#xff08;View&#xff09;、图&#xff08;Diagrams&#xff09;、模型元素&#xff08;Model elements&#xff09;和通用机制等几…

Python GUI界面编程-初识

图形用户界面(Graphical User Interface&#xff0c;简称 GUI&#xff0c;又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比&#xff0c;图形界面对于用户来说在视觉上更易于接受。然而这界面若要通过在显示屏的特定位置&#xf…

mac M1 nvm安装教程,避坑

mac M1 nvm 安装问题 新款的mac搭载了苹果自研的芯片&#xff0c;放弃了intel的x86芯片&#xff0c;那之前的软件难免会存在兼容性问题。 鄙人有幸踩了第一个坑。 在通过nvm 安装不同版本的node 时&#xff0c;出现了问题。 问题一&#xff1a;先说一下 nvm的安装问题&#…

现代操作系统——Linux架构与学习

小白的疑惑 在我决定从事嵌入式&#xff08;应用层&#xff09;方面的工作时&#xff0c;我查询了大量资料该如何学习&#xff0c;几乎所有观点不约而同的都指向了学习好Linux&#xff0c;大部分工作都是在Linux环境下来进行工作的。于是我雄心勃勃的去下载Linux&#xff0c;可…

GEE开发之ERA5(气温、降水、压力、风速等)数据获取和分析

GEE开发之ERA5&#xff08;气温、降水、压力、风速等&#xff09;数据获取和分析1.ERA5介绍2.初始ERA5数据2.1 DAILY代码2.2 MONTHLY代码3.遥感影像查看&#xff08;DAILY之mean_2m_air_temperature&#xff09;4.逐日数据分析和获取(以mean_2m_air_temperature为例)5.逐月数据…

[神经网络]Swin Transformer网络

一、概述 Swin Transformer是一个用了移动窗口的层级式Vision Transformer。 在图像领域&#xff0c;Transformer需要解决如下两个问题&#xff1a; ①尺度问题&#xff1a;同一语义的物体在图像中有不一样的尺度。(大小不同) ②Resolution过大&#xff1a;若以像素点作为单位&…

呼吸机方案 以 MM32F3270 为主控板,MM32SPIN05PF 为电机控制主控

呼吸机的作用是让氧气进入肺部并排出二氧化碳&#xff0c;帮助病患顺利呼吸。呼吸机连接一条管子到患者的嘴或鼻子&#xff0c;氧气量可以通过监视器加以控制。 基于灵动微控制器的呼吸机&#xff0c;以 MM32F3270 为主控板&#xff0c;MM32SPIN05PF 为电机控制主控&#xff1…

python 操作word库docx 增强接口

前言用python 的docx 库操作word完成一些自动化的文档生成工作&#xff0c;但有时候会遇到docx库提供的操作无法直接满足业务上的需求&#xff0c;需要对其进行一些扩展。接口完善实现在指定的文字后面插入指定的文字任务&#xff1a;以下示例需要在文档中的所有 "人生苦短…

【SpringMVC】springMVC介绍

参考资料 视频资料 03_尚硅谷_SpringMVC_SpringMVC简介_哔哩哔哩_bilibili 笔记资料 第一节 SpringMVC概述 (wolai.com)链接&#xff1a;https://pan.baidu.com/s/1A7BX2TNfbGTpYene4x3Mew 提取码&#xff1a;a8d5 一、SpringMVC简介 1、什么是MVC MVC是一种软件架构的思…

js正则表达式以及元字符

0、常用的正则表达式规则 手机号 const reg /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/;密码 const reg /^[a-zA-Z0-9]{6,20}$/;验证码 const reg /^\d{6}$/;1、正则表达式的介绍与使用 正则表达式(Regular Expression)是用于匹配字符串中字符组合…

用Python Flask为女朋友做一个简单的网站(附可运行的源码)

&#x1f31f;所属专栏&#xff1a;献给榕榕&#x1f414;作者简介&#xff1a;rchjr——五带信管菜只因一枚&#x1f62e;前言&#xff1a;该专栏系为女友准备的&#xff0c;里面会不定时发一些讨好她的技术作品&#xff0c;感兴趣的小伙伴可以关注一下~&#x1f449;文章简介…

docker安装即docker连接mysql(window)

一 安装docker 1.什么是docker Docker容器与虚拟机类似&#xff0c;但二者在原理上不同。容器是将操作系统层虚拟化&#xff0c;虚拟机则是虚拟化硬件&#xff0c;因此容器更具有便携性、高效地利用服务器。 2.WSL2 WSL&#xff0c;即Windows Subsystem on Linux&#xff0c;中…

【CV学习笔记】之ncnnFastDet多线程c++部署

1、前言 ncnn是一款非常高效易用的深度学习推理框架&#xff0c;支持各种神经网络模型&#xff0c;如pytorch、tensorflow、onnx等&#xff0c;以及多种硬件后端&#xff0c;如x86、arm、riscv、mips、vulkan等。 ncnn项目地址:https://github.com/Tencent/ncnn FastDet是设计…