如何利用ros搭建虚拟场景通过仿真机器人完成一次简单的SLAM建图、导航规划(超简单)?——学习来源:机器人工匠阿杰

news2024/11/25 9:16:55

一:什么是SLAM,SLAM和导航规划又有什么关系?

SLAM(Simultaneous Localization and Mapping,即同时定位与建图)是一种在未知或动态环境中自行驶的重要技术。主要通过设备上的传感器(如激光雷达、深度摄像头、惯性测量单元 IMU 等)实时感知周围环境,同时估计自身的位姿(位置和朝向)以及构建周围环境的地图。SLAM的关键在于解决定位与建图的“鸡与蛋”问题:定位需要依赖已有的地图,而地图的生成又需要准确的位置信息。为此,SLAM通常结合概率理论、优化算法和数据融合技术,如扩展卡尔曼滤波(EKF)、粒子滤波、图优化等方法,来同时解决这两个互相依赖的问题。SLAM技术与导航规划之间存在紧密的联系,SLAM为导航规划提供了两项基础能力:环境认知自身定位。在导航过程中,设备需要明确知道自己在环境中的当前位置和姿态(由SLAM的定位模块提供),同时需要了解周围环境的地图信息,包括障碍物位置和自由空间分布(由SLAM的建图模块提供)。有了这些信息,导航系统中的路径规划模块才能基于目标位置,计算出从当前位置到目标点的最优路径。例如,A*算法或Dijkstra算法可以基于SLAM生成的地图规划路径,而动态窗口法(DWA)等局部规划方法则可根据SLAM定位结果动态调整路径以避开实时感知到的障碍。

       此外,SLAM不仅为静态环境下的路径规划提供支持,也为动态环境中的实时调整提供保障。在复杂环境中,SLAM的高效性和鲁棒性直接影响导航的性能,尤其是当设备面临感知误差、环境变化(如移动障碍物)或传感器故障时,SLAM的准确性和更新速度将决定导航系统的成功与否。因此,SLAM是导航规划的“感知基础”,而导航规划则是SLAM在行动层面上的应用。两者相辅相成,共同构成智能移动设备自主运行的核心能力。

二:首先完成地图的创建,有图有规划,我们先下载一个机器人:GitHub - 6-robot/wpr_simulation

git clone  https://github.com/6-robot/wpr_simulation.git

 三:查看gitup网址里面的readme.md有详细的安装方式,以及简单的使用说明:GitHub - 6-robot/wpr_simulation

四: Ros应该都已经具备了,机器人也有了,我们先通过SLAM建图,接下来编写gmapping的launch启动文件

catkin_create_pkg  slam_pkg rospy  roscpp std_msgs

cd  slam_pkg

mkdir launch

touch  gmapping,launch

文件内容为:

<launch>
<include file="$(find wpr_simulation)/launch/wpb_stage_robocup.launch"/>
<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping"/>
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find slam_pkg)/rviz/gmapping.rviz"/>
<node pkg="wpr_simulation" type="keyboard_vel_ctrl" name="keyboard_vel_ctrl"/>
</launch>

之后运行以下命令: 

source devel/setup.bash

roslaunch  slam_pkg   gmapping.launch

就会出现相应的仿真场景、之后鼠标在这个端口,运行键盘WASDQE分别是前进、左走、后退、右走、左转、右转、控制机器人走动实现地图的构建,以及rviz画面:

五:如果不需要launch文件,也可以运行以下命令手动建图:

roslaunch wpr_simulation  wpb_gmapping.launch

rosrun wpr_simulation  keyboard_vel_ctrl

rosrun map_server map_saver -f map

之后点击file --save config as 保存为新文件,方便下次直接调用:

六: 呢么如何加载地图呢,打开我们保存地图的文件夹,如下所示:直接运行以下命令,:

rosrun map_server  map_server  map.yaml

七:之后打开rviz,添加地图话题如下所示:

八、地图有了该怎么导航规划呢,还是借助之前的仿真机器人进行操作,详细的命令如下:

【1】下载源代码
cd ~/catkin_ws/src
git clone https://github.com/6-robot/wpr_simulation.git
若github超时,试试从gitee下载:
git clone https://gitee.com/s-robot/wpr_simulation.git
cd wpr_simulation/scripts/
./install_for_noetic.sh
cd ~/catkin_ws/
catkin_make

cd ~/catkin_ws/src
git clone https://github.com/6-robot/wpb_home.git
若github超时,试试从gitee下载:
git clone https://gitee.com/s-robot/wpb_home.git
cd wpb_home/wpb_home_bringup/scripts/
./install_for_noetic.sh
cd ~/catkin_ws/
catkin_make

【2】建图指令
roslaunch wpr_simulation wpb_gmapping.launch
rosrun wpr_simulation keyboard_vel_ctrl
rosrun map_server map_saver -f map

【3】创建软件包
catkin_create_pkg nav_pkg roscpp rospy move_base_msgs actionlib

【4】参考代码
wpr_simulation/launch/wpb_demo_nav.launch

