适合新手小白入门实现slam建图和路径规划的详细教程

b站教程:https://www.bilibili.com/video/BV13g4y157R9/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=477542868eed5e7af9de168225960d85

感谢b站up主杰哥的视频教学,本篇文章为学习所记录

环境:ubuntu20.04

ros1,neotic版本

1.从github下载示例教程,先安装git,然后创建工作空间

复制代码
mkdir catkin_make
cd catkin_make
mkdir src
cd src
#上述是创建工作空间
sudo apt install git  #可以git拉取github的内容

git clone https://github.com/6-robot/wpr_simulation.git
git clone https://github.com/6-robot/wpr1.git
git clone https://github.com/6-robot/waterplus_map_tools.git
git clone https://github.com/6-robot/xfyun_waterplus.git
git clone https://github.com/6-robot/wpb_home.git

到~/catkin_make/src/wpr_simulation/scripts目录下

install_for_kinetic.sh

install_for_melodic.sh

install_for_noetic.sh

复制代码
cd ~/catkin_make/src/wpr_simulation/scripts
chmod +x install_for_noetic.sh
./install_for_noetic.sh

cd ~/catkin_make/src/wpr_simulation/scripts
./install_for_noetic.sh
cd ~/catkin_make/src/wpb_home/wpb_home_bringup/scripts
./install_for_noetic.sh
cd ~/catkin_make/src/waterplus_map_tools/scripts
./install_for_noetic.sh

这三个文件就是补全依赖的,运行对应版本的即可,ubuntu20.04,对应ros版本是neotic

2,安装好i之后就进行编译,必须在工作空间编译,工作空间是catkin_make文件下,不是src

复制代码
cd catkin_make
catkin_make
如果电脑卡死就使用
catkin_makke -j4
如果出现报错,可以多编译几次就可以了

3.编译好了之后需要载入工作空间目录,source之后才可以运行roslaunch对应的包

复制代码
source ~/catkin_make/devel/setup.bash

4.运行测试

复制代码
roslaunch wpr_simulation wpb_simple.launch

#命令行解析
roslaunch
roslaunch 是 ROS 提供的一个命令行工具,用于启动一个或多个 ROS 节点。它通常用于启动复杂的系统,这些系统由多个节点组成,并且这些节点之间存在依赖关系。roslaunch 会解析 .launch 文件中的配置,并按照指定的方式启动节点。
2. wpr_simulation
wpr_simulation 是一个 ROS 包的名称。ROS 包是 ROS 中的基本组织单元,包含节点、消息定义、服务定义、配置文件等。wpr_simulation 包可能是一个用于机器人仿真或测试的包,具体功能需要查看该包的文档或源代码。
3. wpb_simple.launch
wpb_simple.launch 是一个 .launch 文件的名称。.launch 文件是 XML 格式的配置文件,用于定义要启动的节点、参数、环境变量等。wpb_simple.launch 文件可能包含以下内容:

    节点启动:定义要启动的 ROS 节点及其参数。
    参数设置:设置节点运行时需要的参数。
    环境变量:设置节点运行时需要的环境变量。
    依赖关系:定义节点之间的依赖关系,确保它们按正确的顺序启动。

出现这个画面之后,就表示历程运行成功了

复制代码
rosrun rqt_robot_steering rqt_robot_steering

命令行解析
rosrun rqt_robot_steering rqt_robot_steering 命令用于启动 rqt_robot_steering 节点,这是一个 ROS 的图形用户界面(GUI)插件,允许你通过发布 Twist 消息来控制机器人的运动
。
参数解析
你可以通过以下参数来自定义 rqt_robot_steering 的行为:

    default_topic (字符串): 默认的发布 Twist 消息的主题名称,默认通常是 /cmd_vel。
    default_stamped (布尔值): 是否发布 Twist 或 TwistStamped 消息,默认是 False。
    default_vx_min (双精度浮点数): 垂直滑块的 X 方向最小线速度(单位:米/秒),默认值是 0.0。
    default_vx_max (双精度浮点数): 垂直滑块的 X 方向最大线速度(单位:米/秒),默认值是 1.0。
    default_vw_min (双精度浮点数): 水平滑块的 Z 轴最小角速度(单位:弧度/秒),默认值是 -1.0。
    default_vw_max (双精度浮点数): 水平滑块的 Z 轴最大角速度(单位:弧度/秒),默认值是 1.0。

