ICRA 2025叉车顶会论文拆解:不用真实数据,如何实现AGV视觉零样本Sim2Real?
ICRA 2025叉车顶会论文拆解:不用真实数据,如何让AGV实现视觉零样本Sim2Real装载?
这次换一篇和之前完全不同风格的论文。
如果说系统级自动叉车论文强调的是“感知、规划、控制全链路打通”,那么这篇论文更强调另一条路线:
只靠高保真仿真环境训练,不使用真实训练数据,能不能让叉车学会视觉控制,并直接迁移到真实世界?
一、为什么这篇论文值得分析?
近几年 AGV / 自动叉车方向的论文,大多集中在这些模块上:
- 托盘检测
- 路径规划
- 定位建图
- 对接控制
- 系统级集成
但这篇论文走的是另一条思路:
不先堆传统模块,而是尝试直接让叉车通过视觉学会“接近托盘并完成装载”这件事。
更关键的是,作者给自己设定了一个非常硬核的前提:
训练阶段完全不使用真实世界数据。
这件事为什么难?因为叉车任务本身就有很高风险:
- 失败代价高
- 真实试错成本高
- 采集失败数据不安全
- 强化学习又通常很依赖大量交互
所以,这篇论文真正回答的问题是:
如果只依靠高保真仿真、域随机化和视觉强化学习,叉车能不能实现 zero-shot sim2real?
二、这篇论文到底在解决什么问题?
论文聚焦的是平衡重式叉车(counterbalance forklift)的托盘装载任务。
这类叉车在工业中非常常见,但自动化难度并不低,因为它在接近托盘时并不是简单的“直线前进”,而是一个需要不断修正姿态、控制速度、判断装载时机的复杂过程。
论文把任务拆成了两步:
1)接近托盘
叉车从随机初始位置出发,仅根据视觉与速度信息,控制油门和转向,逐步靠近托盘。
2)决定是否起叉
当叉车停止后,再由一个单独的模型判断当前是否已经接近成功,是否应该执行抬叉装载。
这个拆分其实非常工程化,因为它没有强行把整件事做成一个完全黑盒的大策略,而是保留了关键动作节点上的“安全判断”。
一句话总结就是:
接近过程交给强化学习,是否起叉交给监督学习决策。
三、整篇论文的核心构思:先在数字环境里学,再迁移到真实小比例叉车
这篇论文的整体技术路线可以概括为:
高保真仿真训练 → 视觉策略学习 → zero-shot sim2real → 真实小比例叉车验证
作者并没有一开始就上真实全尺寸工业叉车,而是先设计了一个1/14 比例的真实验证平台。
这种做法很聪明,因为它在保留叉车关键结构和运动特性的同时,大幅降低了真实试验的风险和成本。
这个思路特别适合工程项目借鉴:
对于高风险 AGV / 叉车任务,不是“能学就直接上真机”,而是“先在安全尺度上验证路线可不可行”。
四、这篇论文最有意思的一点:输入设计很像人类驾驶员
作者在设计视觉输入时,并不是随便装相机,而是参考了人类叉车操作员的观察方式。
人类在装载托盘时,往往会重点观察:
- 货叉和托盘孔位之间的相对位置
- 左右是否对齐
- 当前速度是否合适
因此,论文在叉车左右两侧各装了一台相机,用于观察货叉与托盘之间的相对关系。
除此之外,策略还输入了:
- 速度信息
- 偏航角速度
- 历史动作信息
这说明作者虽然做的是端到端学习,但并不是“为了端到端而端到端”,而是有很强的任务建模意识。
五、接近策略是怎么做的?
5.1 输入是什么?
两路相机图像原始分辨率为352×288 RGB,先缩放到224×224,再通过ImageNet 预训练 ResNet提取视觉特征。
然后再把这些视觉特征和以下信息拼接:
- 速度
- 偏航角速度
- 历史动作
最终形成一个高维状态向量,送入控制策略网络。
这个设计背后的逻辑很清楚:
视觉负责看清托盘与货叉关系,运动信息负责补足动态状态。
5.2 输出是什么?
策略网络直接输出两个连续控制量:
- 油门
- 转向
也就是说,论文研究的是一个比较典型的端到端控制问题:
at=πθ(ot) a_t = \pi_\theta(o_t)at=πθ(ot)
其中:
- oto_tot表示当前观测
- πθ\pi_\thetaπθ表示参数化策略网络
- ata_tat表示当前输出动作
这里的动作并不是高层导航指令,而是真正接近底层控制的连续控制量。
六、为什么选 PPO?
论文在接近策略训练中使用的是PPO(Proximal Policy Optimization)。
PPO 在机器人控制里很常见,主要原因是:
- 训练相对稳定
- 对连续动作控制比较友好
- 不像某些方法那样容易更新过猛导致策略崩掉
论文的总损失可以抽象写成:
L=Lppo+λvLv−λeH+λbLb L = L_{\text{ppo}} + \lambda_v L_v - \lambda_e H + \lambda_b L_bL=Lppo+λvLv−λeH+λbLb
其中:
- LppoL_{\text{ppo}}Lppo是 PPO 策略损失
- LvL_vLv是状态值损失
- HHH是熵正则项
- LbL_bLb是边界损失
这里最值得注意的是边界损失。
它的作用不是追求更激进的动作,而是抑制动作过大,避免叉车控制过于突兀。
这一点非常符合叉车任务本身的特点:
自动叉车不是竞速小车,动作平稳性和安全性比“冲得快”更重要。
七、这篇论文真正值得学的,是奖励函数怎么设计
强化学习论文很多,但真正决定任务能不能学出来的,往往不是网络结构,而是奖励函数。
这篇论文的奖励设计非常有针对性。
它没有简单地只奖励“到达目标”,而是围绕叉车装载任务本身,设计了更细致的约束。
正奖励部分主要鼓励:
- 更接近托盘
- 更接近参考轨迹
- 朝向更贴合装载方向
- 成功到达装载位置
可以抽象表示为:
r+=w1(−dpallet)+w2(−dcurve)+w3(−∣Δθ∣)+rgoal r_{+} = w_1(-d_{\text{pallet}}) + w_2(-d_{\text{curve}}) + w_3(-|\Delta \theta|) + r_{\text{goal}}r+=w1(−dpallet)+w2(−dcurve)+w3(−∣Δθ∣)+rgoal
其中:
- dpalletd_{\text{pallet}}dpallet表示货叉到托盘的距离
- dcurved_{\text{curve}}dcurve表示与参考曲线的偏差
- Δθ\Delta \thetaΔθ表示朝向误差
与此同时,论文还加入了多个惩罚项,用来避免一些在真实叉车任务中特别危险或低效的行为:
- 撞动托盘
- 速度过大
- 动作抖动明显
- 长时间原地不动
整体奖励可以概括为:
r=r+−rcontact−rspeed−rjerk−rfreeze r = r_{+} - r_{\text{contact}} - r_{\text{speed}} - r_{\text{jerk}} - r_{\text{freeze}}r=r+−rcontact−rspeed−rjerk−rfreeze
这套设计说明作者非常清楚一点:
叉车任务不是普通导航任务,目标不是“开过去”,而是“安全、平稳、准确地插进去”。
八、为什么它能做到“不用真实训练数据”?
这是这篇论文最大的亮点之一。
作者使用了NVIDIA Omniverse Isaac Sim来搭建高保真数字环境,并基于CAD 模型和几何参数构建托盘、载荷和叉车环境。
也就是说,它不依赖真实拍摄图片来训练视觉策略,而是直接在数字世界里生成训练环境。
为了缩小 sim2real gap,作者还做了大量domain randomization(域随机化),包括:
- 地面颜色变化
- 托盘颜色变化
- 载荷颜色变化
- 光照强度变化
- 光照色温变化
- 控制输入扰动
- 速度观测扰动
作者甚至考虑到了现实场景中的荧光灯反射问题。
这背后的核心逻辑是:
既然不能依赖真实数据补 gap,那就尽量把仿真环境做得更真实,同时把不确定因素尽量打散。
九、为什么还要单独做一个“是否起叉”的决策模型?
因为“看起来差不多对齐了”和“真的可以起叉”不是一回事。
所以作者在接近策略之后,又单独设计了一个二分类决策模型,用于判断:
- 当前是否已经成功接近托盘
- 是否应该执行抬叉动作
这个决策模块不是强化学习,而是一个监督学习分类器。
我们可以把它写成:
y=fϕ(ot),y∈{0,1} y = f_\phi(o_t), \quad y \in \{0,1\}y=fϕ(ot),y∈{0,1}
其中:
- oto_tot表示当前观测
- fϕf_\phifϕ表示决策模型
- y=1y=1y=1表示允许起叉
- y=0y=0y=0表示还不应该起叉
这个设计非常实用,因为它让系统在最关键的一步多了一层安全判断。
简单理解就是:
强化学习负责“怎么靠近”,监督学习负责“现在能不能装”。
十、真实验证平台长什么样?
论文没有直接上全尺寸工业叉车,而是改造了一台1/14 比例 LESU 叉车模型。
它依然保留了真实叉车的很多关键特征:
- 前轮驱动
- 后轮转向
- 货叉升降
- 货叉倾斜液压结构
真实平台上使用了:
- 两个侧向 USB 相机
- Raspberry Pi 4 运行 ROS
- motion capture 提供速度信息
- 控制频率约
15 Hz
这一点很值得注意。
它说明这篇论文的重点不是“堆很贵的硬件”,而是验证方法路线本身。
十一、实验结果怎么样?
这是最关键的一部分。
论文把仿真中训练好的策略,直接 zero-shot迁移到真实世界,中间没有用真实数据再微调。
11.1 接近任务成功率
真实实验中总共做了 10 次任务,结果如下:
- 方法本身成功率:60%
- 人类操作者 A:50%
- 人类操作者 B:40%
- 人类操作者 C:90%
这个结果很有意思。
它说明任务本身并不简单,不是“人来操作一定满分”。
而且作者特别指出,成功率最高的那位人类操作者采取了非常谨慎的驾驶风格,经常停下来反复观察画面。
这说明系统学到的是一种效率优先、较果断的接近策略,而不是特别保守的操作方式。
11.2 时间表现
平均成功时间方面:
- 论文方法:6.5 s
- 人类 A:7.7 s
- 人类 B:17.2 s
- 人类 C:24.5 s
也就是说,虽然系统整体成功率还不算特别高,但一旦成功,它完成任务的速度其实并不慢,甚至比大多数人类操作者更快。
这说明策略已经学会了比较明确的接近动作,而不是慢吞吞地试探。
11.3 起叉决策模块表现
起叉决策模块的成功率达到:
- 90%
唯一一次错误发生在货叉只插进托盘一侧的情况下。
这说明真正的主要瓶颈不是“要不要起叉”,而是前面视觉接近过程本身。
十二、这篇论文的创新点到底在哪?
如果只看表面,很容易觉得它只是“Isaac Sim + PPO + ResNet + 小车验证”。
但真正的创新并不在单个组件,而在于这几个部分的组合方式和问题设定。
创新点 1:完全不用真实训练数据
作者明确把“no real-world training data”作为研究前提,这对于高风险叉车任务非常有意义。
创新点 2:把视觉输入设计得更贴近人类驾驶逻辑
两侧相机观察货叉与托盘关系,这不是随便装的,而是从真实人工操作中抽象出来的。
创新点 3:真正做了 zero-shot sim2real
不是先在仿真里训练,再拿少量真实数据修修补补,而是直接迁移到真机做装载验证。
创新点 4:用了小比例真实叉车做中间过渡验证
这不是纯仿真,也不是直接硬上工业大叉车,而是一个非常现实的中间层方案。
十三、这篇论文的问题也很明显
它有价值,但还远没到工业可直接落地的程度。
1)60% 成功率还不够高
对于论文来说,60% 可以证明路线可行。
但对于工业 AGV / 自动叉车来说,这个成功率显然还不够。
2)验证平台仍然只是 1/14 比例
小比例平台能验证方向,但并不代表已经解决了全尺寸车辆动力学、安全性和执行器差异问题。
3)任务范围还比较窄
当前聚焦的是:
- 托盘接近
- 起叉决策
还没有扩展到更完整的搬运任务链,比如:
- 多托盘搬运
- 长距离导航
- 动态障碍绕行
- 系统级调度
4)部分状态信息来自 motion capture
真实实验中的速度信息来源于外部捕捉系统,这说明距离真正完全车载部署还有一步。
十四、如果我们做 AGV 项目,这篇论文最值得借鉴什么?
我觉得最值得借鉴的不是具体网络,而是这四个思路。
1)危险设备别直接在真机上“学”
对于 AGV、叉车这类设备,仿真训练 + 中间尺度真机验证,是非常合理的一条路线。
2)端到端不等于完全黑盒
这篇论文虽然用端到端强化学习控制接近过程,但依然把“是否起叉”独立做成一个监督学习模块,这很工程化。
3)视觉输入一定要贴近任务
不是相机越多越好,而是要看清真正决定任务成败的那部分信息。
4)sim2real 不只是随机化,更要有任务约束
奖励函数里把“不能撞托盘”“动作不要太抖”“不要僵在原地”都写进去,这比单纯追求到达目标更接近真实工业任务。
十五、我的理解:这篇论文代表的是另一条 AGV 路线
如果把这篇论文和传统系统级自动叉车论文放在一起看,会发现它们代表了两条很不一样的路线。
传统系统级路线更像:
- 感知模块化
- 规划模块化
- 控制模块化
- 强调全链路集成
这篇论文更像:
- 学习驱动
- 视觉直接服务控制
- 依赖高保真仿真与 sim2real
- 尝试减少真实数据依赖
这两条路线没有谁绝对更高级,但它们确实代表了 AGV / 自动叉车研究的两个方向:
一条是系统工程路线,一条是学习控制路线。
而这篇论文最有价值的地方就在于:
它让“学习控制”在叉车这类高风险设备上的应用,看起来第一次没那么遥远了。
十六、总结
这篇 ICRA 2025 论文最值得看的地方,不是它把自动叉车彻底做成熟了,而是它证明了一件事:
只靠高保真仿真、域随机化和视觉强化学习,叉车也有机会实现 zero-shot sim2real。
它的核心贡献可以概括为三点:
- 用高保真数字环境替代真实训练数据
- 用视觉和运动信息学习托盘接近策略
- 在真实小比例叉车上完成 zero-shot 装载验证
虽然目前 60% 的成功率还远没到工业落地标准,但这篇论文已经很清楚地告诉我们:
AGV / 自动叉车的未来,不一定只能靠传统模块堆起来,也可能逐步走向学习驱动的控制系统。
