ROS探索总结(十六)——HRMRP机器人的设计

  • 内容
  • 评论
  • 相关

1. HRMRP简介

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

      HRMRP具备丰富的传感器和执行器,在该平台的基础上,我们设计并实现了机器人SLAM、自主导航、人脸识别、机械臂控制等功能。在设计开发完成之初,我们参加了2013年的OpenHW大赛,并且获得了全国一等奖,此外还在中国智能机器人学术会议上发表学术论文一篇,获得了会议的十佳论文奖。这个机器人陪伴我走过了研究生的三年时光,接下来的几篇博客,我会详细介绍HRMRP从设计到实现方面的很多细节。就机器人的性能来讲,很多方面是超越已有同等级的很多机器人的,但是由于我们开发能力、时间的限制,并没有在最终的应用中充分发挥他的潜力,这也给我留下了一些遗憾。
      废话不多说,先让大家对该机器人有一个整体的印象:
      演示视频:OpenHW大赛机器人演示

2. HRMRP的总体架构


        如下图所示,我们根据层次化、模块化的思想,设计的HRMRP的总体架构。

3. 硬件层


3.1 机械平台 

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

3.2 控制平台 

       嵌入式系统具备小型化、低功耗、低成本、高灵活性等显著的特点, 电子技术的 发展,也促使可编程门阵列FPGA在嵌入式系统中 得到了越来越广泛的应用,很大程度上改善了嵌入式系统硬件的灵活度与繁琐计算的 实时化。 HRMRP的控制平台即基于 Xilinx 最新一代集成 FPGA 与 ARM 的片上系统 (System-on-Chip,SoC)——Zynq 
       Zynq 由处理系统(Processor System, PS)与可编程逻辑(Programmable Logic, PL)两部分组成。其中 PS 基于 ARM Cortex-A9 双核处理器构建,包含常用的外设接口,例如网络、 USB、内存控制器等。而 PL 由 Xilinx 的 7 系列 FPGA 构成,支持动 态重配置,可以使用 Verilog 语言编程使用。在HRMRP 中,PS通过操作系统控制所 有功能正常有序的实现,而 PL作为协处理器一方面可以对复杂的运算并行加速处理, 另一方面可以进行 I/O 接口扩展,为多传感器和执行器设计统一的接口,提高系统硬 件配置的灵活性。

3.3 传感器系统 

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

4. 驱动层


       驱动层的主要工作是采集或预处理硬件层的数据,下发操作系统层的指令,为底层硬件与上层功能模块提供相应的数据传输通道。由于我们采用的“ARM+FPGA”异构控制平台,为配合硬件层硬件功能,驱动层也分为两部分,分别放置于硬件的PS端和PL端。
       PS端主要驱动连接到ARM处理器的外设,例如通过PS中的OpenNI驱动 Kinect, 并且提供 PL 端到 PS 端的接口。而在PL端中,利用可编程硬件的灵活性和并行处理能力,来进行 I/O 扩展与算法的硬件加速, 如下图所示。

       在I/O 扩展方面,在传统的设计实现当中,由于种类繁多的传感器、 执行器对接口的要求各不相同,会占用大量 I/O 资源,增加处理器的负担。而在HRMRP的ARM+FPGA系统当中,通过定义一组标准的硬件接口, 连接传感器和电机等外设,可使用编程逻辑取代繁杂的电路连接工作,满足各种不同需求的硬件外设。
       在硬件加速方面,一般来说PS端适合常用接口的驱动、网络数据的处理等功能,而PL端适合于规律性的算法处理,在HRMRP中主要负责Kinect的数据预处理工作(这里我们将OpenNI中的部分代码放入FPGA中进行加速)。PS与PL相互配合,提高了系统数据处理的实时性。

5. 操作系统层


        操作系统层是机器人平台的控制核心,集成了机器人的功能模块,负责行为控制、 数据上传、指令解析、人机交互等功能。为与 ROS 通讯接口保持一致,使用Ubuntu12.04作为操作系统,运行于Zynq的PS端ARM处理器之中。ROS为用户的不同需求提供了大小和功能不同的多种安装包,为了减少ARM端的执行压力, HRMRP编译移植了仅包括 ROS 基本通讯机制的核心库。继承了ROS的优势,机器人平台具备ROS通讯以及功能包运行的能力,与上层网络指令无缝连接,结合开源软件库,极大的丰富了机器人的功能模块与应用范围。 
       HRMRP是一种较为典型的高性能、低成本机器人平台。与现在研究和应用中使用较为广泛的TurtleBot、 Pioneer等机器人相比,HRMRP具有相似的结构与尺寸,同样可以完成多种多样的机器人应用,但是在接口的可扩展性、传感器的丰富度以及成本控制等方面,具备更好的综合性能。
       今天就针对HRMRP的设计写到这里,下篇继续针对细节实现进行分析。