运行那个指令可以发布控制指令,机器人就可以被控制了

5.把source工作目录添加到主文件目录,这样子就可以每次打开终端就不需要source了

复制代码
gedit ~/.bashrc
把下面这个放到文件最下面
source ~/catkin_make/devel/setup.bash

这样子就完成了

6.安装hector_mapping算法包

复制代码
sudo apt-get install ros-noetic-hector-slam

7.运行slam建图到wpr中去

复制代码
roslaunch wpr_simulation wpb_stage_slam.launch

在这里有很多launch文件,不同的launch文件都有不同的功能,也可以自己编写launch文件来自定义功能

8:新开一个终端

复制代码
rosrun hector_mapping hector_mapping

可以打开rviz软件包来查看建图效果

rosrun rviz rviz

刚刚打开rviz是空白的

点击左下角的add,点击robomodel,添加,并且添加laserscan

laserscan是雷达扫描,robomodel是机器人模型

这样子就可以是实现,gazebo的模型显示到rviz了

添加map地图,也是在add,然后选择Map,然后topic选择map话题即可,就可以显示地图了

rosrun rqt_robot_steering rqt_robot_steering

可以使用这个方法去实现控制建图

9.以上要运行四个指令,现在我们使用一个launch文件来把四个指令集成起来

复制代码
cd ~/catkin_make/src
catkin_create_pkg slam_pkg roscpp rospy std_msgs
#可以通过上面的那个指令来生成编译空间,类似一个模板

然后使用vscode生成一个launch文件

存放在对应目录

launch文件内容,可以借鉴下面的内容

复制代码
<launch>

  <include file="$(find wpr_simulation)/launch/wpb_stage_slam.launch"/>

  <node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" /> 

  <node pkg="rviz" type="rviz" name="rviz" args="-d $(find slam_pkg)/rviz/slam.rviz"/>

  <node pkg="rqt_robot_steering" type="rqt_robot_steering" name="rqt_robot_steering"/>



</launch>

然后就是编译这个软件包

复制代码
cd ~/catkin_make
catkin_make

然后就是运行测试

复制代码
roslaunch slam_pkg hector.launch

然后也是完成搭建好了

每次可能rviz打开都是空白的,每次都需要添加map,robomodel ,等等,可以在左上角打开save config 然后关闭之后,

rosrun rviz rviz -d ~/catkin_make/src/slam_pkg/rviz/slam.rviz

可以使用上面这个指令打开,配置好的rviz

10.跑gmapping算法

复制代码
roslaunch wpr_simulation wpb_corridor_gmapping.launch

gmapping和hector的算法区别就是在于,gmapping可以使用里程计来抵消点云匹配的误差,就比如,如果进入长直走廊,雷达点云匹配失效,就会导致建图中断,但是gmapping的解决办法在于,通过机器人的移动速度来计算移动位移,从而使用这个来判断机器人依旧在移动,这样就可以保证机器人被认定还在移动,hector的里程计只是作为rviz显示的一个补充,并没有在实际过程应用,gammping是使用实际过程来显示,所以在我的理解里面,gammpping比hector多了一个里程计修正,还有就是里程计不是单独的指通过知道速度就知道位移的这种方法,里程计是一个广阔的概念,只要是可以弥补单一slam算法的缺陷的,都可以称作里程计,就比如在一些雷达环境不适配的环境里面,可以使用视觉作为里程计来弥补雷达的误差,这时候就是摄像头视觉作为里程计来完成

11.保存地图和加载地图使用

复制代码
rosrun map_server map_saver -f map

最后那个map可以随便起,那是个名字,确保扫图完成

这样子就可以实现地图的保存了

怎么启动这个地图导航呢

