def METHOD_NAME(self, pose: Pose) -> list[Joint]:
    """Computes inverse kinematics.
    Works with robot-relative pose.
    Inspired by DobotKinematics.py from open-dobot project and DobotInverseKinematics.py from BenchBot.
    :param pose: IK target pose (relative to robot)
    :return: Inverse kinematics
    """
    self._check_orientation(pose)
    # TODO this is probably not working properly (use similar solution as in _check_orientation?)
    _, _, yaw = quaternion.as_euler_angles(pose.orientation.as_quaternion())
    x = pose.position.x
    y = pose.position.y
    z = pose.position.z + self.end_effector_length
    # pre-compute distances
    # radial position of end effector in the x-y plane
    r = math.sqrt(math.pow(x, 2) + math.pow(y, 2))
    rho_sq = pow(r - self.link_4_length, 2) + pow(z, 2)
    rho = math.sqrt(rho_sq)  # distance b/w the ends of the links joined at the elbow
    l2_sq = self.link_2_length**2
    l3_sq = self.link_3_length**2
    # law of cosines
    try:
        alpha = math.acos((l2_sq + rho_sq - l3_sq) / (2.0 * self.link_2_length * rho))
        gamma = math.acos((l2_sq + l3_sq - rho_sq) / (2.0 * self.link_2_length * self.link_3_length))
    except ValueError:
        raise DobotException("Failed to compute IK.")
    beta = math.atan2(z, r - self.link_4_length)
    # joint angles
    baseAngle = math.atan2(y, x)
    rearAngle = math.pi / 2 - beta - alpha
    frontAngle = math.pi / 2 - gamma
    joints = [
        Joint(Joints.J1, baseAngle),
        Joint(Joints.J2, rearAngle),
        Joint(Joints.J3, frontAngle),
        Joint(Joints.J4, -rearAngle - frontAngle),
        Joint(Joints.J5, yaw - baseAngle),
    ]
    self.validate_joints(joints)
    return joints