文章目录
- 概述
- 方法
- 实验
- 代码初读
-
- 代码概览
- env.py
- camera.py
- panda_robot.py
- collect_data.py
- replay_data.py
- scripts/run_gen_offline_data.sh
- gen_offline_data.py
- datagen.py
- 3D Experiment训练脚本
- train_3d_critic.py 对应action scoring module D s D_s Ds的预训练
- model_3d_critic.py
- data.py
- gen_html_hierachy_local.py
- train_3d.py
- model_3d.py
- model_3d_critic_legacy.py 和 model_3d_critic.py
- visu_critic_heatmap.py
- 初识sapien
概述
方法
Actionability Scoring Module:计算逐点的action ability score a p a_p ap
Action Proposal Module:计算特定点的交互轨迹
Action scoring module:计算proposal action的成功概率
Tips: train one network per primitive action but across all shape categories
实验
两个指标(F-score,Sample-Succ),三个baseline和消融实验
the binary classification accuracy of the action scoring network Ds,F-score balancing precision and recall for the positive class.
代码初读
代码概览
gen_offline_data.py
是一个用于批量生成数据的脚本,调用DataGen类
。它接受命令行参数来控制数据生成的过程,并通过并行处理的方式生成与物体交互的模拟数据。通过run_gen_offline_data.sh
来调用。
DataGen类
描述详见后文
train_3d_critic.py
对应action scoring module D s D_s Ds 的预训练
train_3d.py
对应完整encoder和三个decoder。具体三个模块如下。
关于Critic和ActionScore的辨析:
-
Critic类,action scoring module,the interaction outcome
critic
只输入交互点的特征,和操作向量,输出操作成功的概率。👇one success likelihood score s R ∣ p s_{R|p} sR∣p for each action proposal R R R.
-
Actor类,Action Proposal Module
-
ActionScore类,Actionability Scoring Module
env.py
负责整个仿真环境的管理 ,由robot camera都会加入env的scene中
self.engine = sapien.Engine(0, 0.001, 0.005)
self.renderer = sapien.OptifuserRenderer(config=render_config) # 3.0弃用
self.engine.set_renderer(self.renderer)
self.renderer_controller = sapien.OptifuserController(self.renderer) # 3.0弃用
self.renderer_controller.set_camera_position # 3.0弃用
self.renderer_controller.set_camera_rotation # 3.0弃用
self.renderer_controller.render()
self.object.get_qpos()
self.scene.step()
#line97
for j in self.object.get_joints():
if j.get_dof() == 1: # 如果关节的自由度是 1(即可旋转或可平移),它会被认为是可移动的部件
self.movable_link_ids.append(j.get_child_link().get_id())
其中 j.get_dof()涉及到SAPIEN中关节自由度的定义,即”一个关节可以在多少个独立方向上移动“。
旋转关节(Revolute Joint):有 1 个 DOF,意味着它只能绕某个轴旋转。
平移关节(Prismatic Joint):有 1 个 DOF,意味着它只能沿某个方向平移。
球形关节(Spherical Joint):有 3 个 DOF,意味着它可以绕三个轴旋转。
固定关节(Fixed Joint):有 0 个 DOF,意味着它没有运动自由度。
j.get_child_link()获取的是child_link,简单来说base的那个是parent link,而姿态改变的那个是child link。
#line116
get_limits() 获取关节的角度限制,在 URDF 文件中通过 标签来指定
limits = j