Cartpole 平衡实验

摘要:本实验研究倒立摆(Cartpole)的平衡控制问题:仅对小车施加水平力,使铰接其上的杆保持竖直不倒。方法上采用近端策略优化(PPO),在 Isaac Lab 的 Isaac-Cartpole-v0 环境中以 4096 个并行环境训练一个 4→32→32→1 的 MLP 策略,共 150 次迭代,训练循环耗时约 17 秒。结果表明:策略在第 36 次迭代达到满回合长度,最终平均回报 4.94,为理论上限 5.0 的 98.8%,收敛后无退化;回放显示策略能在约 1 秒内将随机倾斜的杆恢复竖直并保持至回合结束。

表 1 · 实验概要
状态已训练 ✓ run 2026-07-06_08-00-30
机器人Cartpole(倒立摆小车;2 个关节,滑轨关节主动 effort、杆关节被动)
技术路线强化学习 · PPO
任务环境Isaac-Cartpole-v0(Isaac Lab)
任务配置Isaac Lab 官方预设,未作任何修改
并行环境数4096
训练迭代数150(每次迭代学习一批新采集的经验)
训练设备NVIDIA GeForce RTX 5070 Ti(16 GB)
训练耗时约 17 秒(采集 11.3 s + 更新 5.3 s,不含仿真器启动)
观测 / 动作维度4 维 → 1 维
策略网络MLP,两个隐藏层 × 32,ELU 激活;Actor 与 Critic 合计 2,499 个参数
最终平均回报4.94(理论上限 5.0 的 98.8%)
回合步数300 / 300(满回合,全程不倒)
智能体(Agent)策略 π · MLP 4→32→32→1环境(Environment)Isaac-Cartpole-v0动作 a ∈ ℝ¹观测 s′ ∈ ℝ⁴奖励 r ∈ ℝ
图 1 · 智能体与环境的交互回路。每个时间步,智能体(策略 π)依据当前观测选择动作并作用于环境,环境返回下一时刻的观测与标量奖励;训练目标是调整 π 以最大化累计奖励。

1背景与问题定义

本任务通过强化学习训练一个策略,使倒立摆(Cartpole)保持平衡不倒。被控系统如图 2 所示。

边界 −3 m边界 +3 m0滑轨(水平)小车θ杆(被动)cart_to_pole · 铰接slider_to_cart · 平移水平力 F
图 2 · Cartpole 物理系统示意。小车经关节 slider_to_cart 沿水平滑轨平移,杆经被动铰接关节 cart_to_pole 绕小车自由转动;控制输入是施加于小车的水平力 F,θ 为杆偏离竖直方向的角度,小车位置越出 ±3 m 边界则回合失败终止。

机器人:一辆小车与一根铰接于其上的杆,共两个关节——slider_to_cart(小车沿滑轨水平平移)与 cart_to_pole(杆绕小车自由转动)。其中小车滑轨关节为主动驱动,杆关节为被动铰接。

控制:策略每个控制步只输出一个水平力,作用在 slider_to_cart 上。水平力改变小车加速度,小车作为杆的支点移动,进而改变杆的角速度与角度;从“推小车”到“保持杆竖直”之间没有手写平衡控制器,全部由策略学出。

目标:使杆保持竖直不倒,且小车不越出边界。

本任务是一个经典的欠驱动问题:无法直接对杆施力,只能推动小车,借助小车的加减速间接维持杆的平衡。

按强化学习的标准框架(马尔可夫决策过程,MDP),问题的各要素定义见表 2:

表 2 · 问题的形式化定义
环境Isaac-Cartpole-v0,Isaac Lab 提供的 GPU 并行物理仿真环境
智能体控制小车的策略网络 π(结构见第 3.1 节)
状态 / 观测4 维连续向量:小车位置、杆角度、小车速度、杆角速度(第 3.2 节)
动作1 维连续量:施加于小车滑轨的水平力(第 3.2 节)
奖励5 项加权和:存活奖励 + 失败重罚 + 三个小权重塑形罚项(第 3.3 节)
回合5 秒(300 个控制步)到时正常结束;小车出界则提前失败终止(第 3.4 节)
目标最大化折扣累计回报,折扣因子 γ = 0.99

2理论基础

