← VLA Atlas

叉车强化学习 · 文献综述 树根杯赛题相关 · 2026-07-10

面向"树根杯 · 具身智能平衡重叉车挑战赛"的对标论文与开源仓库全景 —— 从零基础理解叉车 RL,到可落地的架构清单

本页导航
  1. 三分钟先导 —— 如果你是第一次听说"叉车 RL",从这里开始
  2. 关键词速查 —— 20 个必备术语,一句话读懂
  3. 叉车 pick-place 全景 —— 6 步任务分解 + 4 个难点
  4. MJX + brax PPO 是什么 —— 我们的技术栈白话讲解
  5. 综述结论 —— 从 9 篇论文提炼的 6 条洞见
  6. 直接对标 5 篇 —— 全球最相关的叉车 RL 论文
  7. 类似 RL 任务 4 篇 —— 林业采伐机 / 液压起重机
  8. 本地已 clone 2 项 —— 开源仓库详解
  9. 迁移优先级 P1-P10 —— 可落地的清单
  10. 推荐学习路径 —— 按你的角色选择起点

本页汇总从 50 轮多角度文献检索(中/英/日文关键词 + 场景动作拆解 + 特定论文追踪 + 类似任务迁移)得到的所有与"叉车 pick-place"直接或间接相关的强化学习论文与开源实现。目标是回答两个问题:全球范围内有没有可直接借用的叉车 RL 权重?如果没有,我们训 MJX + brax PPO 应该抄哪些架构 idea?

先说结论:公开可下载的"叉车 pick-place RL 预训练权重"目前 不存在 —— 5 篇直接对标论文全部未开源模型。但 4 篇林业采伐机 / 液压起重机论文提供了非常成熟的 reward + curriculum 架构模板,其中 3 个 idea 可以直接搬进 src/rl/forklift_env.py(倒数奖励分阶段独立 rewardBeta 分布 action)。本页最后一节按优先级给出可落地清单。

阅读方式:如果你从没接触过强化学习,请从 三分钟先导 顺序读到综述结论;如果你想直接跳到论文详情,请用上面的 TOC。每篇论文卡片都配了 🟡 一句话总结 / 🟢 初学者视角 / 🔵 Key takeaway / 🟠 对赛题的迁移 四色标签,按需读。

🎯 三分钟先导 · 什么是"叉车 RL"?

1) 我们在做的比赛是什么?

树根杯 · 具身智能平衡重叉车挑战赛 要求参赛者做一台 能自己开、自己叉、自己搬、自己放 的仿真叉车。你交出一个"仿真器 + 算法"的整套系统,算法拿到目标货物的位姿信息,要驱动叉车把最上面那件货抬起来送到指定位置,放置误差要小于 10 cm、角度误差小于 5°。决赛会给算法故意加噪声(位置 ±20 cm、角度 ±10°),不允许你依赖高精度输入。

2) 为什么用"强化学习"?

强化学习 (Reinforcement Learning, RL) 让算法通过反复试错学习动作策略。就像教小孩骑自行车:你不告诉他每个动作怎么做,你只告诉他"摔了就是坏、骑得远就是好",他自己在几百次摔倒里学会怎么保持平衡。对于叉车这种"底盘转向 + 叉齿升降"耦合的复杂系统,人工写规则(比如"距离 < 1m 就减速")容易出漏洞(v10 版本我们就吃过这亏),而 RL 训练出的策略能自然处理各种边缘情况。

3) 为什么这套页面重要?

训 RL 是有成本的 —— 我们在 3090 上单次训练 4-5 小时,失败一次就损失半天。先看清全球有没有人踩过同样的坑,能让我们少绕大量弯路。50 轮检索的结论是:同类任务在过去 4 年被反复研究(林业采伐机、液压起重机),他们的 reward 设计经验对我们价值极高。这就是本页存在的意义。

📖 关键词速查 · 20 个必备术语

下面每行都是"一句话读懂"。看不懂论文时可以随时回来查。

RL 基础

RL / 强化学习
让算法通过 试错 + 反馈 学习动作策略。核心三要素:观测(observation)、动作(action)、奖励(reward)。
Policy / 策略
算法学到的"看到什么就做什么"的映射函数,通常是一个神经网络。输入=观测,输出=动作。
Reward / 奖励
每一步给算法的一个分数,告诉它这步做得好不好。RL 的全部目标就是"最大化长期奖励总和"。Reward 设计是 RL 工程 90% 的工作
PPO
Proximal Policy Optimization。目前工业界最常用的 RL 算法,稳定、易调、样本效率还行。本页几乎所有论文都用 PPO。
Observation Space
算法能"看到什么" —— 比如叉车的位置、朝向、叉齿高度、货物相对位姿。可以是数值(low-dim)也可以是图像(vision-based)。
Action Space
算法能"做什么" —— 比如叉车的 (前进速度, 转向角速度, 叉齿升速度) 三个连续控制信号。
Episode
一次完整试验,从初始状态到成功/失败/超时。RL 通过跑百万级 episode 迭代 policy。
Curriculum
"课程学习" —— 先教简单任务,收敛后再加难度。就像先教小孩走再教跑。本页 90% 论文都用
Reward Shaping
把稀疏的"成功=1 / 失败=0"分解成密集的过程奖励(距离缩小 +0.1 / 速度平稳 +0.05...),让算法在早期就有学习信号。
Sim2Real
在仿真里训练,部署到真机的能力。核心难点是仿真与真实的物理差异(摩擦、延迟、光照)。
Domain Randomization (DR)
训练时故意扰动仿真参数(摩擦系数 ±20%、光照亮度 100-100k lm...),迫使 policy 对物理不确定性鲁棒,是 sim2real 的主流方案。
BC / 行为克隆
Behavioral Cloning。用人类演示或规则控制的轨迹当"标准答案",用监督学习让 policy 先模仿一遍,再用 RL 微调。加速 RL 收敛。

