当前位置: 首页 > article >正文

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

一:什么是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.kler.cn/a/408321.html

相关文章:

  • Transformer详解及衍生模型GPT|T5|LLaMa
  • 2024深育杯misc2
  • 1-测试go-redis缓存数据
  • 解决登录Google账号遇到手机上Google账号无法验证的问题
  • 密码学11
  • 学习ASP.NET Core的身份认证(基于Cookie的身份认证2)
  • SpringBoot多文件上传
  • springboot3如何集成knife4j 4.x版本及如何进行API注解
  • Spring集成测试
  • 电子应用设计方案-21:智能取暖系统方案设计
  • C语言之函数的参数
  • C语言:深入理解指针
  • 青少年强网杯线上ctf-crypto-wp
  • Python爬虫进阶实战项目:使用青果网代理高效爬取某手办网详情数据
  • 《那个让服务器“跳舞”的bug》
  • 神经网络(系统性学习二):单层神经网络(感知机)
  • 【CS61A 2024秋】Python入门课,全过程记录P2(Week3开始,更新中2024/11/24)
  • React(五)——useContecxt/Reducer/useCallback/useRef/React.memo/useMemo
  • 11.19机器学习_逻辑回归
  • harbor和docker配置https访问
  • Git | 通过Gihub+git组合来学习理解团队项目合作中分支的创建、合并、删除操作
  • 【C语言】指针1
  • 嵌入式开发中Java可以替代Qt吗?
  • LeetCode 1975. Maximum Matrix Sum
  • [Atcoder Beginner Contest 381 D]1122 Substring 题解
  • GWO-SVMD分解 | Matlab实现GWO-SVMD灰狼算法优化逐次变分模态分解