复制代码
rosrun map_server map_server mymap.yaml

把mymap.yaml改成自己的地图保存的,名字即可

验证测试

复制代码
roscore
新开一个终端
rosrun map_server map_server map.yaml
新开一个终端
rosrun rviz rviz

然后在add添加map,然后勾选map话题

然后就实现了地图的读取和加载

12.导航的环境搭建和自动规划

使用的是move_base来进行路径规划

先创建工作目录

复制代码
catkin_create_pkg nav_pkg roscpp rospy move_base_msgs actionlib

然后使用vscode来生成launch文件,随后开始launch文件的编写

需要我们把

1,move_base导航节点,

2.map_server地图服务节点

3.acml定位节点,

这三个节点来写到launch文件里面,nav.launch文件的内容

复制代码
<launch>
    <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" />
    </node>

    <node name="map_server" pkg="map_server" type="map_server" args="$(find wpr_simulation)/maps/map.yaml"/>
   
   <node name="amcl" pkg="amcl" type="amcl"/>


<launch>

然后就是编译运行了

复制代码
cd ~/catkin_make
catkin_make

13,测试导航

首先运行仿真环境

复制代码
roslaunch wpr_simulation wpb_stage_robocup.launch

运行编写的节点

复制代码
roslaunch nav_pkg nav.launch

查看点云地图,并且赋予目标值

复制代码
rviz

然后就实现了对应的要求,这会有一个问题就是,当机器人起点和rviz显示的不一样的时候,需重新建一个地图

复制代码
roslaunch wpr_simulation wpb_gmapping.launch

rosrun wpr_simulation keyboard_vel_ctrl

分别建立俩个终端来实现,来建图,建好之后,可以在add添加path来显示路径

rosrun map_server map_saver -f map

即可保存

14.代价地图

代价地图:

  • global_costmap

    范围:整张地图

    用途:给全局规划器(A*、Dijkstra)算"大致路线"

    更新:几秒一次,偏静态

  • local_costmap

    范围:机器人周边 4×4 m 左右

    用途:给局部规划器(DWA、TEB)做实时避障

    更新:10-20 Hz,能发现突然冒出来的行人、箱子

首先运行仿真环境

复制代码
roslaunch wpr_simulation wpb_stage_robocup.launch

运行编写的节点

复制代码
roslaunch nav_pkg nav.launch

查看点云地图,并且赋予目标值

复制代码
rviz

查看代价地图就是add之后,添加map,然后话题选择globel那个,就是全局代价地图

然后再添加一个map,选择local那个就是局部代价地图

一直在更新的就是局部代价地图了

15.调参工具

复制代码
rosrun rqt_reconfigure rqt_reconfigure

很方便我们去修改参数

相关推荐
热爱编程的小白白2 小时前
IPIDEA海外代理助力-Youtube视频AI领域选题数据获取实践
人工智能·音视频
高洁012 小时前
面向强化学习的状态空间建模:RSSM的介绍和PyTorch实现(3)
人工智能·python·深度学习·神经网络·transformer
apocalypsx3 小时前
深度学习-深度卷积神经网络AlexNet
人工智能·深度学习·cnn
leafff1233 小时前
一文了解LLM应用架构:从Prompt到Multi-Agent
人工智能·架构·prompt
橘颂TA3 小时前
机器人+工业领域=?
算法·机器人
无风听海4 小时前
神经网络之特征值与特征向量
人工智能·深度学习·神经网络
艾莉丝努力练剑4 小时前
【C++:红黑树】深入理解红黑树的平衡之道:从原理、变色、旋转到完整实现代码
大数据·开发语言·c++·人工智能·红黑树
九章云极AladdinEdu4 小时前
论文分享 | BARD-GS:基于高斯泼溅的模糊感知动态场景重建
人工智能·新视角合成·动态场景重建·运动模糊处理·3d高斯泼溅·模糊感知建模·真实世界数据集
希露菲叶特格雷拉特4 小时前
PyTorch深度学习笔记(二十)(模型验证测试)
人工智能·pytorch·笔记