【Text2reward】环境状态信息学习笔记
1. LiftCube-v0
1.1 self.obj: sapien.Actor
表示场景中可交互的立方体对象,是机器人操作任务的目标物体。该立方体具有以下特性:
- 几何属性:立方体尺寸通过
self.cube_half_size
定义(默认值[0.02, 0.02, 0.02]
),表示立方体在 XYZ 三个方向的半长 - 物理属性:具有碰撞体和质量属性,支持物理模拟交互(如抓取、推动、掉落等行为)
1.1.1 初始化:self.obj = self._build_cube(self.cube_half_size)
通过 self.obj.set_pose()
设置初始姿态,之后可通过 self.obj.pose.p
获取当前中心点坐标;
2. PickCube-v0
3. TurnFaucet-v0
3.1 self.target_angle: float
单位: 弧度(rad)
描述:
表示水龙头开关关节需要旋转到的目标角度值,是任务成功的关键指标。该参数具有以下特性:
计算逻辑:
# 在 _set_init_and_target_angle 方法中计算
qmin, qmax = self.target_joint.get_limits()[0]
self.target_angle = qmin + (qmax - qmin) * 0.9 # 取关节运动范围的90%位置
任务关联:
- 作为
TurnFaucet
任务的核心成功条件 - 当前关节角度通过
self.current_angle
属性获取 - 角度差值
angle_dist = target_angle - current_angle
用于奖励计算
3.2 self.current_angle: float
单位: 弧度(rad)
描述:
表示水龙头开关关节的当前旋转角度值,是任务状态监测的核心参数。该参数具有以下特性:
计算方式:
@property
def current_angle(self):
return self.faucet.get_qpos()[self.target_joint_idx]
任务关联:
- 与
self.target_angle
共同构成角度差值angle_dist = target_angle - current_angle
- 在
evaluate()
方法中用于计算最终任务成功率 - 作为
compute_dense_reward()
的核心输入参数,影响奖励函数的计算逻辑
4. OpenCabinetDrawer-v1
4.1 self.target_link.pose: sapien.Pose
描述:
表示目标关节连接部件的当前位姿信息,包含位置和旋转四元数。该参数是操作柜门/抽屉任务的核心空间坐标系参考点。
关键属性:
# 位置坐标 (x, y, z)
position = self.target_link.pose.p
# 旋转四元数 (w, x, y, z)
rotation = self.target_link.pose.q
任务关联:
- 在
_compute_grasp_poses
中计算抓取位姿的基准坐标系 - 用于
_set_target_handle_info
生成手柄点云的变换矩阵 - 作为
evaluate
方法中计算链接速度/角速度的基准
4.2 self.agent.get_ee_coords_sample()
获取末端执行器(End-Effector)几何采样点的三维坐标,用于密集奖励计算和接触点分析。该方法在操作类任务中常用于计算夹爪与目标物体的空间关系。
返回值:
np.ndarray # 形状为 [2, 10, 3] 的三维数组
- 第一维度:表示左右两个夹爪
- 第二维度:每个夹爪上采样的10个空间点
- 第三维度:三维坐标值 (X, Y, Z)
典型应用场景:[calculate ee_coords]
通过计算夹爪采样点与目标手柄点云的最小距离,生成抓取奖励信号
几何特性:
- 采样点分布在夹爪的接触表面
- 坐标值基于世界坐标系
- 动态更新反映夹爪的实时位姿变化
4.3 self.target_handle_pcd: np.ndarray
形状: [N, 3]
(N=100 个三维坐标点)
描述:
表示目标柜门/抽屉手柄的三维点云坐标,用于密集奖励计算中的空间关系分析。该点云数据在 【_set_target_handle_info()】 方法中生成;
任务关联:
- 在
OpenCabinetDoor
和OpenCabinetDrawer
任务中用于计算夹爪与手柄的接近度 - 作为
compute_dense_reward
的核心输入参数,影响抓取阶段的奖励计算 - 点云坐标系基于手柄部件的局部坐标系
动态特性:
- 每个 episode 初始化时随机重新采样
- 通过位姿变换矩阵转换到世界坐标系,示例如下:[code]
handle_pose = self.target_link.pose
handle_pcd = transform_points(
handle_pose.to_transformation_matrix(),
self.target_handle_pcd
)
4.4 self.target_handle_sdf.signed_distance(ee_center_at_handle)
参数:
ee_center_at_handle: np.ndarray # 形状为 [N, 3] 的数组,表示夹爪中心点在手柄局部坐标系中的坐标
返回值:
np.ndarray # 形状为 [N,] 的数组,包含每个采样点到手柄网格表面的符号距离
- 正值: 表示点在网格外部
- 负值: 表示点在网格内部
- 零值: 表示点在网格表面
功能描述:
该方法用于计算夹爪中心点与目标手柄几何表面的空间关系,是密集奖励计算中抓取质量评估的核心指标。具体实现基于 trimesh.proximity.ProximityQuery 库。
任务关联性: [code]
在 compute_dense_reward
中用于生成抓取奖励信号:
- 当最大符号距离>0时表示夹爪有效包裹手柄;
- 距离值映射到[-1,0]区间作为奖励分量;
4.5 info["open_enough"]
类型: bool
描述:
表示目标柜门/抽屉是否已开启到预设阈值,是任务成功判定的核心指标。该参数通过以下逻辑计算:
计算逻辑:
# 在 evaluate 方法中计算 (line 341-345)
link_qpos = self.link_qpos # 当前关节位置
qmin, qmax = self.target_joint.get_limits()[0]
self.target_qpos = qmin + (qmax - qmin) * 0.9 # 目标开启位置为运动范围的90%
flags["open_enough"] = link_qpos >= self.target_qpos
任务关联:
- 作为
evaluate()
方法返回的核心成功标志 - 直接影响
success
的最终判定:
success = flags["open_enough"] and flags["cabinet_static"]
5. OpenCabinetDrawer-v1
6. PushChair-v1
6.1 self.agent.get_ee_coords()
获取双机械臂末端执行器(End-Effector)的实时三维坐标,用于计算夹爪与目标物体的空间交互关系。该方法在推椅子任务中主要用于评估机械臂与椅子的接触状态。
返回值:
np.ndarray # 形状为 [2, 3] 的二维数组
- 第一维度:表示左右两个机械臂(左臂索引0,右臂索引1)
- 第二维度:三维坐标值 (X, Y, Z)
- 坐标系:世界坐标系
任务关联: [code]
在 compute_dense_reward
中用于计算夹爪与椅子的距离:
- 计算夹爪坐标与椅子点云的最小距离
- 生成接触奖励信号
- 评估机械臂是否处于有效操作位置
6.2 self._get_chair_pcd()
生成椅子在当前关节状态下的三维点云表示,用于密集奖励计算和空间关系分析。该方法通过聚合椅子各部件链接的点云数据构建完整椅子模型。
返回值:
np.ndarray # 形状为 [N, 3] 的二维数组
- N: 点云总数(取决于椅子部件数量和采样密度)
- 三维坐标值 (X, Y, Z) 基于世界坐标系
生成逻辑: [code]
- 遍历椅子所有链接部件
- 获取每个部件的局部点云数据
- 应用部件当前位姿的变换矩阵到局部点云
- 合并所有变换后的点云数据
任务关联: [code]
在 compute_dense_reward
中用于:
- 计算机械臂末端与椅子的最小距离
- 评估接触状态
- 生成空间接近度奖励信号
6.3 info["chair_tilt"]: float
表示椅子根链接(root link)与垂直方向的倾斜角度,用于评估椅子是否保持直立状态。
计算逻辑:
z_axis_chair = self.root_link.pose.to_transformation_matrix()[:3, 2]
chair_tilt = np.arccos(z_axis_chair[2]) # 计算Z轴与全局Z轴(0,0,1)的夹角
物理意义:
- 值域范围: [0, π/2] 弧度
- 0 弧度: 椅子完全直立
- π/2 弧度: 椅子完全平躺
任务关联: [code]
在 evaluate
方法中用于:
- 判断成功条件
chair_standing=chair_tilt < 0.05 * np.pi
- 生成密集奖励信号
reward += -chair_tilt * 0.2
6.4 chair_vel = self.root_link.velocity[:2]
[code]
类型: np.ndarray
形状: (2,)
描述:
表示椅子根链接(root link)在水平面(XY平面)的线速度向量,用于评估椅子移动状态和方向有效性。
物理意义:
- 元素 [0]: X轴方向速度分量(单位:米/秒)
- 元素 [1]: Y轴方向速度分量(单位:米/秒)
- 忽略Z轴垂直方向速度分量
任务关联: [code]
在 compute_dense_reward
中用于:
- 计算速度模长
chair_vel_norm = np.linalg.norm(chair_vel)
- 评估速度方向与目标方向的一致性
cos_chair_vel_to_target = sdist.cosine(disp_chair_to_target, chair_vel)
- 生成速度相关奖励信号
6.5 dist_chair_to_target = info["dist_chair_to_target"]
类型: float
描述:
表示椅子根链接(root link)与目标位置的二维欧氏距离,用于评估椅子是否成功移动到目标区域。
计算逻辑:
disp_chair_to_target = self.chair.pose.p[:2] - self.target_xy
dist_chair_to_target = np.linalg.norm(disp_chair_to_target)
物理意义:
- 单位:米
- 仅计算XY平面距离(忽略垂直方向)
- 值域范围: [0, +∞)
6.6 chair_ang_vel_norm = info["chair_ang_vel_norm"]
类型: float
描述:
表示椅子根链接(root link)的角速度模长,用于评估椅子的旋转状态稳定性。
计算逻辑:
ang_vel_norm = np.linalg.norm(self.root_link.angular_velocity)
物理意义:
- 单位:弧度/秒 (rad/s)
- 值域范围: [0, +∞)
- 0 表示无旋转运动
- 值越大表示旋转速度越快
任务关联: [code]
在 evaluate
方法中用于:
- 生成观测指标
chair_ang_vel_norm=ang_vel_norm
- 间接影响成功判定(需结合线速度指标)