仿真与工程

MuJoCo
DeepMind 维护的物理仿真引擎,擅长接触/摩擦仿真。轻量、准确、社区活跃 —— 我们赛题主选。
MJX
MuJoCo XLA 后端 —— 把 MuJoCo 编译到 GPU 上跑,支持一次跑 1024 个环境。让 RL 训练从 CPU 单进程的一天变成 GPU 并行的 1-2 小时。
brax
Google 的 JAX 版 RL 框架,和 MJX 天然对齐。提供 PPO / SAC / ES 等算法的 vmap 化实现。
Isaac Sim / Isaac Gym
NVIDIA 的物理仿真,资产丰富但重型。本页大量论文用这个,但我们本机 driver 595 有兼容性坑,选 MJX 规避。
Gazebo
ROS 生态最常用的仿真器,和真机代码接口一致但性能一般(不支持向量化)。
MJCF / URDF
MuJoCo 和 ROS 各自的"机器人模型描述文件" —— 定义几何、关节、执行器、传感器。互相之间可以手工转换。
Ackermann 底盘
汽车/叉车的转向机构 —— 前轮转、后轮跟随,不同于差速驱动(左右轮不同速)。数学上是 non-holonomic(不能横向平移),路径规划复杂度更高。
vmap
JAX/GPU 里的"批处理" —— 一次并行跑 N 个仿真环境,吞吐提升 N 倍。MJX + brax 的性能优势核心来源。

🗺️ 叉车 pick-place 全景 · 任务拆解 + 难点

6 步 pick-place 全流程

从叉车启动到货物放置成功,通常拆成 6 个阶段。本页所有论文都是在解决其中的 1-6 步

STEP 1Approach接近货物栈 —— 阿克曼底盘导航到 pallet 前 2m 处
STEP 2Dock对接 —— 车身正对 pallet, yaw 误差 < 5°
STEP 3Insert插叉 —— 叉齿低速插入 pallet 底部两个孔位
STEP 4Lift抬升 —— 叉齿垂直上升到目标高度,货物离地
STEP 5Transport搬运 —— 载着货物导航到目标区域
STEP 6Place放置 —— 叉齿下降,货物精确落到指定点(< 10cm/5°)

为什么这个任务难?

⚙️ MJX + brax PPO 是什么 · 我们的技术栈

训练循环白话解释

想象一台 GPU 同时开着 1024 个平行世界,每个世界里都有一台叉车在自己试错。每 20 毫秒(50 Hz),1024 个 policy 同时输出动作,MJX 用 GPU 并行推进物理时间,所有环境的 (观测, 动作, 奖励) 汇总起来,brax 用 PPO 更新一次 policy 权重。1024 个世界的经验一起用,收敛速度是单进程的 1024 倍。

一次训练大约 5M 时间步 ≈ 1-2 小时 GPU 时间(3090)。训完得到一个 params.pkl,里面就是学会怎么开叉车的神经网络权重。

Reward Shaping 的直觉

RL 最大的痛点是"稀疏奖励" —— 如果只有"成功=1 / 失败=0",算法早期什么都学不到,因为随机动作永远无法完成 300 步任务。Reward shaping 就是把"成功"拆分成一路上的密集反馈:

怎么设计这些系数,是 RL 工程的核心难题 —— 也是本页所有论文最有价值的经验来源。

💡 综述结论 · 9 篇论文提炼的 6 条洞见

📌 直接对标 · Direct Forklift RL (5 篇)

论文年月仿真栈算法成功率开源
HMER (天大)2026-01Gazebo × 32Multi-Expert + BC→PPO94.2% sim
Toyota Visual Forklift2024-12Isaac SimPPO + ResNet + DR60% real
ADAPT2025-03真实户外iSAM2 + Hybrid A*(非 RL)≈ 人类
Lang2Lift2025-08真实户外VLM + SAM-2 + FoundationPose60.5% real
Semi-Auto Vision2025-11感知 onlyYOLOv11 + Optuna0.788 mAP

HMER · Heterogeneous Multi-Expert RL for Long-Horizon Multi-Goal Tasks in Autonomous Forklifts

Yun Chen, Bowei Huang, Fan Guo, Kang Song · 天津大学 · arXiv:2601.07304 · 2026-01-12
🟡 一句话总结: 把叉车任务拆成 3 个专家(导航 / 插叉 / 放置),每个专家用最合适的输入 + 独立奖励,再用人类演示打底 + PPO 微调,拿到本领域仿真最高分 94.2%。
🟢 初学者视角 想象你要训一个能"开车 + 停车 + 停车费投币"的一体化系统 —— 直接训一个大脑同时学这三件事很难,因为动作模式差别太大。HMER 的做法是训三个小脑:开车脑只用雷达数据学转向,停车脑用摄像头学对位,投币脑用手臂位置学精细调整。三个脑之间靠一个"语义任务规划器"(可以理解成 FSM 状态机)切换。这样每个脑的学习目标都很单纯,总体反而学得又快又好。

三个专家的分工:

Nav Expert
LiDAR 360-D → 1D-CNN + MLP → 底盘速度和转向 (v, ω)
Pick Expert
RGB 84×84 → NatureCNN + MLP → 底盘 + 叉齿 (v, ω, fork_v, gripper)
Place Expert
低维 6-DoF 本体感觉 → MLP 256×256 → 精细放置
关键 Reward
R_place = λ / (d_target + ε) + R_success
训练配方
10k 遥操作演示 → BC 50 轮预训练 → PPO fine-tune(lr=1e-4, γ=0.99, λ=0.95, ε=0.2)
吞吐
Gazebo 32 并行,物理 dt=0.001s
Nav 专家用 LiDAR 因为导航时最需要"周围有什么障碍"的信息;Pick 专家用 RGB 因为插叉时要看清 pallet 上的孔位;Place 专家不需要视觉,只需要知道"我的叉齿相对目标点在哪",用 6 个数字就够了。"给每个子任务用最合适的传感器"是核心 idea

