基于ROS的移动机器人多目标点导航的实现

  • 基于ROS的移动机器人多目标点导航的实现已关闭评论
  • 119 views
  • A+
所属分类:AGV设计资料
摘要

移动机器人的多目标点导航功能是机器人在执行配送与巡检等任务中不可或缺的功能之一,人们通常需要机器人能过依次序到达多个目标点。针对机器人的多目标点导航问题,对ROS(机器人操作系统)的自主导航功能包进行了研究,设计了基于ROS的移动平台,并在该平台上实现了机器人多目标点的自主导航功能。实验结果表明,在给定多个目标点之后,该移动机器人可以顺利的按照给定的目标信息进行依次自主导航。为机器人的多目标点自主导航提出了一套可行的方案。

0 引言

近几年人工智能与传感器技术的飞速发展为各行各业都带来了极大的改变,这也使得机器人的应用领域不断扩大。移动机器人是近年来研究的热点,现在大多数移动机器人必须沿着固定的轨迹运行,自主性不够强等缺点,满足不了高性能小型自主移动机器的需求。移动机器人的工作环境多有不确定性,会面临各种突发因素,这就使得自主移动机器人的开发难度大大提高。为了降低机器人系统的开发难度,避免科研人员重复“造轮子”,ROS(机器人操作系统)应运而生。

在2007年,斯坦福大学与机器人技术公司Willow Garage进行了一次项目合作,ROS系统便诞生于这次的项目合作,由于其分布式的控制机制使得机器人系统的开发大大简化,在这之后ROS便被机器人领域的众多研究人员所熟知句。

在工业应用中,人们通常希望机器人能够代替劳动者在生产一线的各个工位之间,自主的搬运各种产品零件,这就需要移动机器人能够在固定的多个目标点进行依次自主导航,完成相应的运输任务。本文基于ROS已有模块,设计了一个两轮差速移动平台,并在此基础上实现了移动机器人多目标点的顺序导航。实验结果表明,该移动平台可以顺利的按照事先给定的目标点依次进行自主导航。

1 ROS简介

1.1 ROS主要特点

ROS运行时是由多个松耦合的进程组成,这些进程称之为节点(Node),每个节点独立运行,又与其他相关节点进行通讯。所有节点可以运行在一个处理器上,也可以在不同处理器上分布运行。在实际使用时,开发者可以直接调用包含有这些节点的包,不必再从最底层的程序开始写起,因此这种模块化的设计可以大大提高开发效率。

ROS支持多种开发语言,不同的节点可以采用不同的语言进行编写,在ROS中最常见的语言有C++、python等。由于各个节点模块的独立性与开源性,这使得所有ROS使用者都可以将自己编写的功能包进行共享。所以,当我们为了实现机器人的某些功能时,就不必每次都从最底层做起,一些机器人的基本功能都可已使用ROS已有的程序包来实现问。

