🚁 使用 RL 训练无人机悬停策略#

Genesis 支持并行模拟,非常适合高效地训练强化学习(RL)无人机悬停策略。在本教程中,我们将通过一个完整的训练示例,介绍如何获得一个基本的悬停策略,使无人机能够通过到达随机生成的目标点来保持稳定的悬停位置。

这是一个简单且最小的示例,演示了 Genesis 中非常基础的 RL 训练流程,通过以下示例,您将能够快速获得一个可部署到真实无人机的悬停策略。

注意:这不是一个全面的无人机悬停策略训练流程。它使用简化的奖励项来让您轻松入门,并且没有利用 Genesis 在大批量上的速度优势,因此它仅用于基本演示目的。

致谢:本教程的灵感来源于 Champion-level drone racing using deep reinforcement learning (Nature 2023)

环境概述#

我们首先创建一个 gym 风格的环境(hover-env)。

初始化#

__init__ 函数通过以下步骤设置模拟环境:

  1. 控制频率。 模拟以 100 Hz 运行,为无人机提供高频控制回路。

  2. 场景创建。 创建模拟场景,包括无人机和一个静态平面。

  3. 目标初始化。 初始化一个随机目标点,无人机将尝试到达该点。

  4. 奖励注册。 奖励函数在配置中定义并注册以指导策略。这些函数将在”奖励”部分中解释。

  5. 缓冲区初始化。 初始化缓冲区以存储环境状态、观测值和奖励。

重置#

reset_idx 函数重置指定环境的初始姿态和状态缓冲区。这确保机器人从预定义配置开始,这对于一致的训练至关重要。

步骤#

step 函数根据策略采取的动作更新环境状态。它包括以下步骤:

  1. 动作执行。 输入动作将被裁剪到有效范围,重新缩放,并作为调整应用于默认悬停螺旋桨 RPM。

  2. 状态更新。 检索无人机状态(如位置、姿态和速度)并存储在缓冲区中。

  3. 终止检查。 终止的环境会自动重置。环境在以下情况下终止:

    • 回合长度超过允许的最大值。

    • 无人机的俯仰或横滚角度超过指定阈值。

    • 无人机的位置超过指定边界。

    • 无人机离地面太近。

  4. 奖励计算。 根据无人机在到达目标点和保持稳定方面的表现计算奖励。

  5. 观测计算。 观测值被归一化并返回给策略。用于训练的观测值包括无人机的位置、姿态(四元数)、机体线速度、机体角速度和先前的动作。

奖励#

在此示例中,我们使用以下奖励函数来鼓励无人机到达目标点并保持稳定:

  • target: 鼓励无人机到达随机生成的目标点。

  • smooth: 鼓励平滑动作并缩小 sim-to-real 差距。

  • yaw: 鼓励无人机保持稳定的悬停偏航。

  • angular: 鼓励无人机保持低角速度。

  • crash: 惩罚无人机坠毁或偏离目标太远。

这些奖励函数结合起来为策略提供全面的反馈,指导其实现稳定准确的悬停行为。

训练#

在这个阶段,我们已经定义了环境。要使用 PPO 训练无人机悬停策略,请按照以下步骤操作:

  1. 安装依赖项。 首先,确保您已安装 Genesis,然后使用 pip 添加所有必需的 Python 依赖项:

    pip install --upgrade pip
    pip install tensorboard rsl-rl-lib==2.2.4
    
  2. 运行训练脚本。 使用提供的训练脚本开始训练策略。

    python hover_train.py -e drone-hovering -B 8192 --max_iterations 301
    
    • -e drone-hovering: 将实验名称指定为 “drone-hovering”。

    • -B 8192: 将环境数量设置为 8192 以进行并行训练。

    • --max_iterations 301: 将最大训练迭代次数指定为 301。

    • -v: 可选。启用可视化训练。

    要监控训练过程,启动 TensorBoard:

    tensorboard --logdir logs
    

    您应该看到类似这样的训练曲线:

    ../../_images/hover_curve.png

    当启用可视化进行训练时,您将看到:

    ../../_images/training.gif

评估#

要评估训练好的无人机悬停策略,请按照以下步骤操作:

  1. 运行评估脚本。 使用提供的评估脚本来评估训练好的策略。

    python hover_eval.py -e drone-hovering --ckpt 300 --record
    
    • -e drone-hovering: 将实验名称指定为 “drone-hovering”。

    • --ckpt 300: 从检查点 300 加载训练好的策略。

    • --record: 记录评估并保存无人机表现的视频。

  2. 可视化结果。 评估脚本将可视化无人机的表现,如果设置了 --record 标志,则保存视频。

通过遵循本教程,您将能够使用 Genesis 训练和评估一个基本的无人机悬停策略。玩得开心!