气球爆破挑战:一个六自由度火箭制导导航控制仿真健身房环境
摘要
一个基于Gymnasium构建的六自由度火箭制导、导航与控制(GNC)仿真环境,旨在通过在一个逼真的物理模拟中爆破气球来开发和测试GNC算法。
查看缓存全文
缓存时间: 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
示例
-
评估智能体:
- 在 /agents 文件夹 中开发智能体,继承 BaseAgent 并实现
get_action方法。 - 更新 /evaluation/configs 文件夹 中的评估配置文件,指定场景参数和待评估的智能体。
- 运行:
cd BalloonPoppingChallenge python .\BalloonPoppingGymEnv\evaluation\evaluate.py .\BalloonPoppingGymEnv\evaluation\configs\example_eval_cfg.yaml - 你将看到一枚火箭在天空中击破静态气球:场景0运行的截图
- 在 /agents 文件夹 中开发智能体,继承 BaseAgent 并实现
-
开发和调试的示例代码:
- 运行示例脚本:
cd BalloonPoppingChallenge python .\doc\examples\run_env_agent.py - 这将使用示例智能体运行指定场景并打印最终奖励。你可以在脚本中修改智能体、场景参数和其他设置,用于开发和调试。
- 运行示例脚本:
-
状态估计的示例代码:
- 运行示例脚本:
cd BalloonPoppingChallenge python .\doc\examples\test_navigation_agent.py - 这将使用示例导航智能体运行指定场景。会绘制估计值与地面真值的姿态和速度对比图。
- 运行示例脚本:
-
Colab笔记本示例:
- 在Google Colab中打开 evaluate_scenario_colab.ipynb 笔记本。
- 按照笔记本中的说明在云端运行评估。
建模细节
- 火箭飞行建模(RocketPy):
- 详细内容见RocketPy参考文档 (https://docs.rocketpy.org/en/latest/index.html)
- 坐标系如下图所示:火箭坐标系
- 气球爆挑战特有建模:
- 气球被建模为具有一定半径和质量的刚性球体。
- 气球飞行使用ActiveRocketPy提供的蒙特卡洛模拟方法进行仿真。随机参数在参数文件中列出。一个小型固体发动机将气球推出发射架,以启动ActiveRocketPy中Flight类的仿真。随后气球在重力、浮力、风力和大气阻力的影响下自由飞行。
- 每个气球的飞行不受火箭或其他气球的影响。
- 如果在某个时间步内,火箭(干质量中心)路径与气球中心之间的距离小于气球半径(即参数文件中给出的半径,而非蒙特卡洛模拟中的随机值),则认为气球被击破。
- 气球的释放取决于场景参数。
- 只有一次发射,目标是尽可能多地击破气球。
- 发射时间、倾角和航向由智能体决定。
- 环境中存在干扰,例如传感器噪声、风等。
Gymnasium环境操作
Gymnasium环境的操作分为三个阶段:重置、步进和终止。
-
重置:使用
env.reset()重置环境,该函数根据scenario_0_parameter.yaml文件设置火箭和气球的初始条件。每个气球的轨迹使用ActiveRocketPy的蒙特卡洛模拟进行仿真,然后存储在环境中。 -
步进:智能体采取动作(例如发射、滚转、油门和TVC指令)并调用
env.step(action),该函数将仿真推进一个时间步。环境返回新的观测值、奖励、终止标志和附加信息。 -
终止:当达到最大仿真时间或火箭撞击地面时,回合结束。环境根据击破的气球数量提供奖励。
环境的动作、观测、信息和奖励如下:
-
动作:
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 进行讨论。
竞赛场景
淘汰赛和决赛的确切场景将在稍后公布。以下是可能场景的一些示例。
| # | 名称 | 🚀 执行器响应 | 🚀 传感器噪声 | 🌬️ 风 | 🎈 数量 | 🎈 释放间隔(秒) | 🎈 初始位置 | 🎈 位置观测 | 🎈 速度观测 |
|---|---|---|---|---|---|---|---|---|---|
| #0 | Hello 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 发布 Roboschool,这是一个与 OpenAI Gym 集成的开源机器人模拟环境,包含12个环境,涵盖增强型人形机器人运动任务和 Pong 等多智能体设置。
Show HN: OpenGravity – 一款零安装、BYOK 的 Vanilla JS 版 Antigravity 克隆
OpenGravity 是 Google Antigravity 的零安装 Vanilla JS 克隆版,支持使用 Gemini 模型和 WebContainer API 进行 BYOK 代理式编码。旨在绕过速率限制,它提供了一个基于浏览器的 IDE,具备自主任务编排和本地文件同步功能。
Safety Gym
OpenAI 推出 Safety Gym,这是一个新的基准环境和工具包,用于研究受约束的强化学习和安全探索。该平台包含多个机器人和任务,旨在通过成本函数与奖励函数一起量化和衡量安全探索。
OpenAI Gym Beta
OpenAI 发布了 OpenAI Gym 公开测试版,这是一个用于开发和比较强化学习算法的工具包,包含不断增长的环境套件和可复现研究的平台。该工具包旨在标准化强化学习基准,并为研究社区提供多样化、易于使用的环境。
Gym Retro
OpenAI 发布 Gym Retro,这是一个强化学习研究环境,汇集了来自经典游戏主机(世嘉创世纪、NES、SNES、Game Boy 等)的游戏,用于研究智能体在不同游戏和关卡中的泛化能力。