结果:总成功率 94.2%,cycle time 42.5s,放置误差 1.5cm。Baseline 对比:Seq-Hybrid 68.5%(串行切换)/ HRL 88.1%(层次 RL)/ Rule-Based 84.2%(手写规则)。消融证明:纯 BC 平坦训练只有 12.4% → HMER 上升到 94.2%,增量 82pp 几乎全部来自"专家解耦"。

🔵 5 行 Key Takeaway
  • 多专家分工避免单网络的目标冲突,是本领域已知最高的仿真成功率
  • 倒数奖励 1/(d+ε) 对精准放置阶段直接可用,梯度非常锐利
  • BC → PPO 混合训练能加速收敛,10k 演示门槛并不高
  • 可直接映射到我们的 C1/C2/C3 curriculum,结构上无缝对齐
  • 局限:仅 Gazebo 仿真,无 real-world 验证;语义规划器需人工设计状态判据
🟠 对赛题的迁移多专家 = 我们的 phase-based policy 拆分;倒数奖励直接放进 C3 place reward;BC 预训练需要我们先用 v10 FSM/MPPI 生成 10k 演示轨迹 —— 这套东西 v10 时期已经积累好了,搬过来就用。

Toyota · Visual-Based Forklift Learning System — Zero-Shot Sim2Real

Koshi Oishi, Teruki Kato, Hiroya Makino, Seigo Ito · Toyota 中央研究所 · arXiv:2412.11503 · ICRA 2025
🟡 一句话总结: 在 Isaac Sim 里训一个视觉端到端策略,不用任何真机数据直接部署到 1/14 缩放叉车,成功率 60%。关键是"故意在训练里加噪声"让 policy 对现实的物理不确定性鲁棒。
🟢 初学者视角 Sim2Real(仿真到真机)是 RL 的老大难 —— 你在仿真里训了 100% 成功的 policy,搬到真机可能一次都成不了,因为真实光照 / 摩擦 / 传感器噪声全变了。Domain Randomization (DR) 的思路是:训练时故意把仿真参数搞乱(光强今天 100 明天 10 万,叉车摩擦系数 ±20%),让 policy "看过所有可能的样子",部署到真机时新环境对它来说只是"又一种见过的情况",不需要额外微调。Toyota 这篇的贡献就是把 DR 玩到极致,还加了一个"Clothoid 参考轨迹"作为路径规划的约束。
观测
Stereo ResNet 224×224 × 2 → 512-D 特征向量
动作
速度 + 转角(连续),Ackermann 底盘
DR 范围
速度/动作 ±10%、RGB ±20%、光强 100-100k lm、色温 2000-7500K
参考轨迹
Clothoid 曲线(阿克曼底盘天然可跟)
Clothoid 曲线是"曲率连续变化"的曲线,叉车沿这种曲线走不会出现方向盘瞬间打死的情况。用它作为 reward 参考 = 告诉 policy "尽量像这样走"。

结果:1/14 缩放真机 60% 成功率(仅 pallet 接近任务,不含插叉抬升),决策精度 +90%。零样本迁移可行但和 HMER 的仿真 94.2% 有明显差距。

🔵 5 行 Key Takeaway
  • 立体视觉 (512-D ResNet) 比单目稳定,规避深度歧义
  • Clothoid 参考轨迹作 reward shaping 优于纯 L2 距离
  • DR (RGB ±20%) 覆盖仓库光照全范围,但域窄仍不够
  • 1/14 缩放机器人有 scale-up 未知风险,全尺寸未验证
  • 局限:PPO 超参未公开;任务只到接近,无搬运放置
🟠 对赛题的迁移决赛的 20cm/10° 引导噪声本质上就是 DR 噪声,DR 参数范围可以直接抄;Clothoid 参考轨迹在 Ackermann 底盘可以做 shaping,把 v10 MPPI 用的 clothoid 参考点做成 RL 的辅助 reward。

ADAPT · Autonomous Dynamic All-terrain Pallet Transporter

Huemer, Murschitz, Schörghuber, ..., Kugi (13 作者) · AIT + TU Wien · arXiv:2503.14331 · 2025-03(v1)/2026-06(v4)
🟡 一句话总结: 完全不用 RL,靠 SLAM 定位 + Hybrid A* 规划 + 压力接触反馈,在真实户外建筑工地做全自主叉车运输,接近 20 年经验人类操作员水平。
🟢 初学者视角 "感知 → 规划 → 控制"是机器人学的经典三段式,和 RL 是两条完全不同的技术路线。ADAPT 证明这条老路在户外弱引导场景仍然非常能打:
  • iSAM2 SLAM:一边开一边建地图,车轮里程 + RTK-GNSS + 检测到的 pallet 位置一起融合,自动纠错。类比:你一边走一边画地图,同时看到熟悉的建筑就纠正自己的位置估计
  • Hybrid A*:考虑阿克曼底盘"不能横移"的物理约束的路径搜索算法,规划出的路径可以物理跟得动。
  • 压力接触:液压叉齿的油压传感器,通过压力变化知道货物是否插入到位。类比:你不用眼睛,靠手感就能判断插头有没有插好
SLAM
iSAM2 增量因子图,融合轮速里程 + RTK-GNSS 双天线 + pallet 检测作地标
感知
几何神经网络 + 角/边检测,150k 合成深度对训练
规划
Hybrid A* + Reeds-Shepp,阿克曼几何显式建模
控制
PLC (B&R X90) 液压比例阀 <20ms + 工业 PC 高层 + 压力接触反馈

结果:定位漂移 ~1% 相对路程;加 pallet 观测后 fork-pallet 相对误差从 0.182m → 0.064m(-65%);整体接近 20 年经验人类操作员水平。