第 1 节将平衡控制表述为一个 MDP:智能体在每个控制步观测系统状态、输出动作、获得标量奖励,目标是最大化折扣累计回报。强化学习不依赖标注数据,而是通过与环境的反复交互,从奖励信号中学习控制策略——这正适合本任务:我们能够写出"什么算好"(杆竖直、不出界),却难以为每个状态标注"该施多大的力"。

强化学习的求解方法大体分为两族。价值法(如 Q-learning、DQN)学习每个状态–动作对的价值,再取价值最大的动作,天然适合动作可枚举的离散问题;本任务的动作是连续的水平力,无法枚举,因此采用策略梯度法——直接参数化策略并沿提升期望回报的方向更新参数。纯策略梯度的估计方差较大,实践中普遍采用 Actor-Critic 架构降低方差:Actor 即策略本身,负责输出动作;Critic 估计状态价值 V(s),为策略更新提供基准,仅在训练期使用。

更新的方向由优势(advantage)决定:A = 实际回报 − V(s),即某一动作相对 Critic 预期的好坏程度。优势的最小构件是时序差分误差 δ = r + γ·V(s′) − V(s),多步 δ 经 GAE(λ) 加权聚合为更稳定的优势估计,以在偏差与方差之间取得折中。训练同时优化三项:策略损失(记 Loss/surrogate)按优势加权调整各动作的概率;价值损失(记 Loss/value)使 Critic 的预测逼近实际回报;熵正则项对动作分布的随机性给予小额奖励,防止策略过早收敛到次优解。

策略梯度方法的实用难点在于更新步长:单次过大的更新可能使策略崩溃且难以恢复。PPO(Proximal Policy Optimization,近端策略优化)的处理方式是裁剪:当新旧策略的概率比越出 [1−ε, 1+ε] 区间时,其对优化目标的贡献被截断,从而失去继续外推的梯度激励,使每次更新仅前进一小步。

本实验选用 PPO 的依据有四:任务动作连续,属于策略梯度法的适用域;本实验采用数千个并行环境采样,与 PPO 这类 on-policy 算法的大批量数据需求恰好匹配;PPO 实现简单、对超参数不敏感,官方默认配置通常无需调整;它也是机器人运动控制领域常用的事实标准算法,并与 RSL-RL 等训练框架有成熟配套。

3实验框架

本节完整描述本实验的构成:策略由两个神经网络组成(3.1),读入 4 维观测、输出 1 维力(3.2),其行为由一组奖励规则塑造(3.3),回合的起止方式决定了训练所见的状态分布(3.4),PPO 在大量并行环境中迭代优化上述网络(3.5),最后给出运行环境、全部超参数与复现方式(3.6)。

3.1网络结构

强化学习训练调整的对象是神经网络的参数,而非机器人本身。本实验采用 Actor-Critic 架构,两个网络结构完全相同(4→32→32→1 的 MLP、ELU 激活),但承担不同职责、输出不同的量,其架构分别如图 3 与图 4 所示。网络规模很小:Actor 1,250 个参数(含 1 个可学习的动作标准差)、Critic 1,249 个参数,合计 2,499 个(实测自检查点文件)。

