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的设计写到这里,下篇继续针对细节实现进行分析。

----------------------------------------------------------------

欢迎大家转载我的文章。

转载请注明:转自古-月

http://blog.csdn.net/hcx25909

欢迎继续关注我的博客

ROS探索总结(十六)——HRMRP机器人的设计的更多相关文章

  1. ROS探索总结(六)——使用smartcar进行仿真

    转自:https://www.ncnynl.com/archives/201609/843.html 总结: 一.机器人描述文件三个: 机器人主体body文件: gazebo属性文件: 主文件 sma ...

  2. ABP源码分析十六:DTO的设计

    IDTO:空接口,用于标注Dto对象. ComboboxItemDto:用于combobox/list中Item的DTO NameValueDto<T>/NameValueDto:用于na ...

  3. ROS探索总结(十八)——重读tf

    在之前的博客中,有讲解tf的相关内容,本篇博客重新整理了tf的介绍和学习内容,对tf的认识会更加系统. 1 tf简介 1.1 什么是tf tf是一个让用户随时间跟踪多个参考系的功能包,它使用一种树型数 ...

  4. ROS探索总结(十七)——构建完整的机器人应用系统

           上一篇博客介绍了HRMRP机器人平台的设计,基于该平台,可以完成丰富的机器人应用,以较为典型的机器人导航为例,如何使用HRMRP来完成相应的功能?本篇博客将详细介绍如何将HRMRP应用到 ...

  5. 我的MYSQL学习心得(十六) 优化

    我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  6. ROS探索总结(二)——ROS总体框架

    个人分类: ROS 所属专栏: ROS探索总结   一.  总体结构        根据ROS系统代码的维护者和分布来标示,主要有两大部分:      (1)main:核心部分,主要由Willow G ...

  7. ROS探索总结(一)——ROS简介

    转自古-月 ROS探索总结(一)——ROS简介 一.历史 随着机器人领域的快速发展和复杂化,代码的复用性和模块化的需求原来越强烈,而已有的开源机器人系统又不能很好的适应需求.2010年Willow G ...

  8. ROS学习笔记十:URDF详解

    Unified Robot Description Format,简称为URDF(标准化机器人描述格式),是一种用于描述机器人及其部分结构.关节.自由度等的XML格式文件. 一.URDF语法规范 参见 ...

  9. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十六章:实例化和截头锥体裁切

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十六章:实例化和截头锥体裁切 代码工程地址: https://git ...

随机推荐

  1. servlet与ajax数据交换(json格式)

    JSON数据格式: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于的一个子集. JSON采用完全独 ...

  2. 06_Linux目录文件操作命令3查找命令_我的Linux之路

    上几节已经大致跟大家说了在Linux端文件目录操作的一些命令 这篇随笔,我们继续来学习对文件目录的操作命令 对文件或目录进行查找的命令 find 指定目录下查找文件 find(选项)(参数) find ...

  3. [ZJOI2008]生日聚会

    题目描述 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算坐成一排玩游戏.为了游戏不至于无聊,就座的方案应满足如下条件: 对于任意连续 ...

  4. TopCoder SRM 558 Div 1 - Problem 1000 SurroundingGame

    传送门:https://284914869.github.io/AEoj/558.html 题目简述  一个人在一个n * m棋盘上玩游戏,想要占领一个格子有两个方法: 在这个格子放一个棋子.  这个 ...

  5. SQL优化实用方法

    SQL优化:避免索引失效 1.不使用NULL 任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的.因为只有该字段中有null值,即使创建了索引其实也是没有用 ...

  6. Python中模块json与pickle的功能介绍

    json & pickle & shelve 1. json的序列化与反序列化 json的使用需要导入该模块,一般使用import json即可. json的序列化 方法1:json. ...

  7. TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人

    简介 TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人. 文章包括一下几个部分: 1.为什么要尝试做这个项目? 2.为 ...

  8. 利用maven install jar到项目当中

    接着上面利用maven打好的jar包.把刚刚打好的包放入其他项目当中怎么办? 只需要在相同的目录下执行mvn install,maven会自动把jar放到本地仓库中. 这样,原先maven项目中缺少依 ...

  9. Object 类

  10. javascript引擎任务运行顺序