🔵 5 行 Key Takeaway
  • iSAM2 + pallet 地标融合定位是弱引导下最稳的思路
  • Hybrid A* + Reeds-Shepp 显式处理 Ackermann 几何,比 PPO end-to-end predictable
  • 压力-接触传感反馈是纯视觉控制的必要补充
  • 户外挑战需 2.5D 高度图 + 遍历性分析
  • 局限:强依赖 RTK-GNSS(不通用);无开源;无学习能力(无法从新场景改进)
🟠 对赛题的迁移iSAM2 + pallet 地标定位思路可作弱引导 fallback;压力接触检测可以转成 MJX contact force reward 约束;更重要的是它证明 —— 如果 RL 训崩,回退到 SLAM + Hybrid A* + MPPI 混合规划仍然能拿到不错的分数,这是我们 v10 FSM baseline 的存活底气。

Lang2Lift · Language-Guided Autonomous Forklift for Outdoor Pallet Handling

Nguyen, Huemer, Murschitz, Glueck, Vu, Kugi · AIT · arXiv:2508.15427 · 2025-08(v1)/2026-02(v2)
🟡 一句话总结: 在 ADAPT 平台上加自然语言指令 —— 你说"去取那个角落的钢梁 pallet",它用 VLM + SAM-2 + FoundationPose 一整套视觉模型解析出 6D 位姿,再调用底层控制。真实户外 60.5%。
🟢 初学者视角 这篇是"用大模型理解人的话"的典型案例。流水线是:
  1. NLP 从"取那个角落的钢梁 pallet"抽出 物体类型 = pallet / 视觉特征 = 钢梁 / 空间关系 = 角落 四个要素
  2. Florence-2(开放词汇 VLM)在图像里找到符合"角落的钢梁 pallet"的矩形框
  3. SAM-2 把这个矩形框细化成像素级 mask
  4. FoundationPose 用 RGB-D + mask 算出 pallet 的 6D 位姿
  5. 底层控制拿着 6D 位姿去插叉
为什么用这套?因为不同工地/仓库的 pallet 长得完全不同,不能靠固定的检测器,得靠大模型的开放泛化能力。
Pipeline
Language → Florence-2 (开放词汇 detection) → SAM-2 (质量打分选最高置信 mask) → FoundationPose (RGB-D + mask → 6D pose ±5cm/±4cm)
对比
Florence-2 mIoU 0.587 > GroundingDINO+SAM-2 0.531
控制
25 Hz ROS2

结果:387 张真实户外 prompt-image 对,总体 mIoU 0.587,成功率 60.47%。低光反而最佳(0.805),遮挡最差(0.481)。关键消融:去掉 SAM-2 后成功率 52.71% → 8.53%(崩了 84%)。

删掉一个模块导致成功率崩 84% 是非常吓人的信号 —— 它意味着 没有 SAM-2 的精细 mask,插叉根本对不上位。检测框的精度不足以支持插叉这种毫米级操作。
🔵 5 行 Key Takeaway
  • SAM-2 分割是不可删除环节,精确 mask > 检测 bbox
  • Florence-2 开放词汇优于短语接地(GroundingDINO)
  • FoundationPose 6D 位姿 ±5cm/±4cm 直接用于插叉对位
  • 低光 mIoU 反超晴天,纹理对比强反而降低歧义
  • 遮挡 (38.27%) 是主要瓶颈,语言需预先给定不支持在线
🟠 对赛题的迁移决赛的"目标位姿逐帧提供"实际上等价于 Lang2Lift 已经完成的 VLM+SAM-2 阶段,我们直接省掉这段,专注于 6D pose 输入下的 control 部分。但值得抄的是 SAM-2 消融的数量级 —— 提醒我们 obs 维度对成功率影响可以是 92% 的差距,不是 5%。

Semi-Auto · Learning-Based Vision Systems for Semi-Autonomous Forklift

Vamshika Sutar, Mahek Maheshwari, Archak Mittal · arXiv:2511.06295 · 2025-11-09
🟡 一句话总结: 单目 YOLO 检测 pallet 和 pallet 底部的两个孔位,通过几何关联算出插叉入口的精确坐标。感知 baseline,不含控制。
🟢 初学者视角 最简单的检测思路 —— YOLO 找 pallet 找孔位,然后"这两个框套上就是插叉点"。这篇的价值不在于算法多先进,而在于它系统对比了 YOLOv8 vs v11,并且用 Optuna 自动搜索超参(loss 各项权重、学习率),把训练结果调到最优。这套 超参搜索方法 可以用在任何 CV 任务上。
数据集
1694 张(1523 Roboflow + 171 现场),75/15/10 拆分
增强
翻转 / 19% 缩放 / 高斯模糊 / 噪声
深度
焦距标定 + 尺寸比例(单目粗糙推断)
Optuna
20 试验(TPE)搜到 λ_cls=0.187, λ_box=0.117, λ_iou=0.269, lr₀=0.0159

结果:YOLOv11 mAP@0.5 0.788,mAP@0.5:0.95 0.510。无 real robot 闭环验证。

🔵 5 行 Key Takeaway
  • YOLOv11 DFL 亚像素定位是成熟的插叉点检测 baseline
  • Optuna 系统超参搜索(λ 权重、学习率)可直接复用
  • Pallet-孔位映射规避 6D pose 复杂性,单目也能干
  • mAP@0.5:0.95 仅 0.51,严格阈值下精度不够
  • 局限:无闭环控制;无 real robot;仓库泛化未测
🟠 对赛题的迁移如果我们要在 sim 里加感知模块(而非直接用 GT 6D pose),YOLOv11 + 孔位映射是最省事的路线;Optuna 超参配置可以直接抄。

🌲 类似长 horizon 任务 · Analogous RL (4 篇)