小车位置杆角度小车速度杆角速度观测 s ∈ ℝ⁴ℝ⁴32 神经元全连接 · ELU参数 160ℝ³²32 神经元全连接 · ELU参数 1,056ℝ³²1 神经元全连接 · 线性参数 33ℝ¹μ ∈ ℝ¹动作均值logσ ∈ ℝ¹可学习参数N(μ, σ²)高斯策略采样a ∈ ℝ¹动作训练时从 N(μ, σ²) 采样以探索;推理 / 部署直接取均值 μ合计 1,250 个参数(按各层实时求和,含 1 个 logσ)
图 3 · Actor(策略网络)的架构:观测向量经两个 ELU 隐藏层映射为动作均值 μ;μ 与独立可学习的 logσ 共同构成高斯策略 N(μ, σ²)——训练时从中采样以探索,部署时直接取均值。各层参数量由维度实时计算。最终部署的仅此网络。
小车位置杆角度小车速度杆角速度观测 s ∈ ℝ⁴ℝ⁴32 神经元全连接 · ELU参数 160ℝ³²32 神经元全连接 · ELU参数 1,056ℝ³²1 神经元全连接 · 线性参数 33ℝ¹V(s) ∈ ℝ状态价值仅训练期为 Actor 提供基准合计 1,249 个参数(按各层实时求和)
图 4 · Critic(价值网络)的架构:隐藏层与 Actor 同构,输出改为标量价值 V(s),即从当前状态出发的期望累计回报。仅在训练期为 Actor 提供参照,不参与部署。
actor_hidden_dims[32, 32]输入仅 4 维、任务简单,两层 32 的容量已足以拟合;较小的网络训练更快,且不易过拟合。
critic_hidden_dims[32, 32]与 Actor 同构(对称 Actor-Critic)。本任务状态完全可观,无需为 Critic 提供额外的特权信息。
activationelu负半区平滑且不置零,可避免神经元失活、使输出动作更平滑;这是 legged_gym / RSL-RL 一系的经验性默认选择。
init_noise_std1.0初始探索噪声:实际动作 ~ N(均值, σ²),σ 初值取 1.0 表示初期进行大范围探索;σ 本身可学习,随训练自动收窄(本次实测 Policy/mean_std 由 1.0 收至 0.083)。
obs normalizationFalse观测不作在线归一化:本任务观测量级小且稳定。规模较大的任务通常启用,用于将不同量纲的观测归一化到同一尺度。

3.2观测与动作

观测空间(4 维,两个网络共用)。按固定顺序拼接为一个 4 维向量,各维均为相对默认姿态的偏差量,构成见表 3:

表 3 · 观测向量构成
#观测量物理含义取数函数
1slider_to_cart 位置小车偏离中点的距离(m)joint_pos_rel
2cart_to_pole 角度杆偏离竖直的角度(rad)
3slider_to_cart 速度小车的平移速度joint_vel_rel
4cart_to_pole 角速度杆的转动角速度
为何用相对量pos − default以默认姿态为零点,网络学习的是偏差而非绝对量;更换初始姿态或机器人时,这种表述更具通用性。
观测噪声无enable_corruption = False,即不对感知施加额外难度。更贴近真机的任务通常会为观测叠加噪声,以模拟真实传感器的不完美。
为何无相机仅本体量4 个标量即可完整描述系统状态(完全可观),无需视觉输入;这也是该任务适合作为首个实验的原因之一。

动作空间(1 维)。策略在每个控制步输出一个标量:

驱动对象slider_to_cart仅驱动小车滑轨;杆为被动关节(无电机)。以 1 个动作控制 2 个自由度,即欠驱动。
控制方式JointEffortAction直接输出力(effort),不经 PD 环。另一类常见接口是输出关节目标角度,再由 PD 控制器转为力矩。
scale100.0网络输出量级约为 N(0,1),乘以 100 放大至足以驱动小车的牛顿量级。缩放的作用是使网络始终工作在 ±1 的适宜区间内。
offset0无偏移:静止时无需恒定力(对照:需抵抗重力的关节常配置偏置)。
effort_limit400执行器安全上限,对 100×动作 再作一次限幅,防止极端输出。

3.3奖励函数

各项奖励在每个控制步按权重 × 控制步长(1/60 s)累加计入回报——权重描述的是"每秒的得分速率"而非单步得分。奖励由 1 个主要目标(alive)+ 1 个失败重罚(terminating)+ 3 个小权重塑形项组成——"主目标 + 失败重罚 + 小权重塑形"是奖励设计中十分常见的组合。五项权重的构成如图 5 所示。

alive存活奖励+1.0
terminating失败终止惩罚−2.0
pole_pos杆偏离竖直的惩罚−1.0
cart_vel小车速度惩罚−0.01
pole_vel杆角速度惩罚−0.005
图 5 · 奖励各项的权重。中线为零点,向右(绿)为奖励、向左(红)为惩罚;权重跨三个数量级,条长按对数刻度示意本实验内各项的相对量级,精确数值以右列为准。

下面逐项说明各项的定义、设计动机,以及移除后的影响:

alive · +1.0is_alive主要收益项:回合未终止的每一步均计入正奖励,将存活时长直接转化为优化目标(满回合 5 秒合计贡献 +5.0)。若移除,策略将失去正向激励,最优解可能退化为尽快出界以提前结束回合。
terminating · −2.0is_terminated对以失败方式(出界)结束的一次性重罚。若移除,出界的代价仅为损失少量存活奖励,边界约束的学习将明显变慢。
pole_pos · −1.0joint_pos_target_l2(target=0)杆角相对竖直方向(0°)的平方误差,经 wrap_to_pi 处理以避免角度回绕带来的计算错误;它是"立直"最直接的梯度来源。若移除,只要不出界,杆处于任何姿态均可获得存活奖励,任务随之退化。
cart_vel · −0.01joint_vel_l1对小车速度绝对值的小额惩罚,用于抑制高速往返一类的投机解。权重刻意设得很小,以免压过主要目标。
pole_vel · −0.005joint_vel_l1对杆角速度的小额惩罚:目标是静态的竖直,而非快速摆动中的"平均竖直"。与上一项同为塑形项,权重同样很小。

3.4终止与复位

终止 · time_out5 s(= 300 步)到时正常结束(标记为非失败,不触发 terminating 惩罚)。5 秒足以判断策略是否已稳定。
终止 · 出界|小车| > 3.0 m滑轨长度有限;出界属失败终止,触发 terminating 惩罚。
无杆角终止(设计选择)杆倒下不结束回合,给策略留出自行将其摆回竖直的机会,同时 pole_pos 持续提供梯度。相较经典 Gym CartPole(杆倒即终止),这是更宽容的设定。
复位 · 小车位置± 1.0 m每回合起点随机化:不从同一状态开始,避免策略记忆单一轨迹,迫使其学习通用的平衡能力。
复位 · 小车速度± 0.5 m/s以非零初速度开始,覆盖更大的状态空间。
复位 · 杆角度± 0.25π(±45°)初始时杆已倾斜,策略须先将其恢复竖直、再维持住,从而直接训练抗扰动能力。
复位 · 杆角速度± 0.25π rad/s初始时杆带有角速度,进一步增加起始状态的多样性。

3.5训练流程

一次训练迭代包含以下四步,共循环 150 次:

  1. 收集经验。4096 个环境各以当前策略推进 16 步,共采集 65,536 条 (观测, 动作, 奖励, 下一观测) 样本。
  2. 计算优势。逐步计算时序差分误差 δ,并经 GAE(λ=0.95) 聚合为优势估计(定义见第 2 节)。
  3. 更新网络。将样本划分为 4 个 16,384 的小批量,重复训练 5 遍;每遍计算策略损失、价值损失与熵正则项(三者的含义见第 2 节),反向传播(梯度范数上限 1.0)、以 Adam 更新,并按 KL 自适应调整学习率。
  4. 返回第 1 步,循环至第 150 次迭代。

3.6环境与设置

任务环境 Isaac-Cartpole-v0 来自 Isaac Lab 官方任务包,按其 Manager-based 工作流(ManagerBasedRLEnv)组织:观测、动作、奖励、终止等要素以声明式的配置类组合定义、相互解耦——第 3.2 至 3.4 节描述的各要素即分别对应其中一块配置,本实验未作任何修改。

硬件与软件环境(标准环境,仅列版本,不逐条解释)

GPUNVIDIA RTX 5070 Ti · 16 GB
操作系统Ubuntu 24.04.4 LTS
仿真平台Isaac Sim 5.1.0 · Isaac Lab 2.3.2
训练框架rsl_rl 5.0.1
深度学习库Python 3.11.15 · PyTorch 2.7.0 (CUDA 12.8)

Rollout(经验收集)

num_envs4096并行环境数,处于 GPU 并行仿真的高吞吐区间。环境越多,单次迭代覆盖的状态越广,梯度估计越稳定。
num_steps_per_env16每次迭代中每个环境推进 16 步,即单次迭代 4096×16 = 65,536 条样本。Cartpole 动态较快,16 步已足以估计优势。
episode_length_s5 s回合时长,换算为 300 个控制步(见下两行)。
sim.dt1/120 s物理仿真步长;步长足够小方能保证数值稳定(120 Hz)。
decimation2物理每推进 2 步,策略输出 1 次动作,即控制频率 60 Hz。物理需精细,而控制频率无需同样高。
max_iterations150官方默认值,实际收敛点远早于此(见第 5.1 节),余量用于确认平台期的稳定性。