【5】导航运行
roslaunch wpr_simulation wpb_stage_robocup.launch
roslaunch wpr_simulation wpb_demo_nav.launch

九:运行以下命令之前,我们先编写相应的导航launch文件,仿照gmapping的launch启动文件的编写步骤,其launch文件内容如下:

<launch>
    <!-- Launch move_base node with parameters -->
    <node pkg="move_base" type="move_base" name="move_base">
        <rosparam file="$(find wpb_home_tutorials)/nav_lidar/costmap_common_params.yaml" command="load" ns="global_costmap" />
        <rosparam file="$(find wpb_home_tutorials)/nav_lidar/costmap_common_params.yaml" command="load" ns="local_costmap" />
        <rosparam file="$(find wpb_home_tutorials)/nav_lidar/global_costmap_params.yaml" command="load" />
        <rosparam file="$(find wpb_home_tutorials)/nav_lidar/local_costmap_params.yaml" command="load" />
        <param name="base_global_planner" value="global_planner/GlobalPlanner" /> 
        <param name="base_local_planner" value="wpbh_local_planner/WpbhLocalPlanner" />
        <param name="controller_frequency" value="10" typr="double"/>
    </node>

    <!-- Run map server with specified map -->
    <node pkg="map_server" type="map_server" name="map_server" args="$(find wpr_simulation)/maps/map.yaml" />
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find nav_pkg)/rviz/map_tool.rviz" /> 
    <node pkg="amcl" type="amcl" name="amcl"  />       
    <!-- Run AMCL -->
    <node pkg="waterplus_map_tools" type="wp_navi_server" name="wp_navi_server" output="screen"/>
    <node pkg="waterplus_map_tools" type="wp_manager" name="wp_manager" output="screen"/>

</launch>

 十:之后运行以下命令进行导航规划

roslaunch wpr_simulation wpb_stage_robocup.launch

roslaunch  nav_pkg nav.launch 

 

 十一:之后我们利用rviz当中的2d Nav Goal 指定目标点和朝向,之后会利用ros当中的相应规划器进行路径规划

 十二:后续进行相应规划的详细讲解,强烈建议大家去听一下机器人工匠阿杰的bilibili,讲的超好。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

shell脚本(完结)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;shell编程&#xff08;完结&#xff09;_哔哩哔哩_bilibili 本文主要讲解不同shell脚本中的相互调用以及输入输出重定向操作。 一、不同脚本之间…

禁用达梦DEM的agent

agent占用内存较多&#xff0c;实际没什么使用&#xff0c;考虑停止agent 应该切换到root执行停止 cd /dm/dmdbms/tool/dmagent/service/ ./DmAgentService stop禁用

使用ChatGPT生成和优化电子商务用户需求规格说明书

在电子商务项目开发中&#xff0c;用户需求规格说明书&#xff08;User Requirement Specification, URS&#xff09;是团队沟通与项目成功的基石。然而&#xff0c;面对复杂多变的需求&#xff0c;如何快速生成清晰、完整且具备说服力的文档&#xff1f;这正是AI工具的用武之地…

产品研发管理和研发项目管理的区别是什么

产品研发管理与研发项目管理有显著的区别&#xff0c;主要体现在管理范围、目标导向和执行方法上。产品研发管理侧重于产品生命周期的规划与执行&#xff0c;强调产品的创新性和市场需求对接&#xff0c;而研发项目管理则更注重具体项目的执行过程&#xff0c;聚焦项目时间、成…

摆烂仙君传——深度学习秘境奇缘

第一章&#xff1a;深度学习秘境 在修仙界与科技交织的边缘&#xff0c;八荒六合九天无上摆烂仙君在其高科技修炼室中感应到一股神秘的召唤。这股力量似乎与他的灵魂产生了共鸣&#xff0c;引导他前往传说中的深度学习秘境。在那里&#xff0c;古老的仙法与前沿的算法交织&…

【FPGA开发】Vivado自定义封装IP核,绑定总线

支持单个文件的封装、整个工程的封装&#xff0c;这里用单个文件举例。 在文件工程目录下&#xff0c;自建一个文件夹&#xff0c;里面放上需要封装的verilog文件。 选择第三个&#xff0c;指定路径封装&#xff0c;找到文件所在目录 取个名&#xff0c;选择封装IP的路径 会…

【CS61A 2024秋】Python入门课,全过程记录P2(Week3开始,更新中2024/11/24)

文章目录 关于基本介绍&#x1f44b;Week 3Mon Environments阅读材料Lab 02: Higher-Order Functions, Lambda ExpressionsQ1: WWPD: The Truth Will PrevailQ2: WWPD: Higher-Order FunctionsQ3: WWPD: Lambda 关于 个人博客&#xff0c;里面偶尔更新&#xff0c;最近比较忙。…

在Linux下配置gitee与Github的远程仓库

目录 前言 云服务器下载git 检测是否下载成功git Linux下配置gitee远程仓库 代码提交演示 git三板斧 Linux下配置Github远程仓库 最后的提醒 前言 那么本篇文章将是在&#xff0c;你已经创建了本地仓库的基础上&#xff0c;在Linux下配置gitee的远程仓库的步骤&#xff…