原创文章,转载请注明: 转载自古月居

本文链接地址: ROS探索总结(十六)——HRMRP机器人的设计

微信 OR 支付宝 扫描二维码
为本文作者 打个赏
pay_weixinpay_weixin

评论

16条评论
  1. Gravatar 头像

    终点 回复

    老师,我想问一下,ros下面怎么利用超声波进行避障?我尝试在ros下面加入超声波图层,小车能识别到障碍物,但是不能避开,会把小车周围全部识别成障碍物,然后就停止,不知道什么原因。

  2. Gravatar 头像

    杨轩 回复

    古月大神你好,我是一个大四学生,现在毕设题目是机器人自主移动。我选用了单线的激光雷达和超声波传感器结合,但是发现move_base包里面的话题是/scan,不知道怎么能把超声波的数据也融合进去。请问您有什么办法吗?

    • 古月

      古月 回复

      @杨轩 可以在激光数据中叠加超声波,自己做下数据融合

      • Gravatar 头像

        终点 回复

        @古月 老师,超声波叠加超声波是什么意思?是把超声波数据转化为点云数据吗?

  3. Gravatar 头像

    Nelson Wu 回复

    古月大神您好
    请教一下
    目前我們有一移动平台,
    可用C程序藉由RS232协议沟通,
    控制其前后左右移动及odom计算出平台的移动位置,
    如果想要将其包成ROS的package,
    与 ROS 通讯接口保持一致,
    可以方便与ROS与Navigation and SLAM结合,
    有相关网站或文件介绍吗
    谢谢

    • 古月

      古月 回复

      @Nelson Wu 你好,首先需要理解Navigation and SLAM中机器人的接口数据类型,然后针对这些数据类型编写相应的节点,然后打包成数据消息。我们做的HRMRP基本上是这种思路,我是按照ros by example的例程做的,结合wiki上的一些教程。现在ROS的英文书也不错,可以参考一下Mastering ROS for robotics Programming

  4. Gravatar 头像

    ros小农 回复

    字节制作的车体,但基控制这块一直做不好,里程计数据不准确,控制精度不够,能否给出一些意见,我是用的激光雷达精度很高,北阳utm-30lx,能否使用hector_slam 进行自主导航?

    • 古月

      古月 回复

      @ros小农 hector_slam是slam建模的,只需要激光数据即可,不依赖里程计。如果要导航的话,使用move_base需要依赖里程计,尽量提高里程计的精度,还可以使用imu辅助,多传感器融合数据会更加准确,我们的系统中就是使用这样的结构。

  5. Gravatar 头像

    maple 回复

    @古月,你好,请问Zynq是自带的ubuntu系统吗,还是需要自己把ubuntu移植到zynq上呢?

    • 古月

      古月 回复

      @maple Zynq官方有移植好的ubuntu系统,直接按照说明安装就行

  6. Gravatar 头像

    胜杰-tarantula 回复

    古月大神您好 请问一下 您们自主定位用的是amcl吗? 是否会遇到初次定位不可行的问题 我早《ros by example》一书中看到:When amcl first starts up, you have to give it the initial pose (position and orientation)
    of the robot as this is something amcl cannot figure out on its own

    另外,目前我们使用hector_slam,采用激光雷达,能够较好的完成SLAM建图,请问接下来对于自主定位还有路径规划这一块您有什么建议,目前是想采用amcl还有move_base来实现,可以如何下手。

    非常感谢您这么多的分享!

    • 古月

      古月 回复

      @胜杰-tarantula 你好,我们使用的是amcl,会存在这个问题,默认会使用地图中的初始位置,然后再用rviz去校正机器人的实际位置。amcl和move_base这部分在《ros by example》中都有详细的应用,我也是根据这本书的代码做的,你们也可以试一试。

      • Gravatar 头像

        胜杰-tarantula 回复

        @古月 好的,感谢。

        另外,还想请教的是,单独使用激光雷达能够完成amcl吗?还是需要odom?

        目前采用raspberry pi和pc通过无线wifi通讯的方式,存在一些时延问题,主要是tf方面的问题,所以也想请教一下,那些tf转换可以放在树莓派上?哪些可以放在pc端?

        对于odom,正在尝试使用laser_scan_matcher通过激光雷达数据来fake,不知是否可行?

        用rviz校正初始位置是需要选择map frame吗?目前发现校正之后,移动载有激光雷达的小车,定位并不发生改变。 是否可以分享一些校正初始位置的技巧,还是就是简单的那种方式,个人觉得存在一定误差。

        非常感谢您的耐心!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据