def __init__()

in robogym/envs/dactyl/face_perpendicular.py [0:0]


    def __init__(self, mujoco_simulation):
        super().__init__(mujoco_simulation)

        self.register_joint_group("cube_position", prefix="cube:cube:t")
        self.register_joint_group("cube_rotation", prefix="cube:cube:rot")

        self.register_joint_group_by_name(
            "cube_top_face_driver", name="cube:cubelet:driver:pos_z"
        )
        self.register_joint_group_by_name(
            "cube_bottom_face_driver", name="cube:cubelet:driver:neg_z"
        )

        self.register_joint_group_by_name(
            "cube_drivers",
            name=["cube:cubelet:driver:pos_z", "cube:cubelet:driver:neg_z"],
        )

        self.register_joint_group_by_name(
            "cube_top_face",
            name=[
                "cube:cubelet:driver:pos_z",
                "cube:cubelet:rotz:neg_x_pos_y_pos_z",
                "cube:cubelet:rotz:neg_x_neg_y_pos_z",
                "cube:cubelet:rotz:neg_x_pos_z",
                "cube:cubelet:rotz:pos_x_pos_z",
                "cube:cubelet:rotz:pos_x_neg_y_pos_z",
                "cube:cubelet:rotz:pos_x_pos_y_pos_z",
                "cube:cubelet:rotz:neg_y_pos_z",
                "cube:cubelet:rotz:pos_y_pos_z",
            ],
        )

        self.register_joint_group_by_name(
            "cube_bottom_face",
            name=[
                "cube:cubelet:driver:neg_z",
                "cube:cubelet:rotz:neg_x_pos_y_neg_z",
                "cube:cubelet:rotz:neg_x_neg_y_neg_z",
                "cube:cubelet:rotz:neg_x_neg_z",
                "cube:cubelet:rotz:pos_x_neg_z",
                "cube:cubelet:rotz:pos_x_neg_y_neg_z",
                "cube:cubelet:rotz:pos_x_pos_y_neg_z",
                "cube:cubelet:rotz:neg_y_neg_z",
                "cube:cubelet:rotz:pos_y_neg_z",
            ],
        )

        self.register_joint_group("cube_springs", prefix="cube:cubelet:spring:")

        self.register_joint_group("target_position", prefix="target:cube:t")
        self.register_joint_group("target_rotation", prefix="target:cube:rot")

        self.register_joint_group_by_name(
            "target_top_face_driver", name="target:cubelet:driver:pos_z"
        )
        self.register_joint_group_by_name(
            "target_bottom_face_driver", name="target:cubelet:driver:neg_z"
        )

        self.register_joint_group_by_name(
            "target_drivers",
            name=["target:cubelet:driver:pos_z", "target:cubelet:driver:neg_z"],
        )

        self.register_joint_group_by_name(
            "target_top_face",
            name=[
                "target:cubelet:driver:pos_z",
                "target:cubelet:rotz:neg_x_pos_y_pos_z",
                "target:cubelet:rotz:neg_x_neg_y_pos_z",
                "target:cubelet:rotz:neg_x_pos_z",
                "target:cubelet:rotz:pos_x_pos_z",
                "target:cubelet:rotz:pos_x_neg_y_pos_z",
                "target:cubelet:rotz:pos_x_pos_y_pos_z",
                "target:cubelet:rotz:neg_y_pos_z",
                "target:cubelet:rotz:pos_y_pos_z",
            ],
        )

        self.register_joint_group_by_name(
            "target_bottom_face",
            name=[
                "target:cubelet:driver:neg_z",
                "target:cubelet:rotz:neg_x_pos_y_neg_z",
                "target:cubelet:rotz:neg_x_neg_y_neg_z",
                "target:cubelet:rotz:neg_x_neg_z",
                "target:cubelet:rotz:pos_x_neg_z",
                "target:cubelet:rotz:pos_x_neg_y_neg_z",
                "target:cubelet:rotz:pos_x_pos_y_neg_z",
                "target:cubelet:rotz:neg_y_neg_z",
                "target:cubelet:rotz:pos_y_neg_z",
            ],
        )

        self.register_joint_group("target_springs", prefix="target:cubelet:spring:")

        self.register_joint_group("target_all_joints", prefix="target:")

        self.register_joint_group("hand_angle", prefix="robot0:")