ROS探索总结(五十一)——ROS机器人实例 (HRMRP)

14080
20
2018年5月1日 18时21分

HRMRP(Hybrid Real-time Mobile Robot Platform,混合实时移动机器人平台)是笔者在2012年和实验室的小伙伴们一起从零开始设计、开发的一款机器人平台,其中大部分扩展电路、驱动和ROS相关的底层功能都是我们自己开发。该机器人平台具有软硬件可编程、灵活性强、模块化、易扩展、实时性强等特点,机器人的整体结构如下图所示。

v2-5f7cb0ada206c75b8820610fc9d70e81_hd

HRMRP具备丰富的传感器和执行器,在该平台的基础上,可以现了机器人SLAM、自主导航、人脸识别、机械臂控制等功能。

 

总体架构设计

HRMRP的总体架构如下图所示。

v2-bf4eafb5f6b25f609ec89cf4e04d56bd_hd

1. 硬件层

(1)机械平台

HRMRP主体结构为铝合金材质,尺寸为316mm ×313mm ×342mm(高×宽×长),装配两个驱动轮与一个万向轮。驱动轮由两个30W的直流电机带动,转速可达83转/分钟,机器人最快速度1.5m/s。HRMRP还装有一个六自由度机械臂,可以完成三维空间内的夹取操作。

(2) 控制平台

嵌入式系统具备小型化、低功耗、低成本、高灵活性等显著的特点,电子技术的发展也促使可编程门阵列FPGA在嵌入式系统中得到了越来越广泛的应用,很大程度上改善了嵌入式系统硬件的灵活度与繁琐计算的实时化。

HRMRP的控制平台即基于Xilinx最新一代集成FPGA与ARM的SoC——Zynq。

v2-abf41647865d70878a99c96d7f150ff5_hd

Zynq由处理系统(Processor System,PS)与可编程逻辑(Programmable Logic,PL)两部分组成。其中PS基于ARM Cortex-A9双核处理器构建,包含常用的外设接口,例如网络、USB、内存控制器等。而PL由Xilinx的7系列FPGA构成,支持动态重配置,可以使用Verilog语言编程。

在HRMRP中,PS通过操作系统控制所有功能正常有序的实现,而PL作为协处理器,一方面可以对复杂运算做并行加速处理,另一方面可以进行I/O接口扩展,为多传感器和执行器设计统一的接口,提高系统硬件配置的灵活性。

(3) 传感器系统

在机器人核心传感器的选择上,HRMRP使用了高性价比、高集成度的微软Kinect 传感器。除此还装配有超声波、加速度、里程计、陀螺仪等多种传感器,确保机器人平台可以采集到丰富的传感信息。

 

2. 驱动层

驱动层的主要工作是采集或预处理硬件层的数据,下发操作系统层的指令,为底层硬件与上层功能模块提供相应的数据传输通道。由于我们采用“ARM+FPGA”异构控制平台,为配合硬件层功能,驱动层也分为两部分,分别放置于硬件的PS端和PL端。

PS端主要驱动连接到ARM处理器的外设,例如通过PS中的OpenNI驱动Kinect,并且提供PL端到PS端的接口。而在PL端中,利用可编程硬件的灵活性和并行处理能力,进行I/O扩展与算法的硬件加速,如下图所示。

v2-4d7903c3afdc0a393c6146dea3584093_hd

在I/O扩展方面,传统的设计实现中,种类繁多的传感器、执行器对接口的要求各不相同,会占用大量I/O资源,增加处理器的负担。而在HRMRP的ARM+FPGA系统当中,通过定义一组标准的硬件接口,连接传感器和电机等外设,可使用编程逻辑取代繁杂的电路连接工作,满足各种不同需求的硬件外设。

在硬件加速方面,一般来说PS端适合常用接口的驱动、网络数据的处理等功能,而PL端适合于规律性的算法处理,在HRMRP中主要负责Kinect的数据预处理工作(这里我们将OpenNI中的部分代码放入FPGA中进行加速)。PS与PL相互配合,提高了系统数据处理的实时性。

 

3. 操作系统层

操作系统层是机器人平台的控制核心,集成了机器人的功能模块,负责行为控制、 数据上传、指令解析、人机交互等功能。为与ROS通信接口保持一致,使用Ubuntu作为操作系统,运行于Zynq的PS端ARM处理器之中。

ROS为用户的不同需求提供了大小和功能不同的多种安装包,为了减少ARM端的执行压力,HRMRP编译移植了仅包括ROS基本通信机制的核心库。继承了ROS的优势,机器人平台具备ROS通信以及功能包运行的能力,与上层网络指令无缝连接,结合开源软件库,极大地丰富了机器人的功能模块与应用范围。

HRMRP是一种较为典型的高性能、低成本机器人平台。与现在研究和应用中使用较为广泛的TurtleBot、Pioneer等机器人相比,HRMRP具有相似的结构与尺寸,同样可以完成多种多样的机器人应用;但是在接口的可扩展性、传感器的丰富度以及成本控制等方面,具备更好的综合性能。

 

SLAM与导航

在以上架构的基础上实现每个模块的具体功能,系统运行状态下的数据流图如下图所示。

v2-b0c051d8818beca0dff52a9fcdd07367_hd

HRMRP在室内环境下的SLAM建图效果如下图所示。

v2-39d94942f73e023487f3fe777346425d_hd

基于SLAM建立的地图完成导航的效果如下图所示。v2-1a6bd3b3162184890f65a1d39169e2f3_hd

 

多机器人扩展

ROS作为一个分布式框架,从微观的角度讲,分布式体现在节点的布局和配置上,而从宏观的角度讲,这种分布式可以体现在多机器人、多主机集成的系统当中。在HRMRP机器人的基础上,我们试图提出一种多机器人实现的框架,如下图所示。