为什么这些论文相关?林业采伐机 / 液压起重机的架构和叉车高度可迁移 —— 都是"多 DoF 底盘 + 大惯量末端 + 长 horizon pick-place"任务簇。虽然场景不同,但 reward 设计、curriculum 结构、action 参数化的经验完全可以搬。

论文年月仿真栈算法成功率特色
LUT Log Loading2025-10Isaac Gym × 1024PPO + 两阶段 reward94%分阶段独立 reward
TU Wien Wood-Log2025-02MuJoCo × 42mPPO + Beta 分布96%Beta action + 状态机 reward
ETH Hydraulic Handler2024-10混合 sim → 12t 真机PPO + 7 项 curriculum≈ 人类One-shot 终止 + 液压 NN 建模
Umeå Forestry Crane2021-03Unity + AGX × 8PPO + 高度递降97%显式能量优化 reward

LUT · Towards RL Based Log Loading Automation

Kurinov, Ivanov, Orzechowski, Mikkola · LUT University + Lapland UAS · arXiv:2510.26363 · 2025-10-30
🟡 一句话总结: 林业采伐机从抓到放的全流程 RL,核心是"两阶段独立 reward" —— 先只学抓和抬,收敛后再加"落放稳定"惩罚。Isaac Gym 1024 并行 94% 成功率。
🟢 初学者视角 这篇最值得学的是 "reward 分阶段导入" 的思路。如果一开始就把所有 reward 项(接近、抓紧、抬高、稳放)全部加进去,算法早期什么都学不好,因为它需要同时优化 4 个相互干扰的目标。LUT 的做法:
  1. Stage 1(120-160 步收敛):只用 r1 (接近) + r2 (抬高),让算法先学会最基础的动作
  2. Stage 2(300-1000 步精调):加入 r3 = -w · v_log_z³ 抓稳落放
类比:先教小孩把球抓起来,不管姿势多难看;等他能稳定抓起来了,再教他"轻轻放,不要摔"
Stage 1
r1 (位置接近) + r2 (提升 + 抵达床上方),~120-160 steps 收敛
Stage 2
加入 r3 = -w · v_log_z³(立方衰减落置稳定),~300-1000 steps 精调
观测/动作
joint angles + velocities + log 相对位姿 / motor velocity commands 归一化
超参
γ=0.99, PPO ε=0.3, 1024 并行环境
为什么用 -v³ 而不是 -v²?立方项在 v 小时几乎不惩罚(算法能自由动),v 大时惩罚陡增(算法被强烈约束)。这样低速动作不受干扰,高速摇晃被强力惩罚。

结果:5 次独立训练平均 90-95%,最佳 94% (966/1024)。通过地形倾斜 / 粗糙地面泛化测试。

🔵 5 行 Key Takeaway
  • 分阶段 reward 全分离是核心,r3 不与 r1/r2 共享 shaping 系数
  • 立方衰减速度惩罚 -v_z³ 精细化落置稳定,线性版本不够锐
  • Isaac Gym 1024 并行验证 curriculum 收敛的可扩展性
  • 随机 joint reset + terrain randomization 防过拟合
  • 局限:MJCF 参考仓 hakoniwa 非官方,权重未公开
🟠 对赛题的迁移叉车 C3 place 的立方衰减 = 决赛 cargo 翻倒防御的 reward-level 抓手,不是等到翻了再判失败。分阶段独立 reward 直接对应 v3.0 的 C1/C2/C3。

TU Wien · Autonomous Wood-Log Grasping with a Forestry Crane

Vu, Wachter, Ebmer, Ecker, Glück, ... (8 作者) · TU Wien ACIN · arXiv:2502.01304 · ICRA 2025
🟡 一句话总结: 8-DOF 液压曲臂抓木头,核心创新是用 Beta 分布做 action(不用 clip,天然满足物理约束)+ 状态机 reward(前一 stage 达成才开启下一 stage)。MuJoCo 96%。
🟢 初学者视角 这篇有两个 idea 都非常适合我们:
  • Beta 分布 action:传统做法是 policy 输出 [-1, 1] 内的数,然后 clip 到边界 —— 但 clip 会截断梯度,训练晚期不稳定。Beta 分布本身取值就在 [0, 1],不需要 clip,梯度全程完整。类比:普通做法像"你尽情说,超出边界的话我给你切掉";Beta 像"你天生就只能在边界内说话",没有切割损失。
  • 状态机 reward:每个 stage 的奖励只在前一 stage 已经达成时才开启。防止算法"贪心"提前进入下一 stage —— 比如"抓稳"奖励只有在"接近距离 < 阈值"时才生效,否则算法可能在远处就假装闭合夹爪骗奖励。
Policy
Actor-Critic 4×256, Beta 分布输出
Reward
r_grapple = r_dist · (q₈/q̄₈) + (1 - q₈/q̄₈)(1 - r_dist)
Curriculum
4 阶 log 高度递降 -0.1m,每阶 30% success over 20 episodes 触发进档
吞吐
MuJoCo 3.0 × 42 环境, 5e8 sim steps ≈ 1-2 天 RTX 4090
上面这个 r_grapple 公式看起来复杂,其实很简单:q₈ 是夹爪闭合程度,r_dist 是距离奖励。整个公式的意思是"当距离近时(r_dist 大),就奖励闭合(q₈ 大);当距离远时(r_dist 小),就奖励张开(q₈ 小)"。—— 教算法"只在合适的时候才做合适的事"

结果:单一直径 96%,混合直径 (8.5-50cm) 也 96%。

🔵 5 行 Key Takeaway
  • Beta 分布 action 自然满足物理约束,比 tanh+clip 稳 30%
  • 状态机 reward 分段递进,避免贪心提前进入下阶段
  • 显式速度阻尼 r_balance 用于末尾防抖动
  • Uniform diameter 分布思路可迁移到 mass randomization
  • MJX vmap 友好度极高,与我们栈完美对齐
