-
Notifications
You must be signed in to change notification settings - Fork 4
2. 架构
Kehan.Xue edited this page Aug 27, 2020
·
1 revision
策略模块分为策略和策略选择两个子模块。策略负责和底层交互,将底层的跑定点等动作封装为一系列的抽象动作。而策略选择负责评估场面态势,在策略当中选择执行最合适的动作。
图 2.1 模块架构示意图
整体的数据流图如下所示:
图 2.2 数据流图
见代码文档。
底层执行是策略中最底层的模块,它分为两个部分:底盘(chassis_exe)和云台,两者均设定了多种状态模式并实时更新,便于上层函数操作。其中底盘负责机器人的运动任务,通过全局规和局部规划器、PID
控制实现速度发布、到定点等基础任务。而云台控制炮台,可实现炮台角度调整、子弹发射等相关任务。
机器人动作基于底层执行模块,封装了我方机器人的运动组合。其中对我方机器人有:底盘运动(旋转、前进、静止)、云台动作(调整枪口朝向、射击)、与我方其他机器人进行通信等基础功能并对敌方机器人的状态和信息进行预判和评估,为我方机器人的进攻和防守提供判断条件。
这一部分基于机器人动作和底层执行,为最上层的策略算法。策略分为移动策略(move_strategy)和射击策略(shoot_strategy)两大部分。移动策略中实现了机器人进入buff区、进攻防守等行为。射击策略可分别对状态不同的敌方机器人进行进攻或停止射击。
图 2.3 策略流程示意图
move_strategy
序号 | 策略类名 | 解释 |
---|---|---|
3 | CaptureBulletsMoveStrategy |
移动至弹丸补给区获取子弹补给 |
4 | CaptureEnemyBloodMoveStrategy |
移动至敌方回血区(在敌方血量充足的情况下敌方回血区可通行,但不会有回血效果) |
5 | CaptureOurBloodStrategy |
移动至我方回血区获得血量 |
6 | KeepDirectionAttackMoveStrategy |
以某种姿态跑到适合进攻的位置 |
7 | KeepDirectionDefenseMoveStrategy |
以某种姿态跑到适合防御的位置 |
8 | StopMove |
停止移动 |
shoot_strategy
序号 | 策略类名 | 解释 |
---|---|---|
0 | StopShootStrategy |
停止射击行为 |
1 | ToBetterOppShootStrategy |
攻击状态较好的敌方机器人(根据机器人动作中对敌方状态进行评估的函数) |
2 | ToWorseOppShootStrategy |
攻击状态较差的敌方机器人 |
我们选择了深度强化学习算法进行策略选择。作为对照,我们同时还开发了基于行为树的策略选择。其详细实现方式在下面算法一节描述。