一:什么是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,讲的超好。