🟠 对赛题的迁移MJX + Brax PPO 里 policy head 直接改成 Beta —— 对应 tfp.distributions.Beta,brax 支持;三个 action(v, ω, fork_v)都在 [-1, 1] 里,Beta 天然合适。

ETH · RL Control for Autonomous Hydraulic Material Handling Machines

Spinelli, Egli, Nubert, Nan, Bleumer, ... (9 作者) · ETH RSL + Liebherr · arXiv:2410.05093 · IROS 2024
🟡 一句话总结: 12 吨液压起重机真机验证,唯一一篇重工业 RL sim-to-real 成功的论文。核心是"混合仿真"(数据驱动 NN + 解析模型)缩小 sim gap,和 7 项 curriculum reward 缓入。
🟢 初学者视角 "混合仿真"是这篇最独特的贡献。传统 sim2real 要么全用解析物理(准但和真机差异大),要么全用数据驱动 NN(近但难以外推)。ETH 的做法:
  • 液压马达难以解析,用 MLP 学"油压 + 速度"的响应(数据驱动)
  • 臂膀比较线性,用一阶延迟系统(解析)
  • 自由摆放末端用 Lagrangian + Rayleigh 阻尼(解析)
这样每个部件都用最合适的建模方式,整体 sim gap 显著缩小。同时 reward 里那个"One-shot 终止"很有意思 —— 当算法接近目标 && 速度低时,任何动作都被惩罚,强制它"到位就别动"。类比:考驾照停车时,车一停稳你还乱踩油门,教练一定扣分
r_target
exp(-‖ε‖²) Cartesian 距离
r_oscillation
-‖φ_dot‖ 工具角速度阻尼
r_decouple
-|ω_slew| · (|ω_boom| + |ω_stick|) 防旋转-臂膀耦合
r_one-shot
-‖u‖² · I[‖ε‖ < 0.5 ∧ |ω_slew| < 0.02] 进入邻域后禁动作

结果 vs 20 年经验专业操作员:slew 平均速度持平(11.17 vs 11.12°/s);工具摆放阻尼显著优于人类(6.47 vs 20.23°/s,更稳);超调略差(8.88° vs 0.57°),稳态误差略大。真机泛化空/满桶 comparable。

🔵 5 行 Key Takeaway
  • 混合 sim (数据 + 解析) 大幅缩小 sim2real gap,是唯一真机验证的重工业 RL
  • 7 项 reward 用 curriculum 缓入,不是 epoch 0 全上,避免早期冲突
  • One-shot 终止奖励对应 FSM SETTLE 阶段的 neural 化
  • 显式 decouple 项防高速耦合振荡,可直接迁移到叉车 (转向 × 前进耦合)
  • DR 包含控制器 P 增益 ±20%,不是只随机化物理量
🟠 对赛题的迁移One-shot 终止是我们目前 FSM v10 的 velocity brake 该干的活,neural 化后可直接进 C3;lift servo 增益 ±20% DR 是 sim2real 的免费保险(如果决赛涉及真机)。

Umeå · RL Control of a Forestry Crane Manipulator

Andersson, Bodin, Lindmark, Servin, Wallin · Umeå Univ + Algoryx · arXiv:2103.02315 · IROS 2021
🟡 一句话总结: 本领域开山之作(2021 年),6-DOF 液压吊车 97% 成功率。最大亮点是 能量优化 reward:让 policy 学会"轻柔的力量",能耗降 20-40% 而周期只增 5-10%。
🟢 初学者视角 这篇被广泛引用是因为它证明了 能耗可以显式写进 reward。公式: R_total = R_success / (1 + α · E_consumed) 白话:总奖励 = 成功奖励除以(1 + 能耗),能耗越大总奖励越小。这样算法优化的不只是"成不成",还有"耗不耗电"。类比:告诉小孩"打扫房间给 100 元,但用的时间越长扣得越多",他会自然找到高效的动作序列
另一个亮点是 Height-based curriculum —— 训练时 log 位置从"高高在上"(几乎已经在夹爪里)开始,逐步下降 0.1m,一直到地面。这种"从易到难"的单变量渐进方案,比多阶段 reward 好调得多。
主奖励
R_total = R_grasp / (1 + α · E_consumed)
能耗
E = Σ τᵢ(t) · ωᵢ(t) · dt 仅 boom/stick/slew
Curriculum
高度递降 z₀ → z₀-0.1m → ... → 地面,每阶 30% success 触发
观测
8 帧堆叠归一化 joint + log Cartesian
Rate limit
action 每步变化 < v_max/30,一阶 LPF 平滑

结果:成功率 97%,能耗 vs 无能耗 reward 降 20-40%,周期时间只增 5-10%。

🔵 5 行 Key Takeaway
  • 显式能量项让 policy 学"轻柔而坚定"的动作,对磨损也友好
  • Height-based curriculum 单变量递降,比多 stage 好调
  • 30% success over 20 episodes 是自适应触发,不固定 epoch
  • 禁用早期碰撞检查减少虚假终止,能加速前期学习
  • Action rate limit + LPF 是 sim2real 平滑动作的必要保险
🟠 对赛题的迁移决赛综合评分包含作业效率维度,能量项直接免费加分;自适应 curriculum trigger 是 v3.0 D4 生死门检查的机制(50% success 不满则 pause 而非硬扛)。

🔧 本地已 clone · Local Resources (2 项)

ROS2-Forklift-Simulation GitHub · 35★