ROS还为用户提供了一种可视化工具—rviz。rviz是一种可扩展化的视图工具,可以使用这种插件机制来扩展丰富的功能,进行二次开发[。在这里,我们可以通过设置footprint的大小来规定机器人的的最大边界,通过rviz,我们还可以实时观测到机器人在地图中的位置,激光雷达反馈的信息,每一时刻的速度方向,以及上位机对导航路径的规划情况等。

2 移动平台硬件系统设计

2.1 移动平台结构设计
基于ROS的移动机器人多目标点导航的实现

如图1为移动平台实物照片。整车的尺寸为400mmX400mmX250mm,机身两侧各有一个驱动轮,前后各有一个万向从动轮,整个平台采用两轮差分式移动机构,在运行过程中可以实现移动平稳,转动灵活的效果。

基于ROS的移动机器人多目标点导航的实现

图2为该移动平台的硬件框图。该移动平台的硬件控制系统可分为上位机和下位机两部分,上位机由车载MiniPC、远程控制端PC、无线路由器组成;下位机由STM32F103开发板、带编码器的直流减速电机、驱动器、激光雷达组成。整车的动力由24V锂电池提供。

车载MiniPC采用的是占美微型电脑,板载Intel第五代Broadwel1架构,酷睿双核四线程i7-5550u14NM处理器,主频2.0GHz,8G内存,128G SSD固态硬盘,电源采用12V-5A适配器,具有体积小,价格低,性能高,接口丰富等特点。作为上位机,其运算速度足以满足实时对下位机反馈的信息进行处理,并对未来路径作出规划。

编码器采用的是500线AB两相增量式编码器,驱动器采用的是160W双路直流电机驱动模块,激光雷达是HOKUYO公司的URG-04LX-UG01二维激光雷达,用于反馈周围环境信息给上位机。远程控制端PC通过路由器登录到车载MiniPC,将目标信息发送给车载MiniPC,上位机的车载MiniPC里装有机器人操作系统ROS,它的主要作用是接收下位机反馈的里程计信息与激光雷达信息,并依此计算出机器人目前的位置与姿态信息,同时按照当前的位姿与目标导航点计算出下一步的路径规划信息,最终换算成控制点的速度与角速度,再反馈给下位机。

下位机在接收到上位机的速度与角速度信息之后将其换算成最终驱动电机的PWM值,同时将读取到的编码器信息解算成控制点的速度与角速度再发送给上位机。

3 移动平台软件系统设计

3.1 运动学模型建立
基于ROS的移动机器人多目标点导航的实现

如图3,即为当前移动平台的运动学模型,V、W为两轮轴线中心位置的速度与角速度,V、V为左右两轮的转速。L为两轮的间距长度。假设两轮在地面上做纯滚动运动。则左右轮的速度与运动中心的速度与角速度的关系如下:

基于ROS的移动机器人多目标点导航的实现
3.2 下位机软件部分设计

下位机作为整个机器人系统的最终执行部分,它的主控程序被写入到STM32F103开发板中。如图4是下位机控制程序的流程图。在程序开始运行之后,首先是对与上位机通讯的串口进行初始化,之后初始化TIME4和TIME5定时器的编码器模式。本设计中的编码器采用的是500线AB相增量式编码器,电机本身的减速比是1:27,所以电机输出轴每转动一周会产生500×27x4=54000个上升下降沿脉冲信号。通过读取这些脉冲信号,便可以经过换算得到最终车轮的转速。接下来是对TIME3的PWM模式进行初始化,使其能够产生不同PWM波从而驱动电机以不同的转速转动。

系统初始化完成之后便开始接收上位机发送来的速度与角速度信息,再根据公式1得到两个驱动电机应有的转速。最终通过PID控制算法实时对车轮速度进行调整,以达到期望的转速,与此同时,还将读取到的机器人速度与角速度信息反馈给上位机。

基于ROS的移动机器人多目标点导航的实现
3.3 上位机软件部分设计

车载MiniPC与远程控制PC端都安装有的Ubuntul4.04操作系统,其支持indigo版本ROS。

安装好完整的ROS后,我们可以直接采用ROS自带的功能包来构建机器人的上位机软件部分,也可以从开源网络社区获取我们所需要的功能包图。

在ROS中实现导航,主要需要使用到三个程序包:move_base、amcl、gmapping。move _base包在接受下位机反馈的各种环境信息与自身的运动信息后,可以根据这些信息指导机器人进行下一步的导航路径规划,使机器人移动到指定位置;amcl包主要是根据已有的地图进行自主定位与导航;gmapping:可以根据激光数据反馈的环境信息建立地图。在本设计中的导航前提是一直地图进行导航,所以我们只用到前两个程序包。

整个导航包的结构如图5。激光雷达与里程计信息经过tf坐标变换之后传递给move base包,这是因为各个传感器的安装位置不一定处于移动机器人的控制中心,经过坐标变换后的信息对于机器人的控制点才是有用的。Map_saver为机器人提供导航地图信息。Move base在接受到这些所有信息之后根据目标点信息作出路径规划,再通过basecontroller转换成具体的速度与角速度信息,并且将该信息发布给下位机。

基于ROS的移动机器人多目标点导航的实现

对于多个目标点的导航,需要将导航目标点的信息在一次导航结束之后,自动发布给move_base。在本设计中,采用Python语言编写了一个程序用于存储目标点的信息,并用rosrun命令来运行它。如图6为该程序的流程图。在程序一开始,用户将所有目标点的位置信息与航向四元数信息输入程序。位置信息指的是目标点的坐标,航向四元数信息指的是机器人在目标点车头朝向的方向。在这里给定一个欧拉旋转(X1,Y1,Z1)(即分别绕x轴、y轴和z轴旋转X、Y、Z度),则对应的四元数q为:

基于ROS的移动机器人多目标点导航的实现

配置好目标点的导航信息后,程序开始等待订阅move_base信息,延时60秒之后若还没有连接上,则在远程控制PC终端向用户显示“can not connect tomove base!”,如成功连接到,则开始等待用户给定机器人初始位姿信息,获得初始位姿信息之后,机器人便开始前往之前设定好的第i个目标点,与此同时,程序开始通过计算下位机反馈的里程计信息,实时判断是否到达目标点,在这里我们可以在ROS里设置目标点的范围,防止机器人在目标点周围发送一直抖动的现象。当机器人成功到达目标点的范围之内,远程控制PC终端会显示“Goal succeeded!”机器人则在5秒之后向下一个导航点出发。

基于ROS的移动机器人多目标点导航的实现

4 实地导航实验

在实验开始之前,我们需要将车载MiniPC与远程控制PC都连接上同一个WiFi,在远程控制PC上打开一个终端,通过ssh命令登录上车载MiniPC,启动控制机器人的所有相关节点;然后使用watch命令每3秒调用一次move base node/clear costmap服务,对局部地图进行每3秒一次的刷新。为了实现多目标点的连续导航,我们需要在终端输入如下命令,开始运行我们已经设定好的导航目标。

rosrun multinav nav.py;

multinav为我们为多点导航新建的程序包名,nav.py为多点导航的源程序名。

接下需要打开rviz,输入机器人当前点的姿态。

之后机器人便可以开始按照程序里给定的目标点依次序进行导航。

在远程控制PC端打开rviz界面,输入机器人走始点信息,给定目标点,机器人即可开始自主导航。

图7为机器人在导航过程中,远程控制终端显示的当前目标信息。本次导航总共选取了4个目标点,图8中的机器人正在由第三个点向第四个点出发。

基于ROS的移动机器人多目标点导航的实现

5 结语

本文针对机器人的多目标点导航问题,设计了基于ROS的移动平台,并在该平台上实现了机器人多目标点的自主导航功能。该移动平台的控制系统主要由上位机和下位机组成,下位机是基于STM32F103开发板设计的,其主要功能是为了接收上位机发送的的机器人的速度与角速度信息,并将其换算成电机的速度信息,驱动底层电机转动,与此同时还向上位机反馈底层的电机速度信息;上位机的主要功能是接收底层反馈的机器人实时信息,将其换算成机器人当前的位姿信息,并为下一步的机器人导航动作作出规划,实时的发送给至下位机。为了实现机器人多目标点的导航,将所有目标点的信息都写入ROS的一个程序包里,在导航开始之前,调用这个程序包即可。实验结果表明,在给定多个目标点之后,该移动机器人可以顺利的按照给定的多个目标信息依次进行自主导航。为机器人的多目标点自主导航提出了一套可行的方案。

抱歉,此资源仅限赞助会员下载,请先
注意:本站资源多为网络收集,如涉及版权问题请及时与站长联系QQ:2766242327,我们会在第一时间内与您协商解决。如非特殊说明,本站所有资源解压密码均为:agvba.com。
weinxin
微信公众号
agvba是一个分享AGV知识和agv案例视频的网站。