Mac配置maven环境及在IDEA中配置Maven

Mac配置maven环境及在IDEA中配置Maven 1. 介绍 Maven是一款广泛用于Java等JVM语言项目的工具&#xff0c;它以项目对象模型&#xff08;POM&#xff09;为基础进行项目管理&#xff0c;通过POM文件来定义项目信息和依赖关系。同时&#xff0c;它也是构建自动化工具&#xff0…

硬中断关闭后的堆栈抓取方法

一、背景 性能和稳定性是一个计算机工程里的一个永恒的主题。其中尤其稳定性这块的问题发现和问题分析及问题解决就依赖合适的对系统的观测的手段&#xff0c;帮助我们发现问题&#xff0c;识别问题原因最后才能解决问题。稳定性问题里尤其底层问题里&#xff0c;除了panic问题…

STL关联式容器之hashtable

hashtable的桶子与节点 下图为开链法(separate chaining)完成hashtable的图形表述。为了剖析SGI STL源码&#xff0c;我们遵循SGI的命名&#xff0c;称hash table表格内的元素为桶(bucket),此名称的大约意义是&#xff0c;表格内的每个单元&#xff0c;涵盖的不只是个节点(元素…

基于python的长津湖评论数据分析与可视化,使用是svm情感分析建模

引言 研究背景及意义 上世纪初开始&#xff0c;中国电影就以自己独有的姿态登上了世界电影史的舞台。中国电影作为国家文化和思想观念的反映与延伸&#xff0c;能够增强文化自信&#xff0c;在文化输出方面有着极其重要的作用1[1]。 改革开放以来&#xff0c;随着生产力的提高…

阿里云oss转发上线-实现不出网钓鱼

本地实现阿里云oss转发上线&#xff0c;全部代码在文末&#xff0c;代码存在冗余 实战环境 被钓鱼机器不出网只可访问内部网络包含集团oss 实战思路 若将我们的shellcode文件上传到集团oss上仍无法上线&#xff0c;那么就利用oss做中转使用本地转发进行上线&#xff0c;先发送…

预测未来 | MATLAB实现Transformer时间序列预测未来

预测未来 | MATLAB实现Transformer时间序列预测未来 预测效果 基本介绍 1.Matlab实现Transformer时间序列预测未来&#xff1b; 2.运行环境Matlab2023b及以上&#xff0c;data为数据集&#xff0c;单变量时间序列预测&#xff1b; 3.递归预测未来数据&#xff0c;可以控制预…

局域网与广域网:探索网络的规模与奥秘(3/10)

一、局域网的特点 局域网覆盖有限的地理范围&#xff0c;通常在几公里以内&#xff0c;具有实现资源共享、服务共享、维护简单、组网开销低等特点&#xff0c;主要传输介质为双绞线&#xff0c;并使用少量的光纤。 局域网一般是方圆几千米以内的区域网络&#xff0c;其特点丰富…

可视化建模与UML《协作图实验报告》

有些鸟儿毕竟是关不住的。 一、实验目的&#xff1a; 1、熟悉协作图的构件事物。 2、掌握协作图的绘制方法。 二、实验环境&#xff1a; window7 | 10 | 11 EA15 三、实验内容&#xff1a; 下面列出了打印文件时的工作流&#xff1a; 用户通过计算机指定要打印的文件。(2)打…

docker搭建私有的仓库

docker搭建私有仓库 一、为什么要搭建私有的仓库&#xff1f; 因为在国内&#xff0c;访问&#xff1a;https://hub.docker.com/ 会出现无法访问页面。。。。&#xff08;已经使用了魔法&#xff09; 当然现在也有一些国内的镜像管理网站&#xff0c;比如网易云镜像服务、Dao…

微信小程序条件渲染与列表渲染的全面教程

微信小程序条件渲染与列表渲染的全面教程 引言 在微信小程序的开发中,条件渲染和列表渲染是构建动态用户界面的重要技术。通过条件渲染,我们可以根据不同的状态展示不同的内容,而列表渲染则使得我们能够高效地展示一组数据。本文将详细讲解这两种渲染方式的用法,结合实例…

订单日记为“惠采科技”提供全方位的进销存管理支持

感谢温州惠采科技有限责任公司选择使用订单日记&#xff01; 温州惠采科技有限责任公司&#xff0c;成立于2024年&#xff0c;位于浙江省温州市&#xff0c;是一家以从事销售电气辅材为主的企业。 在业务不断壮大的过程中&#xff0c;想使用一种既能提升运营效率又能节省成本…

mysql-分析并解决可重复读隔离级别发生的删除幻读问题

在 MySQL 的 InnoDB 存储引擎中&#xff0c;快照读和当前读的行为会影响事务的一致性。让我们详细分析一下隔离级别味可重复读的情况下如何解决删除带来的幻读。 场景描述 假设有一个表 orders&#xff0c;其中包含以下数据&#xff1a; 事务 A 执行快照读 START TRANSACTION…