cangozpi · ROS2 Humble + Gazebo 11 + gym 0.21 + SB3 + PyTorch · 最新 commit 2024-02-20
🟡 一句话总结: 开源的 Gazebo 叉车导航 RL 完整实现,4 种 reward 工厂可以逐行搬到 MJX。但只训导航到 pallet,没有插叉和搬运。
🟢 初学者视角 这个仓最有价值的是它的 Factory 模式代码组织 —— 4 种 reward (L2 距离、导航奖励、碰撞惩罚、二值成功) 各写成一个类,想换用哪种就实例化哪个。这种可插拔架构方便我们在实验里对比不同 reward 的效果。局限:Gazebo 单进程仿真,GPU 用不上,一次训练要几十小时;而且只训到 pallet 前 2m,没有插叉/搬运/放置。
强项
4 种 reward 已成熟;工厂模式便于扩展;差速 + 阿克曼双底盘
弱项
只训导航;Gazebo 无向量化;URDF 需手工转 MJCF;无 checkpoint
本地路径
reference/ROS2-Forklift-Simulation/src/forklift_gym_env/
🟠 对赛题的迁移forklift_env_Rewards_utils.py 里 L2/Nav/Collision/Binary 四个 reward 可以逐行搬进 src/rl/reward_factory.py(签名从 ROS topic 改成 MJX mjx.Data);Ackermann 底盘的参数验证结果直接借鉴。

IsaacSim-Autonomous-Forklift GitHub · 36★ · MIT

iminolee · Isaac Sim + Gazebo 双后端 + Replicator + ROS2 · 最新 commit 2025-02-03
🟡 一句话总结: NVIDIA 官方 forklift_b.urdf 高保真模型,+ 3 种仓库场景 + 合成数据生成管道。算法闭源但资产可全用。
🟢 初学者视角 这个仓最值钱的是 URDF 模型本身 —— NVIDIA 官方建模的叉车有 50+ 个 mesh(轮子、叉齿、方向盘、门架...),精度远超我们自己写的 MJCF。把 URDF 转成 MJCF 就能作为高保真备胎。但注意 转换过程中要对照 CLAUDE.md 里记录的 MJX 兼容性坑:cylinder 轮子要改 capsule、solver iterations 要设成 10、box-box 接触要调 solimp 参数,否则会穿模。
强项
NVIDIA 官方 URDF 最高保真;3 种仓库难度递进;合成数据生成管道;MIT 协议
弱项
算法全闭源;无训练配方;Replicator 需 Isaac Sim 许可;URDF→MJCF 需手工验证
本地路径
reference/IsaacSim-Autonomous-Forklift/src/forklift_simulator/urdf/forklift_b.urdf
🟠 对赛题的迁移forklift_b.urdf 是全球最高保真的 open forklift 模型,转 MJCF 时对照 CLAUDE.md 记录的 MJX 兼容性坑点(cylinder→capsulesolver iterations=10solimp=[0.99, 0.999, 0.0001]);合成数据管道能对应决赛感知模块。

🚀 迁移优先级清单 · Action Items for v3.0

ROI × 落地难度 排序 —— P1/P2 是 D4 生死门(07-05)前就要评估的核心 idea。每条我都给出了 为什么这样做 / 如果不做会怎样 / 具体在哪里改 三个信息。

立方衰减 cargo 摇晃惩罚 P0 决赛防翻

怎么做:C3 place phase reward 里加一项:

r_stability = -w_tilt · (cargo_angular_vel³ + cargo_angular_acc²)

为什么这样做:决赛"cargo 翻倒 = 直接失败"是硬约束,不能靠事后判断。立方项在低速时几乎不惩罚(不干扰正常动作),高速时惩罚陡增(强力约束摇晃)。

如果不做:v11a 已经证明过 —— 强调 w_head 导致 rollout 0 cargo tilt 179°,直接翻。

落地:src/rl/forklift_env.py C3 reward 加两行,当天生效。参考 LUT + ETH 联合方案。

分阶段独立 reward,phase 间不共享 shaping P0 v11a 教训

怎么做:C1/C2/C3 各自独立 reward 函数,一个 phase 的参数改动不影响另一个。

为什么这样做:v11a 的直接教训 —— 单参数 w_head 2→5 全局崩(cargo tilt 179°),就是因为多个 phase 共用一个 cost_fn。

如果不做:任何调参都是全局副作用,永远调不完。手调路线的死路。

落地:src/rl/forklift_env.py InsertLift 内部按 fork tip x 坐标分段,分段独立 shaping。参考 LUT 的两阶段方案。

Place 阶段倒数奖励 P1 精度关键

怎么做:C3 place reward 用:

R_place = λ / (d_target + ε) + R_success

其中 ε=0.05m 防除零,λ=1.0 起步。

为什么这样做:决赛要求放置误差 < 10cm,常规 exp(-d) 曲线在 d 已经很小时几乎平掉,算法感觉"再努力也没多少分"就停在 4-5cm;倒数型 1/d 在 d 越小奖励涨得越猛,拉住算法继续精修到 1-2cm。

如果不做:放置精度停在 4-5cm,达不到 10cm 边缘就危险,直接决赛掉分。

落地:5 行 code,C2 收敛后启用。参考 HMER。

Beta 分布 action 参数化 P1 训练稳定性

怎么做:改 brax 的 make_networks,policy head 输出 Beta 参数 (α, β),action 天然取值 [-1, 1]

为什么这样做:MJX vmap 里 tanh + clip 在训练晚期梯度截断问题明显 —— action 越靠近边界,梯度越小,policy 越难精调。Beta 分布本身就在边界内,不需要 clip,梯度全程完整。

如果不做:训练后期 policy 无法精细调整 action,收敛到次优解。

落地:约 20 行 code(brax 支持 tfp.distributions.Beta),1 天内完成。参考 TU Wien。

One-shot 终止奖励 P2 防抖动

怎么做:C3 phase reward 加:

r_one_shot = -w · ‖action‖² · I[dist < 0.1 ∧ speed < 0.05]

翻译:当距离目标 < 10cm 且速度 < 5cm/s 时,任何动作都被惩罚。

为什么这样做:v10 FSM 用 velocity brake 实现"到位就停",neural policy 也需要类似机制,否则会在目标点附近反复摇摆。

如果不做:policy 到达后仍持续小幅动作,决赛"放置误差"和"稳定性"两项都掉分。