PPO 算法超参数

clip_param0.2PPO 的裁剪半径 ε:概率比越出 [0.8, 1.2] 后,其对优化目标的贡献被截断(机制见第 2 节)。为论文默认值,通常无需调整。
gamma (γ)0.99折扣因子决定策略的时间视野:有效视界 ≈ 1/(1−γ) = 100 步 ≈ 1.7 秒,足以覆盖"当前倾斜、数步后倒下"的因果关系。
lam (GAE λ)0.95GAE 的偏差-方差权衡参数(定义见第 2 节),0.95 为社区通用折中值。
entropy_coef0.005熵正则项系数(作用见第 2 节):系数过大则动作持续抖动,过小则探索不足。
value_loss_coef1.0价值损失与策略损失等权相加,两个网络由同一优化器一并更新。
num_learning_epochs5同一批数据重复学习 5 遍以提高样本利用率;遍数过多会过拟合这批由旧策略采集的数据。
num_mini_batches4每遍划分为 4 份、每份 16,384 条:小批量的梯度噪声自带正则效果,同时降低显存占用。
learning_rate1e-3初始学习率,仅为起点——实际步长由 adaptive 调度接管。
scheduleadaptive按 KL 自动调节学习率:新旧策略相差过大(KL > 2×目标)则减半、过小则放大。结果中 Loss/learning_rate 的锯齿状变化即为其作用的体现。
desired_kl0.01上一行调度的目标:每次更新后新旧策略的 KL 距离 ≈ 0.01,即"小步更新"的量化目标。
max_grad_norm1.0梯度范数裁剪:当梯度范数超过 1.0 时整体缩放至该值,防止梯度爆炸破坏网络参数。
optimizerAdam自适应步长优化器,RSL-RL 默认;配合 adaptive 学习率调度后几乎无需手动调参。
seed42固定随机种子:同机、同配置重跑可复现。

评价指标

