utils.py — LIBERO 环境专用的工具函数¶
文件路径:
verl/experimental/vla/envs/libero_env/utils.py模块路径:verl.experimental.vla.envs.libero_env.utils
文件概述¶
LIBERO 环境专用的工具函数,包括图像提取、四元数转换和 gripper 动作处理。
核心函数¶
图像提取¶
def get_libero_image(obs, camera_name="agentview"):
"""从 LIBERO 观测中提取主相机图像"""
image = obs[f"{camera_name}_image"]
# LIBERO 图像是上下翻转的,需要修正
image = image[::-1]
return image
def get_libero_wrist_image(obs):
"""提取腕部相机图像"""
return get_libero_image(obs, camera_name="robot0_eye_in_hand")
四元数转换¶
def quat2axisangle(quat):
"""将四元数转换为轴角表示
机器人控制中,旋转可以用四元数或轴角表示。
LIBERO 使用轴角作为动作空间的旋转部分。
"""
# 标准化四元数
quat = quat / np.linalg.norm(quat)
# 计算旋转角度
angle = 2 * np.arccos(np.clip(quat[0], -1, 1))
# 计算旋转轴
if angle < 1e-6:
axis = np.array([0, 0, 1])
else:
axis = quat[1:] / np.sin(angle / 2)
return axis * angle
Gripper 动作处理¶
def normalize_gripper_action(action):
"""将 gripper 动作归一化到 [-1, 1]
LIBERO 中 gripper 动作范围可能不在标准范围内。
"""
return np.clip(action, -1, 1)
def invert_gripper_action(action):
"""反转 gripper 动作方向
某些仿真器的 gripper 开合方向与模型输出相反。
"""
return -action
核心函数列表¶
| 名称 | 说明 |
|---|---|
get_libero_image |
提取主相机图像 |
get_libero_wrist_image |
提取腕部相机图像 |
quat2axisangle |
四元数 -> 轴角转换 |
normalize_gripper_action |
gripper 动作归一化 |
invert_gripper_action |
gripper 方向反转 |
与其他模块的关系¶
- 被
LiberoEnv(libero_env.py)的观测提取和动作处理使用
小结¶
LIBERO 环境的底层数据处理工具,处理仿真器特有的数据格式问题。