Skip to content

Question about H1 Upper boddy IK #39

@Proguranto

Description

@Proguranto

Hi there,

Thanks so much for open-sourcing Bigym!!

I had a question about the H1 upper body IK solver.
When solving for the joint h1/left_wrist and h1/right_wrist, why do you solve for the cosine difference of up direction?
The reason I am confused is suppose I want to tilt the gripper upwards (assume the red axis is the direction the gripper is facing so I would like to rotate around the green axis) like the image:

Image

setting this as the target position will cause the joint h1/left_wrist and h1/right_wrist only rotate the gripper around the red axis instead because it solves for the cosine difference in the up direction. Something like this:

Image

Is this intended behavior or am I understanding this incorrectly?
Also, I tried fixing this by adding rotation actuators for the site as well in generate_ee_actuators and adding left/right wrist into self._arm_joints, does this work?

# lines 119-124
for joint in all_joints:
            if "wrist" not in joint.name.lower() and \
            (joint not in arm_joints or GRIPPER_NAME_PREFIX in joint.name.lower()):
                joint.remove()
            else:
                joint.damping = JOINT_DAMPING
                if joint.name in JOINT_LIMITS:
                    joint.range = JOINT_LIMITS[joint.name]

# lines 205-227
def _generate_ee_actuators(self, site: str, origin: str):
        x = self._model.actuator.add(
            "position",
            kp=KP,
            kv=KV,
            ctrlrange=RANGE_EE_POSITION,
            name=f"{site}_ee_x",
        )

        y = self._model.actuator.add(
            "position",
            kp=KP,
            kv=KV,
            ctrlrange=RANGE_EE_POSITION,
            name=f"{site}_ee_y",
        )

        z = self._model.actuator.add(
            "position",
            kp=KP,
            kv=KV,
            ctrlrange=RANGE_EE_POSITION,
            name=f"{site}_ee_z",
        )

        rx = self._model.actuator.add(
            "position",
            kp=ROT_KP,
            kv=ROT_KV,
            ctrlrange="-1.571 1.571",
            name=f"{site}_ee_rx",
        )

        ry = self._model.actuator.add(
            "position",
            kp=ROT_KP,
            kv=ROT_KV,
            ctrlrange="-1.571 1.571",
            name=f"{site}_ee_ry",
        )

        rz = self._model.actuator.add(
            "position",
            kp=ROT_KP,
            kv=ROT_KV,
            ctrlrange="-1.571 1.571",
            name=f"{site}_ee_rz",
        )

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions