移动小车导航slam建图

目录

2 ROS系统的安装以及环境搭建

3 移动小车的建图算法介绍

4 建图结果展示及分析

2 ROS系统的安装以及环境搭建

Ubuntu 18.04版本是ROS(Robot Operating System)的广泛支持的操作系统之一。ROS是一个用于编写机器人软件的灵活框架,它集成了大量的工具、库、协议,提供了类似操作系统所提供的功能,包括硬件抽象描述、底层驱动程序管理、公用功能的执行、程序间的消息传递、程序发行包管理,可以极大简化繁杂多样的机器人平台下的复杂任务创建与稳定行为控制。ROS和Ubuntu版本安装对应关系如图2-1所示。

图2-1 版本对应关系

本文系统为Ubuntu18.04版本对应ROS版本为Melodic。ROS的安装方法主要有两种:软件源安装和源码编译安装。软件源(Repository)为系统提供一个庞大的应用程序仓库,只要通过简单的命令即可从仓库中找到需要的软件并完成下载安装。相反,源码编译的方法相当复杂,需要手动解决繁杂的软件依赖关系,所以本文这里采用软件源的安装方式。

首先进行系统软件源的配置,如图2-2添加阿里云的软件下载源。

图2-2 软件源配置

首先更新可用软件包列表,之后输入如下图2-3指令进行安装,这个命令将安装完整的ROS软件,包括ROS,rqt,rviz,机器人通用库,2D / 3D模拟器,导航和2D / 3D感知等等的全套基础组件。

图2-3 安装命令行

安装完毕后下载其他功能组件,这些组件可以构建和管理开发者自己的ROS工作空间,全部下载完毕后对rosdep init 初始化。指令如图2-4。

图2-4 安装功能组件

安装完成后为系统添加环境变量,否则系统bash里找不到路径无法正常运行,输入如图2-5以下指令:

图2-5 添加环境变量

之后就可以检查安装结果运行小海龟首先打开一个终端输入roscore,在终端成功输入roscore后,开启第二个终端输入rosrun turtlesim turtlesim_node会出现一个小海龟,最后开启第三个终端输入rosrun turtlesim turtle_teleop_key 接下来就可以通过方向键控制海龟的移动。最终结果如图2-6。

图2-6 ros小乌龟

2.2 搭建移动小车

首先创建一个工作空间,新建三个文件夹分别用来存放launch文件。小车模型文件以及地图文件指令如下图2-7。

图2-7 创建工作空间

在成功创建工作空间之后,我们可以开始构建自己的地图模型,并在Gazebo仿真环境中进行展示。首先,我们可以利用Gazebo提供的各种模型资源,如墙壁、家具等,来搭建具有现实感的地图模型。这些模型资源可以通过在Gazebo中进行拖放和调整,灵活地构建出我们所需的环境。可以使用Gazebo提供的绘图工具来绘制自定义的地图模型。通过绘制地图的边界、房间布局、家具摆放等,可以创建出独具特色的地图场景。绘制完成后,可以将地图保存到.world文件夹中,以便在需要时随时加载和使用。场景绘制成功后如图2-8。

图2-8 场景绘制图

完成地图绘制后,开始为小车模型编写launch文件。小车模型有两种常见的形式,一种是使用URDF(Unified Robot Description Format)描述的,另一种是使用Xacro(XML Macros)描述的。本文选择创建了一个使用URDF类型的小车模型。

首先,建立小车模型的URDF文件。URDF文件是一种XML格式的文件,用于描述机器人的几何形状、关节、传感器等信息。通过定义小车模型的几何形状和连接关系,精确地表示小车的外观和结构。

在创建了小车模型的URDF文件后,编写与摄像头和激光雷达相关的文件。这些文件描述了摄像头和激光雷达的参数、位置和方向等信息。在这些文件中,我们可以设置摄像头和激光雷达的视野范围、分辨率、扫描角度等参数,以确保它们与实际传感器相匹配。建立小车模型的urdf文件后在编写摄像头和雷达的文件如图2-9。

图2-9 模型文件

完成了小车模型的URDF文件和与摄像头、激光雷达相关的文件的编写后,我们可以在launch文件中将它们进行组合。launch文件是ROS中的一个配置文件,用于启动和配置ROS节点和功能。通过编写launch文件,我们可以加载小车模型、摄像头和激光雷达,并指定它们之间的关联关系和参数配置。最后结果如图2-10所示。

图2-10 launch文件

3 移动小车的建图算法介绍

3.1二维建图基本原理

Gmapping是一个基于2D激光雷达使用RBPF(Rao-Blackwellized Particle Filters)算法完成二维栅格地图构建的SLAM算法。gmapping可以实时构建室内环境地图,在小场景中计算量少,且地图精度较高,对激光雷达扫描频率要求较低。其完整程序框架如图3-1所示。

图3-1 流程框架

二维建图的主要步骤分为两步来做先定位后建图,算法实现步骤:

(1)初始化地图:算法开始时,创建一个空的二维概率栅格地图(probabilistic grid map),地图中的每个栅格表示一个小区域。栅格中的值表示该区域的占据概率(occupancy probability)。