落地:3 行 code。参考 ETH。

Reward 项 curriculum 缓入 P2 训练稳定

怎么做:不是 epoch 0 全部 reward 都上,而是逐步加入。C1 只用 r_progress;C2 加入 r_align + r_lift_dense;C3 再加 r_place + r_stability + r_one_shot

为什么这样做:多个 reward 项在早期会互相干扰(比如 lift 奖励要求叉齿抬,carrying 奖励要求叉齿下,算法一头雾水)。缓入让 policy 每次只专注一个新目标。

如果不做:训练前期 policy 卡在 local optima,长时间不进步。

落地:配合分阶段 reward 一起改。参考 ETH 的 7 项 curriculum。

BC → PPO 混合预训练 P2 加速收敛

怎么做:用 v10 FSM 生成 10k 演示轨迹(每条 300 步),BC 50 轮预训练 policy,再 PPO fine-tune。

为什么这样做:纯 PPO 从零开始需要 5M+ 步,BC 预训练能把 policy 直接推到 60-70% success 的水平,PPO 再精调到 90%+。也能规避 c2_v5 的 r_lift_dense 梯度稀疏问题。

如果不做:训练时间翻倍,3090 上从 2h 变 4h,迭代速度掉一半。

落地:2-3 天(生成轨迹 + BC 脚本 + brax restore_params)。参考 HMER。

显式能量优化 reward P3 决赛加分

怎么做:C3 完成后加:

R_total = R_success / (1 + 0.1 · E_normalized)

其中 E = Σ|torque · ω|·dt 覆盖底盘 + 升降。

为什么这样做:决赛综合评分包含"作业效率",能量项让 policy 自动学"轻柔的力量" —— 一石二鸟同时优化能耗和成功率。

如果不做:效率分基本靠随机 —— policy 可能选择"猛冲式"动作,能耗高但也没被惩罚。

落地:1 天,C3 收敛后启用。参考 Umeå。

ROS2-Forklift 的 4 种 reward 工厂搬到 MJX P4 baseline 对比

怎么做:把 L2/Nav/Collision/Binary 四种 reward 移植到 src/rl/reward_factory.py,签名从 ROS topic 改成 MJX mjx.Data

为什么这样做:有对照组 baseline 才能证明我们的自研 reward 更好,论文和答辩都需要这类对比表。

如果不做:训练结果无法量化"我们的 reward 好在哪",答辩缺乏说服力。

落地:1 天。

IsaacSim forklift_b.urdf 转 MJCF P4 备胎

怎么做:手工转 URDF → MJCF,对照 CLAUDE.md 记录的坑点(cylinder→capsule、solver iterations=10、solimp)。

为什么这样做:如果我们自研的 pickup_place.xml 有物理问题(box-box 穿模、接触抖动),NVIDIA 官方 URDF 是最高保真的 fallback。

如果不做:自研 MJCF 若长期有物理稳定性问题,只能反复调试,浪费大量时间。

落地:2-3 天。

🧭 推荐学习路径

按你的角色和目标,给几个不同的读法建议。

🆕 我完全是 RL 新手,只想 30 分钟了解全局

顺序读:三分钟先导关键词速查叉车 pick-place 全景综述结论。跳过所有论文卡片。

如果有兴趣继续,选一篇最想懂的论文,只看它的🟡 一句话总结🟢 初学者视角两栏。

🎓 我在学 RL,想深入理解 reward 设计

直奔 LUT / TU Wien / ETH / Umeå 四篇 —— reward 公式最详细。特别注意:

🏗️ 我是这个赛题的参赛者,想直接找可用的 idea

只读 综述结论 + 迁移优先级清单。清单里 P0/P1 的四条(立方衰减、分阶段独立 reward、倒数奖励、Beta 分布)加起来约 1 周工作量,能把训练成绩推到当前 baseline 的 2-3 倍。

🔬 我关心 sim2real,想看真机验证的经验

唯一真机重工业验证是 ETH Hydraulic Handler。核心 idea:混合仿真(数据驱动 NN + 解析模型)+ 控制器参数 DR。Toyota 也做了 sim2real 但只到 1/14 缩放叉车,scale-up 未验证。

如果关心视觉感知,读 Lang2Lift(VLM + SAM-2 + FoundationPose 的完整流水线)。

💻 我想直接开始撸代码,有可以 clone 的仓库吗?

是的,读 本地已 clone 2 项ROS2-Forklift-Simulation 是完整可跑的 Gym 环境(导航任务),IsaacSim-Autonomous-Forklift 提供高保真 URDF 模型。都在本地 reference/ 目录下。

但注意:两个都没有 pretrained 权重,并且没有涉及叉取/搬运/放置的完整链路,只能作为参考。

🔗 参考链接 · References

HMER 天大 arXiv

Multi-Expert Forklift RL 94.2% sim

Toyota Visual Forklift ICRA25

Isaac Sim + zero-shot sim2real 60% real

ADAPT AIT+TU Wien

iSAM2 + Hybrid A* outdoor autonomous

Lang2Lift AIT

Florence-2 + SAM-2 + FoundationPose

Semi-Auto Vision arXiv

YOLOv11 + Optuna + pallet 孔位映射

LUT Log Loading arXiv

Isaac Gym × 1024 + 分阶段 reward 94%

TU Wien Wood-Log ICRA25

MuJoCo + Beta 分布 action 96%

ETH Hydraulic Handler IROS24

12t 真机 + 7 项 curriculum reward

Umeå Forestry Crane IROS21

能量优化 reward,本领域开山之作 97%

ROS2-Forklift-Simulation GitHub

Gazebo 完整 Gym + 4 种 reward

IsaacSim-Autonomous-Forklift GitHub · MIT

NVIDIA forklift_b.urdf + 3 仓库场景

← 返回 VLA Atlas index

本页所属的 VLA 全景索引