v2-cae881cfad42bd58fc81bc11319f9751_hd

由于机器人架构多种多样,处理应用的能力也各不相同,在不同场合下的需求也有差异,我们设计了服务器层来提高机器人应用的计算能力,负责调度、分配多机器人应用中的任务,同时为用户提供友好、易用的人机交互界面。

分布的机器人节点与服务器都采用ROS框架设计,使用无线网络通信,可以快速集成ROS社区中丰富的应用功能。在多机器人系统当中,通过机器人之间的信息共享和与任务协作,可以让每个机器人在充分发挥自己能力的同时,获得更多额外的应用潜力。

机器人节点是应用的执行者与信息的采集者。在该系统中可以集成多种采用ROS框架的机器人,这里以HRMRP机器人平台为例,针对多机器人的框架也进行了测试,除HRMRP机器人之外,还使用树莓派制作了一个简单的小型机器人。

在实验中,HRMRP机器人在地图上自主导航前进,服务器负责应用的处理与显示,同时将HRMRP的位置信息转发给树莓派机器人;树莓派机器人收到信息后,紧跟HRMRP,效果如下图所示。

v2-b58ffb446759ba3a5882fdb87f8a0ba0_hd

 

ROS探索总结(五十一)——ROS机器人实例 (HRMRP)插图(9)CaptureROS探索总结(五十一)——ROS机器人实例 (HRMRP)插图(11)

发表评论

后才能评论

评论列表(20条)

  • Q 2019年8月28日 上午11:30

    古月老师,关于调度和任务分配、人机接口这一块,是否有对应的教程进行ROS实现呢?这一方面的资料本人还是搜集地不够。能否实现从多个行为(封装好的状态机)中进行相互切换呢?

  • 章昕亮 2019年3月15日 下午9:31

    古月大神,能不能把这节的多个机器人扩展内容详细解释一下

    • 古月 回复 章昕亮 2019年3月16日 下午9:51

      可以参考我的硕士毕业论文:《基于ROS的云机器人平台设计与实现》

  • 叮叮 2019年2月16日 下午2:27

    你好,古月师兄,想请教你一些问题,最近在做多机器人调度通信项目,过程中是将一个master作为主机,每个机器人的传感器信息,主题都发布到master上,由master分别再对每个机器人上的主题进行控制,但在运行的过程中,机器人会出现延迟的情况,有时走走停顿一下又走又停,是不是数据间通信问题??用的是ROS1,正好看到你的多机器人框架是在ros1的基础上搭建的,我想借鉴一下,请问这个框架能够解决通信问题吗?这个框架古月师兄是借鉴哪个资料的?在哪个源码上进行改进的?用到哪个框架源码上改进的?都具体怎么改的呢?哪个部分呢?望指教一下,不胜感激,最近通信延时的问题困扰了很久,谢谢!

    • 古月 回复 叮叮 2019年2月16日 下午5:00

      这个框架是我们自己设计的,实现过程中确实有遇到通信延时的问题,我们的做法是,一方面优化网络环境,一方面通过数据压缩减少数据量,并加入数据校验,应用场景可能不同,供参考

    • 叮叮 回复 古月 2019年2月18日 上午9:30

      这部分的源码可以分享给我一下吗?想看一下关于数据压缩减少数据量,并加入数据校验,以及优化网络环境,具体源码是怎样实现的?邮箱623921767@qq.com 谢谢!

  • 2018年11月27日 上午6:55

    你好,请问ps到pl的格式转换是如何实现的呢

    • 古月 回复 2018年11月27日 下午6:01

      什么格式?

    • 辉 回复 古月 2018年11月30日 下午3:49

      如何把ros采集到的数据送到FPGA呢?ros运行时接收的数据被存储在哪里?
      pl可以直接处理ros数据吗?
      谢谢回答!

    • 古月 回复 2018年12月1日 上午12:20

      ros运行在arm上,底层需要交互的数据通过AXI总线通信,pl不直接处理ros数据

  • xiangzhang 2018年9月27日 上午10:48

    古老师,你好,最近在研究机器人导航,我的机器人总是在转弯的时候先停顿一下再转弯,导致转弯不流畅,请问这跟加速度参数配置有关吗?该如何去配置

    • 古月 回复 xiangzhang 2018年9月28日 下午4:35

      这个可能跟本地规划器的规划算法有关系,也有可能和本地规划器的配置参数有关系,也有可能和机器人的本地控制关系,可以先针对参数配置的yaml文件做调整

  • 高鸿飞 2018年7月7日 下午8:35

    这个机器人销售么

  • 简之 2018年5月9日 上午10:13

    古月老师,我最近在研究机器人的导航,我用过amcl和movebase导航包,在网上了解到这个导航包用的算法是Dijkstra算法,请问在ROS中有没有其他的算法,或者有没有关于应用其他算法的教程之类的?

    • 简之 回复 简之 2018年5月9日 上午10:18

      另外,我想学习以下如何基于双目Vslam的地图和定位信息,而movebase里是基于激光雷达的,如何利用Vslam做路径和导航,希望能请教一下您经验

    • 古月 回复 简之 2018年5月15日 下午8:09

      你好,move_base还可以选用A*算法。另外也可以在google里找其他相关的算法,不过教程应该不多,要看相关的wiki或者别人的应用笔记。

  • 小峰峰 2018年5月9日 上午8:54

    古神,请问请问,怎么在gazebo中搭建道路公路模型??

    • 古月 回复 小峰峰 2018年5月9日 上午9:41

      这个要看gazebo官网的教程,或者使用solidworks建模导出

    • 小峰峰 回复 古月 2018年5月9日 下午12:24

      哦,谢谢,我看看