(2)激光雷达数据处理:算法接收来自激光雷达传感器的扫描数据。这些扫描数据包含了机器人周围环境的障碍物信息。

(3)运动模型更新:算法使用机器人的运动信息,例如里程计数据,来预测机器人在当前时刻的位置和方向。这些预测作为后续步骤的基础。

(4)重采样:根据机器人的运动预测和激光雷达数据,对当前的粒子集合进行重采样。重采样是为了筛选出与实际情况更符合的粒子,并且减少粒子集合的数量。

(5)激光雷达匹配:使用重采样后的粒子集合,将激光雷达扫描数据与地图进行匹配。通过比较激光束在地图上的期望位置和实际观测到的位置,计算每个粒子的权重。权重表示该粒子代表的位置和地图之间的匹配程度。

(6)地图更新:根据激光雷达匹配的结果,更新地图中每个栅格的占据概率。如果激光雷达的扫描结果与地图中的障碍物栅格相符,则增加栅格的占据概率。如果扫描结果与地图中的自由空间栅格相符,则减少栅格的占据概率。

(7)重复步骤2至步骤6:重复执行步骤2至步骤6,以连续处理激光雷达数据,并更新地图。

通过反复执行上述步骤,Gmapping算法能够建立一个准确表示机器人周围环境的二维地图。这个地图可以用于导航、路径规划和避障等机器人任务。值得注意的是,Gmapping算法是一种增量式算法,可以随着时间的推移不断更新地图,以反映环境的变化。

3.2运动控制算法

DWA算法(dynamic window approach)是移动机器人在运动模型下推算(v,w)对应的轨迹,确定速度采样空间或者说是动态窗口(三种限制);在速度空间(v,w)中采样多组速度,并模拟这些速度在一定时间内的运动轨迹,通过一个评价函数对这些轨迹打分,选取最优的轨迹来驱动机器人运动。

在动态窗口算法中,要模拟机器人的轨迹,需要知道机器人的运动模型。它采用的是假设两轮移动机器人的轨迹是一段一段的圆弧或者直线(旋转速度为 0时),一对(vt,wt)就代表一个圆弧轨迹。具体推导如下:

非全向运动时,机器人只能前进和旋转:

                    x = x + v \Delta t \cos(\theta_t)  

                     y = y + v \Delta t \sin(\theta_t)

                        \theta_t = \theta_t + w \Delta t

图 3‑2  非全向运动图示

全向运动时,拥有y轴速度:

        

     

此时需要将所推演的y轴移动的距离叠加到之前计算的公式即可:

               

                θt=θt+w∆t

2.速度采样:

受自身最大最小速度影响:

  

受电机性能影响:

为了安全考虑:在能碰到碰撞物的前停下,速度需要有一个范围:

 

3.目标函数:

一般考虑三种约束,可根据实际进行设计复杂的目标函数:目标函数 = w1* 方位角函数(轨迹终点朝向与目标点之间的角度差距) + w2* 障碍物函数(轨迹终点位置时与地图上最近障碍物的距离) + w3* 线速度函数(鼓励快速到达终点)

4 建图结果展示及分析

为了完成建图任务,首先需要加载机器人的建模文件。建模文件描述了机器人的外观、尺寸和传感器配置等信息。一种常见的方式是使用ROS(Robot Operating System)框架,通过调用相应的ROS包来加载建模文件。

一旦建模文件加载完成,可以使用rviz工具将机器人可视化,如图4-1所示,以便实时观察机器人的外观和姿态。rviz提供了一个图形界面,可以显示机器人、传感器数据、地图等信息。这个可视化过程有助于调试和验证机器人的建模是否正确。

接下来,将加载好的机器人模型加载到gazebo仿真环境中。Gazebo是一款广泛使用的开源机器人仿真软件,它可以模拟机器人在虚拟世界中的运动和感知。将机器人加载到gazebo中可以提供更加真实的仿真环境,以进行更准确的建图操作。在加载到gazebo世界中后,需要打开所建的地图。这可以通过使用地图服务器节点实现,地图服务器节点可以读取和提供保存的地图数据。通过加载地图,机器人可以了解环境的拓扑结构,包括障碍物位置和自由空间,模型和地图如图4-2。

图4-2 整体图

最后,使用节点控制小车移动,并利用激光雷达传感器进行建图工作。节点是ROS中的一个基本概念,它可以实现特定功能的代码单元。通过编写节点代码,可以控制小车的运动,包括前进、后退、转向等操作。同时,激光雷达传感器可以扫描环境,获取障碍物信息,并结合机器人的运动轨迹,将这些数据用于建立地图,最终完成slam建图其效果如图4-3。

图4-3 slam建图结果

综上所述,在建图过程中,首先加载机器人建模文件并利用rviz可视化,然后将机器人加载到gazebo仿真环境中,并打开所建的地图。最后,通过节点控制小车移动,并利用激光雷达传感器进行建图工作,以获取环境的地图数据。这样的流程可以帮助机器人在未知环境中进行自主建图和导航。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值