主指标 · 平均回报Train/mean_reward衡量策略整体表现的首要指标;本任务具有精确的理论上限 5.0 可供对照(第 5.3 节)。
主指标 · 回合长度Train/mean_episode_length满值 300 步表示全程不倒,是"任务是否完成"的直接判据。
辅助 · 终止方式占比Episode_Termination/*区分回合是以出界失败结束还是到时正常结束,揭示失败模式的演变。
辅助 · 探索程度Policy/mean_std · Loss/entropy反映策略从广泛探索到确定性执行的过渡进程。
辅助 · 两项损失Loss/value · Loss/surrogate价值损失反映 Critic 拟合精度,策略损失反映 Actor 更新幅度,用于监测训练的内部状态。

复现命令

cd /home/jeff/IsaacLab
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py \
    --task Isaac-Cartpole-v0 --headless \
    --logger wandb --log_project_name robot-learning-dashboard

命令未覆盖任何影响训练结果的超参——随机种子、迭代数、并行环境数均取任务注册的默认配置(42 / 150 / 4096),仅设置无渲染运行与日志选项,同机重跑即可复现。曲线同时写入本地 TensorBoard 与 wandb,本地部分由 scripts/export_run.py 导出为本页数据。

4实验结果

本次训练共 150 次迭代,累计约 983 万步仿真;训练循环总耗时约 17 秒(经验采集 11.3 秒、网络更新 5.3 秒,不含仿真器启动与场景加载),平均吞吐约每秒 60 万步。总体结果:平均回报由初始的 0.13 收敛至 4.94;平均回合长度由 12.8 步升至 300 步满值(自第 36 次迭代起);此后不再出现失败终止。全部训练曲线如图 6 所示,逐条解读见第 5 节。

图 6 · 训练全程的全部记录曲线(17 条,按类别分组)。数据由本地 TensorBoard 导出、plotly 渲染,未作平滑或修饰。

5实验分析

5.1学习过程

将图 6 中的主曲线(回报、回合长度)与两条终止曲线对照阅读,可以清晰地看到学习过程经历了四个阶段:

Ⅰ · 回报先下降第 0–7 迭代回报由初始的 0.13 下降至 −4.48。这并非异常,而是探索阶段的正常代价:初始策略近乎随机,且探索噪声较大(σ = 1.0),小车动作杂乱,平均不到 13 步即越出边界,每次失败均触发重罚,回报因而降至最低点。此处提示了阅读强化学习曲线的一个要点:训练初期回报下降并不意味着训练失败。
Ⅱ · 先学会立杆第 7–25 迭代最先改善的是回合长度:至第 10 次迭代,平均已能维持约 96 步,表明策略已初步掌握"以小车稳定杆"的方式。值得注意的是,同一时期"出界终止"的占比反而升至 100%——杆虽已立稳,小车却持续漂移,几乎每个回合都以越界告终。两个目标之间的张力在此清晰显现:仅能立杆并不足够,还须使小车留在场地内。
Ⅲ · 学会两全第 25–36 迭代策略开始同时兼顾立杆与守界:出界占比由 100% 迅速降至 0,取而代之的是"到时正常结束"(time_out)占满 100%。回报在第 32 次迭代越过 4.5,回合长度在第 36 次迭代达到 300 步满值。至此,任务已基本完成。
Ⅳ · 精修第 36–150 迭代此后进入精修阶段:策略进一步将杆立得更直、动作更省,回报由约 4.6 缓慢升至 4.94。整个平台期无退化、无震荡,可判定为收敛。

5.2辅助指标

以上为行为层面的变化;辅助曲线则反映网络内部的状态,且多条曲线之间可相互印证:

Policy/mean_std1.0 → 0.083策略的探索噪声,最终仅为初值的约十二分之一。这表明策略从大范围试探逐步过渡到高确定性的执行,且其收窄进程与回报进入平台期同步——当探索不再带来增益后,策略便不再保留多余的随机性。
Loss/entropy1.42 → −1.08一维高斯分布的熵 = ln σ + ½ln(2πe) ≈ ln σ + 1.42,是 ln σ 的仿射函数,σ 降至约 0.24 以下时转为负值。本次数据与该式精确吻合:σ = 1.0 时熵恰为常数项 1.42,σ 收至 0.083 时熵 ≈ ln 0.083 + 1.42 ≈ −1.07。熵为负并非异常,恰是动作分布高度集中的佐证,与 mean_std 曲线互为印证。
Loss/value峰 0.264 → ≈ 0价值损失在第 5 次迭代附近达到峰值,之后逐步收敛至接近 0。峰值出现在第一阶段末尾并不意外:该阶段策略变化剧烈,回报分布随之剧变,Critic 难以准确估计;待策略稳定后,Critic 迅速跟上,最终对单回合回报的预测已相当精确。
Loss/learning_rate0 ~ 0.01 锯齿自适应调度的作用体现:每次更新后,依据新旧策略的实际 KL 距离上调或减半学习率,始终将更新幅度钳制在目标值附近。锯齿越密集,表示调节越频繁——这正是无需手动调节学习率的原因。
分项奖励终值alive 1.0 · pole_pos −0.0072 · terminating 0alive 取满值表明每一步均存活;pole_pos 的扣分收窄至接近 0,表明杆几乎全程竖直;terminating 归零,表明不再发生失败。宏观曲线与分项数据指向一致的结论。

5.3理论上限

该任务的回报上限可以精确计算。按第 3.3 节的累加规则,一个满回合 5 秒内 alive 项至多贡献 1.0 × 5 = 5.0,其余四项均为罚项,只会向下扣减,因此理论上限为 5.0。实测值 4.94,与上限相差的 0.06 主要来自 pole_pos 与两项速度惩罚的微小常驻扣分——杆无法在数学意义上做到绝对竖直与绝对静止。可见策略已非常接近该任务的性能上限,继续训练的边际收益趋近于零。

5.4策略行为

为直观检验收敛策略的实际行为,以下回放由 play.py 加载最终检查点 model_149.pt 在同一环境中录制(时长 5 秒,即一个完整回合):

回合开始:杆带初始倾角t ≈ 0.1 s · 初始倾斜
约 1 秒:杆已恢复竖直t ≈ 1 s · 恢复竖直
约 4 秒:持续保持竖直t ≈ 4 s · 持续保持
图 7 · 收敛策略的行为序列(自回放视频抽帧)。横向黄线为滑轨,蓝色立杆铰接于小车之上。

如图 7 所示,回合开始时杆因复位随机化带有明显的初始倾角(左);策略在约 1 秒内将杆恢复至竖直(中);此后直至回合结束,杆始终保持竖直,小车仅在滑轨中段小幅平移以维持平衡(右)。整段回放中未出现大幅往返或接近边界的行为,与第 5.2 节分项奖励的量化结论(杆角误差贴近零、速度惩罚极小)一致。

60 秒耐力测试。训练配置中的回合长度为 5 秒——这是训练阶段的设计选择:5 秒足以判定稳定性,而频繁复位可使策略在更多样的初始状态上训练,因此常规回放至多 5 秒即复位。为检验策略能否长时间维持平衡,另行录制了一段将回合长度覆盖为 60 秒的加时回放(env.episode_length_s=60,仅评估用,训练配置不变):

第 10 秒:杆竖直t ≈ 10 s
第 35 秒:杆竖直t ≈ 35 s
第 59 秒:杆竖直t ≈ 59 s
图 8 · 60 秒耐力回放的抽帧。三个时刻杆均保持竖直、小车均位于滑轨中点附近,全程无失败复位。

如图 8 所示,整段 60 秒回放中未发生任何失败:杆始终保持竖直,小车始终停留在滑轨中段。这与平衡问题的性质一致——策略一旦将系统稳定在竖直不动点附近,维持 5 秒与维持 60 秒并无本质差别;决定成败的是最初一秒左右的恢复阶段,而非之后的保持阶段。

6局限性

本报告存在三点局限:

7结论与未来工作

结论。在 4096 个并行环境、150 次迭代(训练循环约 17 秒)内,PPO 策略稳定收敛:最终平均回报 4.94,达到理论上限的 98.8%,自第 36 次迭代起满回合无失败,平台期无退化,回放确认策略能将随机倾斜的杆稳定恢复并保持竖直(60 秒加时回放亦全程无失败),可判定任务完成。方法层面,Isaac Lab 官方默认配置未作任何修改即收敛,表明"主目标 + 失败重罚 + 小权重塑形"的奖励设计与 PPO 默认超参数在该低维任务上已完全够用。

未来工作。下一个实验为 Ant 四足行走,其观测与动作维度均将提升一个量级,用于检验同一套 PPO 配置在更高维任务上是否依然有效(具体维度以其实验页为准)。独立评估管线与多种子统计将随后续实验逐步建设。

附录 · 关于本报告

理论深度。本报告是一份实验记录,第 2 节的理论仅陈述至读懂本实验所需的程度;完整的推导与讨论请参阅下列文献。

数据来源。正文全部配置数值取自本机 Isaac Lab 2.3.2 的配置文件;训练曲线由真实 run(2026-07-06_08-00-30)的本地 TensorBoard 导出;训练耗时与网络参数量分别实测自该 run 的事件文件与检查点;回放视频与帧由 play.py 加载 model_149.pt 录制。均未作人工修饰。

参考文献。

  1. J. Schulman, F. Wolski, P. Dhariwal, A. Radford, O. Klimov. Proximal Policy Optimization Algorithms. arXiv:1707.06347, 2017.(PPO 原论文)
  2. J. Schulman, P. Moritz, S. Levine, M. Jordan, P. Abbeel. High-Dimensional Continuous Control Using Generalized Advantage Estimation. arXiv:1506.02438, 2015.(GAE 原论文)
  3. N. Rudin, D. Hoeller, P. Reist, M. Hutter. Learning to Walk in Minutes Using Massively Parallel Deep Reinforcement Learning. CoRL 2021, arXiv:2109.11978.(其配套开源库 rsl_rl 即本实验的训练框架)
  4. M. Mittal et al. Orbit: A Unified Simulation Framework for Interactive Robot Learning Environments. IEEE RA-L, 2023, arXiv:2301.04195.(该框架现已更名为 Isaac Lab,本实验环境来自其官方任务包)
  5. R. S. Sutton, A. G. Barto. Reinforcement Learning: An Introduction (2nd ed.). MIT Press, 2018.(强化学习标准教科书)

返回报告介绍 / Back to report