一篇文章读懂大象机器人myAGV如何实现建图导航!

myAGV 大象首款移动机器人,采用竞赛级麦克纳姆轮,全包裹金属车架;ROS开发平台内置两种slam算法,满足建图、导航方向的学习;提供丰富的扩展接口,可搭载my系列机械臂,实现移动抓取,完成更多应用。

45450cf2fdc4272e7c216cbabca44969.jpeg

1、工业级高品质外观

1.1麦克纳姆轮:

麦克纳姆轮的搭载,能够让myAGV进行全向运动,可以实现横向运动,做到原地转圈运动,向目的地前进的时候能够省去很多不必要的路径。

1.2可拆卸

带有金属框架的全包裹式设计使 myAGV 更加紧凑和坚固。内置树莓派4B和分体式结构,能够自主拆卸,能在外形/主板上自行设计创作出属于自己独一无二的小车

2、强大建图导航功能

2.1实时建图

目前myAGV使用中需要进行SLAM建图,因为移动机器人想要实现自主行走,核心在于实现自主定位导航,在自主定位技术导航中会涉及到定位、建图、路径规划等问题,而地图构建的好坏将直接影响myAGV的行走路径。

myAGV想要到达某个目的地,需要和人类绘制地图一样,描述环境、认识环境的过程主要就是依靠地图。下面对myAGV小车使用的两种建图算法进行介绍。

dbfa79ff45d11dba0b68192b412a98a0.jpeg

2.1.1 gmapping算法

GMapping是一种高效的粒子滤波器,是一个基于2D激光雷达使用RBPF(Rao-Blackwellized Particle Filters)算法完成二维栅格地图构建的SLAM算法。Gmapping可以实时构建室内地图,在构建小场景地图所需的计算量较小且精度较高。

操作:

先将小车放置在需要建图环境中的一个合适起始点位上,因为开启launch文件将会开启小车的IMU传感器及odom里程计,人为的移动小车将造成小车建图失真。

先打开SLAM扫描文件

运行命令:

cd myagv_ros

source ./devel/setup.bash

roslaunch myagv_odometry myagv_active.launch

a7222d4996b5d02932495cb41853b6b5.jpeg

然后打开gmapping建图文件,操控小车在所需要的空间里行走一圈

运行命令

roslaunch myagv_navigation myagv_slam_laser.launch

ec94a763170c5fbb0e8b59f9b48b8fe4.jpeg

看到图像中建立出所需要的空间的时候就可以保存地图了

运行命令保存建出的地图:

rosrun map_server map_saver

2.1.2cartographer算法

cartographer是一套基于图优化的SLAM算法。

cartographer算法主要运用了Submap这一概念,每当或得一次laser scan的数据后,便与当前最近建立的Submap去进行匹配,使这一帧的laser scan数据插入到Submap上最优的位置。在不断插入新数据帧的同时该Submap也得到了更新。

一定量的数据组合成为一个Submap,当不再有新的scan插入到Submap时,就认为这个submap已经创建完成,接着会去创建下一个submap,具体过程如下图。

44efd5b4e882038269b1ed7d6cd430a1.jpeg

图来自csdn

所有创建完成的submap以及当前的laser scan都会用作回环检测的scan matching。如果当前的scan和所有已创建完成的submap在距离上足够近,则进行回环检测。完成回环检测后完成建图。

(Submap :子图,将一小块区域雷达扫描的范围(scan)形成一张子图)

cartographer算法建图的过程跟gmapping算法建图的过程一样,先是打开雷达,再开启cartographer算法文件,去操控小车在所要建立的区域中行走,完成建图。

f6564f5778ee867ecc65b953f1ae8e2a.jpeg

很多人可能都会有疑惑,建图明明一种算法就好了,为什么要介绍两种建图的算法呢?

我们来比较一下两种算法就能解决这个疑惑了。

Gmapping可以实时构建室内地图,在构建小场景地图所需的计算量较小且精度较高。 而相比Cartographer在构建小场景地图时,Gmapping不需要太多的粒子并且没有回环检测,因此计算量小于Cartographer,而精度并没有差太多。

在构建小场景地图的时候,gmapping和cartographer相比,前者不仅速度快也能够建造高精度的地图,而在地图的扩大gmapping需要的粒子数量多了容易把内存撑爆。而后者恰好可以解决地图扩大的问题,建图的效果还能够非常好(上图处在同一地形的建图)。

8d398a7810102a0c3716e9bfd577dacb.jpeg

2.2地图导航

上一步在我们建好的地图中,我们可以让小车在地图里自动导航到某一个目的地。这都源于ROS的navigation功能包。

navigation中的move_base:

4953a6a72f42b07c715728e4c690b70b.jpeg
图来自csdn

global planner:

根据给定的目标位置进行总体路径的规划.

在ROS的导航中,首先会通过全局路径规划,计算出机器人到目标位置的全局路线。这一功能是navfn这个包实现的。navfn通过Dijkstra最优路径的算法,计算costmap上的最小花费路径,作为机器人的全局路线。

local planner:

据附近的障碍物进行躲避路线规划。

本地的实时规划是利用base_local_planner包实现的。该包使用Trajectory Rollout 和Dynamic Window approaches算法计算机器人每个周期内应该行驶的速度和角度(dx,dy,dtheta velocities)。

base_local_planner这个包通过地图数据,通过算法搜索到达目标的多条路经,利用一些评价标准(是否会撞击障碍物,所需要的时间等等)选取最优的路径,并且计算所需要的实时速度和角度。

接下来介绍一下我们复现的过程:

一开始我们得确定myagv的位置,用到了ros中的acml去定位。(在地图中确定myagv所在的位置)

b51a1044b6f87e65ca8c74582ee2e870.jpeg

( 白色:myAGV ;红色点点:小车现在位置扫描出的激光点云蓝色:是激光雷达局部地图膨胀生成的膨胀地图 ;绿色:是姿态数组 手动定位的时候绿色会进行收敛 直至团状 )

原地转几圈完成定位后就可以开始进行自动导航了。

3dd94c0d5aea89187ba5f58c2bfb1538.jpeg

当我们点击“2D Nav Goal”,再点击地图上我们想要到达的点位,小车便会向着目标点位出发,同时还可以在rviz中看到起点到目标点位间有一条小车的规划路径,小车会沿着路线运动到目标点位。

32a2d7bfb57365690701421774159b04.jpeg

2.3 PS2手柄控制

作为一个移动机器人怎能没有手柄控制呢!

我们开发了ps2手柄控制myAGV,这样myAGV就可以自由的运动,实现更多的可能。

下面是我们手柄控制的时序图提供一点思路给大家,能够手柄上做更多的开发。

38a50f19b1a1fe511744c18c7bcb27e8.jpeg

最后,如果你拥有这样一辆小车你会做些什么?在它分体式结构可拆卸的小车,你能够给它改装成什么样子的AGV,是给他的车上加上一些武器去作为一辆战斗车,还是改装成搭载各种各样的机器充满未来感?

感谢你们的观看,如果有什么好的意见请留言!

上面就是我们对小车的初步介绍,后续会介绍myAGV搭载我们my系列的机械臂。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值