Annual: 2019

PR045 »
软硬协同的全自动智能对战机器人仿真系统
📁Machine Learning
👤田文生 田
 (西安电子科技大学)
📅Jun 29, 2019
Regional Final



👀 2042   💬 1

PR045 » 软硬协同的全自动智能对战机器人仿真系统

Description

在最近几年的ICRA(机器人与自动化会议)人工智能挑战赛中,竞赛双方需自主研发2台智能对战机器人,让其全自动发射弹丸进行对抗,击败对方机器人则获得比赛胜利。全自动的智能对战机器人系统考验的是机器人学的前沿技术,由于近年来的人工智能热潮,大家都会关注如何能把深度学习技术用到比赛中去,但在实际场景中进行数据采集和训练是很低效的,所以通过仿真系统模拟真实环境对于机器人学习训练具有非常重要的意义,离线测试和仿真是目前用于该场景中智能对战机器人性能验证的一种低成本且高效率的方法,但现实世界和虚拟世界中的机器人、环境以及传感器的建模和渲染仍然有一定的距离。在我们的工作中因考虑到真实场景测试和纯软件仿真平台的不足,我们开发了一种支持硬件在环的全自动智能对战机器人仿真平台。该平台支持智能对战机器人的各种传感器仿真以及对战场景构建。通过硬件在环的测试与验证方式,我们能够有效地利用仿真环境来提高实测所带来的低效率的问题,并验证多模块人工智能算法有效性。同时通过与智能对战机器人中完全相同的硬件层沟通仿真环境与现实场景,我们能够准确有效地完成已验证的算法从仿真环境到真实场景的迁移。

