气球爆破挑战:一个六自由度火箭制导导航控制仿真健身房环境

Reddit r/ArtificialInteligence 工具

摘要

一个基于Gymnasium构建的六自由度火箭制导、导航与控制(GNC)仿真环境,旨在通过在一个逼真的物理模拟中爆破气球来开发和测试GNC算法。

[气球爆破挑战](https://github.com/ARRC-Rocket/BalloonPoppingChallenge) 是一个使用 [Gymnasium](https://gymnasium.farama.org/) 构建的六自由度火箭制导、导航与控制(GNC)仿真环境。该项目基于 [ActiveRocketPy](https://github.com/ARRC-Rocket/ActiveRocketPy),后者是开源软件 [RocketPy](https://github.com/RocketPy/RocketPy) 的一个分支。 * 该环境旨在模拟一个主动控制的火箭,用于爆破散布在天空中的气球。 * 模拟器融合了逼真的物理特性,包括大气条件和火箭动力学,为开发和测试GNC算法提供了一个具有挑战性的平台。 * 提供了用于训练和评估的示例。 **该环境中的动作、观测、信息和奖励如下:** * **动作:** * `launch`:一个二进制命令,用于发射火箭。 * `launch_inclination_heading`:一个2元素数组 \[inclination, heading\],表示发射倾斜角(0-90度,相对于水平面)和航向角(0-360度,相对于北方)。 * `tvc`:一个2元素数组 \[TVC_x, TVC_y\],表示推力矢量控制(TVC)的万向节角度(度)。极性:正的万向节角度产生正力矩。 * `throttle`:一个标量,表示0到1之间的油门比例。 * `roll`:一个标量,表示滚转力矩指令,单位为牛米。 * **观测:** * `simulation_time`:当前仿真时间,单位为秒。 * `balloon_status`:一个n元素数组,表示每个气球的状态(0:在地面,1:已释放,2:已爆破)。n是场景中的气球数量。 * `balloon_states`:一个n x 6数组,表示每个气球的位置(posX, posY, posZ)和速度(velX, velY, velZ)。 * 位置是气球中心在发射坐标系中的坐标(相对于发射原点),单位为米。 * 速度是气球中心在发射坐标系中的速度(相对于发射原点),单位为米/秒。 * `rocket_sensors`:一个12元素数组,表示火箭的传感器测量值(gyroX, gyroY, gyroZ, accX, accY, accZ, posX, posY, posZ, velX, velY, velZ)。惯性传感器的方向与火箭本体坐标系对齐。在发射动作之前,这些测量值将为nan。 * 陀螺仪测量火箭本体坐标系中的角速度(弧度/秒)。 * 加速度计测量火箭本体坐标系中的线加速度(米/秒²)。加速度计测量值中包含重力加速度。 * GNSS传感器测量发射坐标系中的位置(米)和速度(米/秒)(相对于发射原点)。 * 注意:火箭的真实状态(如姿态、角速度)不会直接被智能体观测到,智能体需要从传感器测量值中推断它们。 * **信息:** * `rocket_states`:一个13元素数组,表示火箭的真实状态。这些状态不可观测,不应被智能体使用,但可用于开发和调试。状态为 \[posX, posY, posZ, velX, velY, velZ, e0, e1, e2, e3, wX, wY, wZ\]: * pos:干质量中心在发射坐标系中的位置(米)(相对于发射原点)。 * vel:干质量中心在发射坐标系中的速度(米/秒)(相对于发射原点)。 * e:表示火箭相对于发射坐标系的姿态的四元数(e0, e1, e2, e3)。 * w:火箭本体坐标系中的角速度(弧度/秒)。 * **奖励:** * 奖励根据每个时间步爆破的气球总数计算。
查看原文
查看缓存全文

缓存时间: 2026/05/14 22:37

ARRC-Rocket/BalloonPoppingChallenge

来源:https://github.com/ARRC-Rocket/BalloonPoppingChallenge

气球爆挑战:基于Gymnasium (https://gymnasium.farama.org/) 的六自由度火箭GNC仿真环境

本仓库包含气球爆挑战的代码,这是一个基于Gymnasium (https://gymnasium.farama.org/) 构建的六自由度火箭制导、导航与控制(GNC)仿真环境。该环境设计用于模拟一枚主动受控火箭,以击破散布在空中的气球。模拟器包含逼真的物理特性,包括大气条件和火箭动力学,为开发和测试GNC算法提供了一个具有挑战性的平台。该项目基于ActiveRocketPy (https://github.com/ARRC-Rocket/ActiveRocketPy),它是开源软件RocketPy (https://github.com/RocketPy/RocketPy) 的一个分支。

安装

git clone https://github.com/ARRC-Rocket/BalloonPoppingChallenge.git
cd BalloonPoppingChallenge
git submodule update --init   # 初始化 ActiveRocketPy 子模块
python -m venv .venv          # 创建虚拟环境(可选,但推荐)
.venv\Scripts\activate        # 在Windows上
# source .venv/bin/activate   # 在Unix或MacOS上
python -m pip install -r requirements.txt

从仓库更新

cd BalloonPoppingChallenge
git pull origin main
git submodule update --remote --merge

示例

  1. 评估智能体:

    • /agents 文件夹 中开发智能体,继承 BaseAgent 并实现 get_action 方法。
    • 更新 /evaluation/configs 文件夹 中的评估配置文件,指定场景参数和待评估的智能体。
    • 运行:
      cd BalloonPoppingChallenge
      python .\BalloonPoppingGymEnv\evaluation\evaluate.py .\BalloonPoppingGymEnv\evaluation\configs\example_eval_cfg.yaml
      
    • 你将看到一枚火箭在天空中击破静态气球:场景0运行的截图
  2. 开发和调试的示例代码:

    • 运行示例脚本:
      cd BalloonPoppingChallenge
      python .\doc\examples\run_env_agent.py
      
    • 这将使用示例智能体运行指定场景并打印最终奖励。你可以在脚本中修改智能体、场景参数和其他设置,用于开发和调试。
  3. 状态估计的示例代码:

    • 运行示例脚本:
      cd BalloonPoppingChallenge
      python .\doc\examples\test_navigation_agent.py
      
    • 这将使用示例导航智能体运行指定场景。会绘制估计值与地面真值的姿态和速度对比图。
  4. Colab笔记本示例:

建模细节

  • 火箭飞行建模(RocketPy):
    • 详细内容见RocketPy参考文档 (https://docs.rocketpy.org/en/latest/index.html)
    • 坐标系如下图所示:火箭坐标系
  • 气球爆挑战特有建模:
    • 气球被建模为具有一定半径和质量的刚性球体。
    • 气球飞行使用ActiveRocketPy提供的蒙特卡洛模拟方法进行仿真。随机参数在参数文件中列出。一个小型固体发动机将气球推出发射架,以启动ActiveRocketPy中Flight类的仿真。随后气球在重力、浮力、风力和大气阻力的影响下自由飞行。
    • 每个气球的飞行不受火箭或其他气球的影响。
    • 如果在某个时间步内,火箭(干质量中心)路径与气球中心之间的距离小于气球半径(即参数文件中给出的半径,而非蒙特卡洛模拟中的随机值),则认为气球被击破。
    • 气球的释放取决于场景参数。
    • 只有一次发射,目标是尽可能多地击破气球。
    • 发射时间、倾角和航向由智能体决定。
    • 环境中存在干扰,例如传感器噪声、风等。

Gymnasium环境操作

Gymnasium环境的操作分为三个阶段:重置、步进和终止。

  1. 重置:使用env.reset()重置环境,该函数根据scenario_0_parameter.yaml文件设置火箭和气球的初始条件。每个气球的轨迹使用ActiveRocketPy的蒙特卡洛模拟进行仿真,然后存储在环境中。

  2. 步进:智能体采取动作(例如发射、滚转、油门和TVC指令)并调用env.step(action),该函数将仿真推进一个时间步。环境返回新的观测值、奖励、终止标志和附加信息。

  3. 终止:当达到最大仿真时间或火箭撞击地面时,回合结束。环境根据击破的气球数量提供奖励。

环境的动作、观测、信息和奖励如下:

  • 动作:

    • launch:一个二进制指令,用于发射火箭。
    • launch_inclination_heading:一个2元素数组 [inclination, heading],表示发射倾角(0-90度,相对于水平面)和航向角(0-360度,相对于北方向)。
    • tvc:一个2元素数组 [TVC_x, TVC_y],表示推力矢量控制(TVC)万向节角度(度)。极性:正的万向节角度产生正扭矩。
    • throttle:一个标量,表示油门比例,范围0到1。
    • roll:一个标量,表示滚转扭矩指令,单位为N·m。
  • 观测:

    • simulation_time:当前仿真时间,单位为秒。
    • balloon_status:一个n元素数组,表示每个气球的状态(0:在地面,1:已释放,2:已击破)。n是场景中的气球数量。
    • balloon_states:一个n x 6数组,表示每个气球的位置(posX, posY, posZ)和速度(velX, velY, velZ)。
      • 位置是气球中心在发射坐标系(相对于发射原点)中的坐标,单位为米。
      • 速度是气球中心在发射坐标系(相对于发射原点)中的速度,单位为m/s。
    • rocket_sensors:一个12元素数组,表示火箭的传感器测量值(gyroX, gyroY, gyroZ, accX, accY, accZ, posX, posY, posZ, velX, velY, velZ)。惯性传感器的方向与箭体坐标系对齐。在发射动作之前,测量值为nan。
      • 陀螺仪测量箭体坐标系中的角速度(rad/s)。
      • 加速度计测量箭体坐标系中的线加速度(m/s²)。加速度计测量值中包含重力。
      • GNSS传感器测量发射坐标系(相对于发射原点)中的位置(m)和速度(m/s)。
    • 注意:火箭的真实状态(例如姿态、角速度)不被智能体直接观测,智能体需要从传感器测量值中推断它们。
  • info:

    • rocket_states:一个13元素数组,表示火箭的真实状态。这些状态不被观测,不应用于智能体,但可用于开发和调试。状态为 [posX, posY, posZ, velX, velY, velZ, e0, e1, e2, e3, wX, wY, wZ]:
      • pos:干质量中心在发射坐标系(相对于发射原点)中的位置(m)。
      • vel:干质量中心在发射坐标系(相对于发射原点)中的速度(m/s)。
      • e:表示火箭姿态的四元数(e0, e1, e2, e3),相对于发射坐标系。
      • w:箭体坐标系中的角速度(rad/s)。
  • 奖励:

    • 奖励基于每个时间步击破的气球总数计算。

已知问题

  • 质量属性在飞行前根据最大流量和燃烧时间预先计算。油门指令不会改变飞行中的质量属性。这相当于在保持流量不变的情况下节流火箭发动机的比冲。当达到燃烧时间时,发动机关闭。

智能体开发

用于评估的智能体放置在 /agents 文件夹中。它们应实现为一个继承 BaseAgent 的类,并实现 get_action 方法。智能体可以通过 self.given_parameters 访问场景参数,这些参数定义在 /scenario_parameters 文件夹 中的 scenario_given_parameters.yaml 文件中。观测值通过 get_action 方法传递。智能体应输出一个与环境中定义的动作空间匹配的动作字典。

评估细节

评估脚本位于 /evaluation 文件夹。它以配置文件作为输入,该文件指定场景参数和待评估的智能体。脚本使用给定的智能体运行指定场景并输出结果。

评估流程图

参考

  • RocketPy GitHub (https://github.com/RocketPy/RocketPy)
  • RocketPy 文档 (https://docs.rocketpy.org/en/latest/index.html)
  • Gymnasium 文档 (https://gymnasium.farama.org/)

引用

如果你在研究中使用气球爆挑战,请考虑引用:

@misc{BalloonPoppingChallenge,
  author = {Zuo-Ren Chen and Advanced Rocket Research Center (ARRC)},
  title = {Balloon Popping Challenge: A 6-DoF Rocket GNC Simulation Gymnasium Environment},
  month = {April},
  year = {2026},
  url = {https://github.com/ARRC-Rocket/BalloonPoppingChallenge}
}

Balloon Popping Challenge @ TASTI 2026

一场国际火箭GNC软件设计竞赛

开发你自己的Python软件,引导、导航并控制火箭击破天空中的气球。

这是气球爆挑战的官方代码仓库,该竞赛将在2026年台湾国际太空科学技术与产业大会(TASTI)上举办。本竞赛旨在通过让参与者开发自主飞行控制算法,培养火箭制导、导航与控制(GNC)领域的下一代人才。

参与者需要开发基于Python的软件来自主控制一枚仿真火箭。在基于物理的仿真环境中,火箭必须导航并击破动态释放的气球,以在不确定条件下最大化击破数量。

关键词:GNC,自主火箭,优化,路径规划。

竞赛详情

  • 报名参加竞赛:[TASTI 2026 注册]()
  • 竞赛时间线:
    • 2026年4月dd日:竞赛公告,开放申请,发布规则和软件的测试版
    • 2026年5月至8月:发布软件更新,更新规则,举行月度会议,在线排行榜
    • 2026年8月dd日:发布最终版软件和规则,关闭申请
    • 2026年9月dd日:在线淘汰赛
    • 2026年10月dd日:公布决赛入围者
    • 2026年11月dd日 @ TASTI:决赛入围者演讲和现场演示(总计不超过2小时)

竞赛规则

  • 参与者在 /agents 文件夹 中开发智能体以控制火箭。
  • 智能体将使用每个场景给定的参数进行初始化。
  • 在每个时间步,智能体只能使用环境提供的观测值来输出控制指令(例如发射、滚转、油门和TVC指令)。智能体不得访问环境或模拟器的任何其他信息。
  • 除智能体外,模拟器的所有其他组件均由组织者固定提供。参与者不得为评估目的修改代码库的任何其他部分。
  • 有关规则和软件的问题可以在 GitHub Issues (https://github.com/ARRC-Rocket/BalloonPoppingChallenge/issues) 中提问。组织者将定期举行会议回答问题并提供更新。
  • 非常欢迎对代码库提出代码建议、贡献和错误报告。请提交拉取请求或开启 issue 进行讨论。

竞赛场景

淘汰赛和决赛的确切场景将在稍后公布。以下是可能场景的一些示例。

#名称🚀 执行器响应🚀 传感器噪声🌬️ 风🎈 数量🎈 释放间隔(秒)🎈 初始位置🎈 位置观测🎈 速度观测
#0Hello World理想10不适用height = linspace(10,410,40)在初始位置静止无速度
#1随机气球理想100随机地面随机当前步完全观测当前步完全观测
#2 (待定)噪声传感器理想100随机地面随机当前步完全观测当前步完全观测
#3 (待定)笨拙执行器LPF, 随机100随机地面随机当前步完全观测当前步完全观测
#4 (待定)恶劣天气LPF, 随机有, 随机大小100随机地面随机当前步完全观测当前步完全观测
#5 (待定)传感器丢失LPF, 随机有 & 丢失有, 随机大小100随机地面随机当前步完全观测当前步完全观测
#6 (待定)寻找气球LPF, 随机有 & 丢失有, 随机大小100随机地面随机当前步部分观测当前步部分观测
#7 (待定)气球回收

发布说明:

  • 2026-04-07:代码库和规则的初始发布。

相似文章

Roboschool

OpenAI Blog

OpenAI 发布 Roboschool,这是一个与 OpenAI Gym 集成的开源机器人模拟环境,包含12个环境,涵盖增强型人形机器人运动任务和 Pong 等多智能体设置。

Safety Gym

OpenAI Blog

OpenAI 推出 Safety Gym,这是一个新的基准环境和工具包,用于研究受约束的强化学习和安全探索。该平台包含多个机器人和任务,旨在通过成本函数与奖励函数一起量化和衡量安全探索。

OpenAI Gym Beta

OpenAI Blog

OpenAI 发布了 OpenAI Gym 公开测试版,这是一个用于开发和比较强化学习算法的工具包,包含不断增长的环境套件和可复现研究的平台。该工具包旨在标准化强化学习基准,并为研究社区提供多样化、易于使用的环境。

Gym Retro

OpenAI Blog

OpenAI 发布 Gym Retro,这是一个强化学习研究环境,汇集了来自经典游戏主机(世嘉创世纪、NES、SNES、Game Boy 等)的游戏,用于研究智能体在不同游戏和关卡中的泛化能力。