感谢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

很方便我们去修改参数