Demo Video

  • URL: https://v.youku.com/v_show/id_XNDM5MDczODgxMg==.html

  • Project Proposal

    1. High-level Project Description

    在最近几年的ICRA人工智能挑战赛中,竞赛双方需自主研发2台智能对战机器人,让其全自动发射弹丸进行对抗,击败对方机器人则获得比赛胜利。全自动的智能对战机器人系统考验的是机器人学的前沿技术,由于近年来的人工智能热潮,大家都会关注如何能把深度学习技术用到比赛中去,但在实际场景中进行数据采集和训练是很低效的,所以通过仿真系统模拟真实环境对于机器人学习训练具有非常重要的意义,离线测试和仿真是目前用于该场景中智能对战机器人性能验证的一种低成本且高效率的方法,但现实世界和虚拟世界中的机器人、环境以及传感器的建模和渲染仍然有一定的距离。在我们的工作中因考虑到真实场景测试和纯软件仿真平台的不足,我们开发了一种支持硬件在环的全自动智能对战机器人仿真平台。该平台支持智能对战机器人的各种传感器仿真以及对战场景构建。通过硬件在环的测试与验证方式,我们能够有效地利用仿真环境来提高实测所带来的低效率的问题,并验证多模块人工智能算法有效性。同时通过与智能对战机器人中完全相同的硬件层沟通仿真环境与现实场景,我们能够准确有效地完成已验证的算法从仿真环境到真实场景的迁移。

    2. Block Diagram

    下图是当前整个框架平台的基本构架简图

     

    3. Intel FPGA Virtues in Your Project

    为了提升决策效果,使用FPGA加速进行深度学习、强化学习,以快速改进训练效果。该项目在训练阶段使用了Socket进行进程间的通信,Python端做Socket Client,Unity Environment(C#实现)来做Socket Server。TensorFlow训练的模型保存为自己的格式(就是训练完成之后生成的bytes文件)。在Inference阶段,使用TensorFlowSharp来读取训练好的模型,用于在Unity Environment中的Brain,来具体指导Agent与环境交互。
    使用该机器学习仿真框架,可以灵活地使用模拟的环境作为对战机器人训练环境。可以进行强化学习、模仿学习、神经网络或其它机器学习方法,通过简单易用的Python API对代理进行训练。

    4. Design Introduction

    系统框架

    仿真系统上层接口,可以和ROS系统通信,输出模拟的车辆状态和传感器信息,供决策、路径规划等算法进行模型训练和参数调优。

    仿真系统下层接口可以直接与车辆控制板,可以输出车辆移动和云台控制命令,并实时显示真实车辆的运行状态,通过真实数据和模拟数据对比,可以快速评估,优化控制逻辑。

    5. Function Description

     

    启动区是比赛正式开始前机器人放置的区域,四个启动区分布在比赛场地的四个角落,红蓝双方各有两个相同尺寸的启动区,每个启动区只能放置一个机器人;当参赛队伍只派出一个机器人时,可以放置在己方两个启动区的任意一个上。启动区主要由地胶上的红色或蓝色贴纸标明。

    补给区是机器人弹丸补给的重要区域,红蓝双方各有 1 个补给区,一方补给区相对对方机器人而言是补给禁区。即最大外轮廓尺寸为 1000*1000mm 的八边形黄色标志框区域内部及上方空间均为补给禁区。任意一方的机器人不得进入对方的补给区。

    比赛场地上双方各有1个专属的防御加成区,场上的每个机器人都可以激活触发防御加成区。对于红方防御加成区,无论由哪一方机器人触发,只有红方所有机器人会获得防御加成,蓝方防御加成区同理。

    当任意一台机器人停留在防御加成区超过 5s 后,该防御加成区会被触发:增强指定的一方所有机器人的防御值,使得每次受到弹丸攻击的伤害量由 50HP 削减至 25HP,持续时间为30s。
    比赛过程中,防御加成区域将在 0、1、2 分钟的整点进行刷新重置。同一个防御加成区域被触发后,在刷新重置节点前会处于失效状态,无法被再次触发。若同个防御加成区域被再次触发,且上次的防御加成效果未结 束,则该防御加成区域对应的一方继续持有防御加成效果(防御加成效果无法叠加),且加成的持续时间重置为30s。

    通信协议说明
    协议数据按照通信方向可以分为两大类:
    4.1 底层发送给上层的数据:
    1. 反馈信息:包含各个机构传感器反馈信息、底层计算出来的一些反馈信息;
    2. 底层状态信息:包含底层设备运行状态、底层对上层数据的一些响应等;
    3. 转发数据:包含裁判系统的全部信息、服务器端的自定义信息;
    3.4.2 底层接收的上层数据:
    控制信息:上层对底层 3 个执行机构的控制信息;
    一帧协议数据分为 4 个部分,分别是帧头数据、命令码ID、数据、帧尾校验数据。以下为对帧头数据和信息包的结构体代码。

    帧头数据
    /** 
      * @brief  frame header structure definition
      */
    /* This Struct Is Used To Describe A Package Header */
    typedef struct
    {
      uint8_t sof; /*!< Identify Of A Package */
      union {
        struct
        {
          uint16_t data_len : 10; /*!< Data Length, Include Header And Crc */
          uint16_t version : 6;   /*!< Protocol Version */
        };
        uint16_t ver_data_len;
      };
      union {
        struct
        {
          uint8_t session : 5;   /*!< Need(0~1) Or Not Need(2~63) Ack */
          uint8_t pack_type : 1; /*!< Ack Package Or Normal Package */
          uint8_t res : 2;       /*!< Reserve */
        };
        uint8_t S_A_R_c;
      };
      uint8_t sender;   /*!< Sender Module Information */
      uint8_t reciver;  /*!< Receiver Module Information */
      uint16_t res1;    /*!< Reserve 1 */
      uint16_t seq_num; /*!< Sequence Number */
      uint16_t crc_16;  /*!< CRC16 */
      uint8_t pdata[];
    } protocol_pack_desc_t;

    控制信息与推送信息: 
    struct cmd_chassis_info
    {
      int16_t gyro_angle;
      int16_t gyro_palstance;
      int32_t position_x_mm;
      int32_t position_y_mm;
      int16_t angle_deg;
      int16_t v_x_mm;
      int16_t v_y_mm;
    };

    struct cmd_gimbal_info
    {
      uint8_t   mode;
      /* unit: degree */
      int16_t pitch_ecd_angle;
      int16_t yaw_ecd_angle;
      int16_t pitch_gyro_angle;
      int16_t yaw_gyro_angle;
      /* uint: degree/s */
      int16_t yaw_rate;
      int16_t pitch_rate;
    };

    struct cmd_gimbal_angle
    {
      union{
        uint8_t flag;
        struct{
            uint8_t yaw_mode:1;  // 0 code angle
            uint8_t pitch_mode:1;
        }bit;
      } ctrl;
      int16_t pitch;
      int16_t yaw;
    };

    struct cmd_chassis_speed
    {
      int16_t vx; // forward/back
      int16_t vy; // left/right
      int16_t vw; // anticlockwise/clockwise
      int16_t rotate_x_offset;
      int16_t rotate_y_offset;
    };

    struct cmd_chassis_spd_acc
    {
      int16_t   vx; 
      int16_t   vy;
      int16_t   vw; 

      int16_t   ax; 
      int16_t   ay; 
      int16_t   wz; 
      
      int16_t rotate_x_offset;
      int16_t rotate_y_offset;
    };

    struct cmd_firction_speed
    {
      uint16_t left;
      uint16_t right;
    };

    struct cmd_shoot_num
    {
      uint8_t  shoot_cmd;
      uint32_t shoot_add_num;
      uint16_t shoot_freq;
    };

    6. Performance Parameters

    项目创新点
    基于硬件在环的仿真与测试平台,能够很好的实现对车辆动力学模型,多种传感器以及不同场景的模拟。同时硬件在环的仿真方法在降低测试成本和时间的条件下,也保证了测试的安全性和验证了算法的可靠性,可以方便地迁移到实际应用环境。
    1.    实现了完整的3D系统仿真
    该项目实现一套完整的3D全自动智能对战机器人仿真系统,同时对硬件传感器和通信协议进行了抽象和封装,成功构建了构建一个全面的,对开发者友好的仿真平台。
    2.    支持OpenAI gym控制接口
    Gym是一个用于测试和比较强化学习算法的工具包,它不依赖强化学习算法结构,并且可以使用很多方法对它进行调用。机器学习研究人员与模拟环境交互的一种常见方式是通过OpenAI提供的gym的工具包, 我们的仿真平台提供gym转换接口以便直接使用现有的强化学习算法快速进行应用开发。
    3.    支持硬件在环的仿真操作
    硬件在环仿真不仅弥补了纯数字仿真中的许多缺陷,提高了整个模型的置信度,而且可以大大减轻编程的工作量。这种仿真的另一个优势在于它实现了仿真模型和实际系统间的实时数据交互,使仿真结果的验证过程非常直观,大大缩短了开发周期。
     

    7. Design Architecture

     



    1 Comments

    Zhou Wenyan
    请补全您的设计作品
    🕒 Jun 26, 2019 04:25 PM

    Please login to post a comment.