fastdev.robo.warp_kinematics¶
Module Contents¶
- fastdev.robo.warp_kinematics.axis_angle_to_tf_mat(axis: warp.vec3, angle: warp.float32)[source]¶
- Parameters:
axis (warp.vec3)
angle (warp.float32)
- fastdev.robo.warp_kinematics.axis_distance_to_tf_mat(axis: warp.vec3, distance: warp.float32)[source]¶
- Parameters:
axis (warp.vec3)
distance (warp.float32)
- fastdev.robo.warp_kinematics.forward_kinematics_kernel(joint_values: wp.array2d(dtype=wp.float32), root_poses: wp.array2d(dtype=wp.mat44), joint_first_indices: wp.array(dtype=wp.int32), link_indices_topological_order: wp.array(dtype=wp.int32), parent_link_indices: wp.array(dtype=wp.int32), link_joint_indices: wp.array(dtype=wp.int32), link_joint_types: wp.array(dtype=wp.int32), link_joint_origins: wp.array(dtype=wp.mat44), link_joint_axes: wp.array(dtype=wp.vec3), link_first_indices: wp.array(dtype=wp.int32), link_poses: wp.array2d(dtype=wp.mat44))[source]¶
- Parameters:
joint_values (wp.array2d(dtype=wp.float32))
root_poses (wp.array2d(dtype=wp.mat44))
joint_first_indices (wp.array(dtype=wp.int32))
link_indices_topological_order (wp.array(dtype=wp.int32))
parent_link_indices (wp.array(dtype=wp.int32))
link_joint_indices (wp.array(dtype=wp.int32))
link_joint_types (wp.array(dtype=wp.int32))
link_joint_origins (wp.array(dtype=wp.mat44))
link_joint_axes (wp.array(dtype=wp.vec3))
link_first_indices (wp.array(dtype=wp.int32))
link_poses (wp.array2d(dtype=wp.mat44))
- class fastdev.robo.warp_kinematics.ForwardKinematics[source]¶
Bases:
torch.autograd.Function
- static forward(ctx, joint_values: jaxtyping.Float[torch.Tensor, ... total_num_joints], articulation: fastdev.robo.articulation.Articulation, root_poses: Optional[jaxtyping.Float[torch.Tensor, ... num_arti 4 4]] = None) jaxtyping.Float[torch.Tensor, ... total_num_links 4 4] [source]¶
- Parameters:
joint_values (jaxtyping.Float[torch.Tensor, ... total_num_joints])
articulation (fastdev.robo.articulation.Articulation)
root_poses (Optional[jaxtyping.Float[torch.Tensor, ... num_arti 4 4]])
- Return type:
jaxtyping.Float[torch.Tensor, … total_num_links 4 4]
- static backward(ctx, link_poses_grad: jaxtyping.Float[torch.Tensor, ... total_num_links 4 4]) Tuple[Optional[jaxtyping.Float[torch.Tensor, ... total_num_joints]], None, Optional[jaxtyping.Float[torch.Tensor, ... num_arti 4 4]]] [source]¶
- Parameters:
link_poses_grad (jaxtyping.Float[torch.Tensor, ... total_num_links 4 4])
- Return type:
Tuple[Optional[jaxtyping.Float[torch.Tensor, … total_num_joints]], None, Optional[jaxtyping.Float[torch.Tensor, … num_arti 4 4]]]
- fastdev.robo.warp_kinematics.forward_kinematics(joint_values: jaxtyping.Float[torch.Tensor, ... total_num_joints], articulation: fastdev.robo.articulation.Articulation, root_poses: Optional[jaxtyping.Float[torch.Tensor, ... num_arti 4 4]] = None) jaxtyping.Float[torch.Tensor, ... total_num_links 4 4] [source]¶
- Parameters:
joint_values (jaxtyping.Float[torch.Tensor, ... total_num_joints])
articulation (fastdev.robo.articulation.Articulation)
root_poses (Optional[jaxtyping.Float[torch.Tensor, ... num_arti 4 4]])
- Return type:
jaxtyping.Float[torch.Tensor, … total_num_links 4 4]
- fastdev.robo.warp_kinematics.forward_kinematics_numpy(joint_values: jaxtyping.Float[numpy.ndarray, ... total_num_joints], articulation: fastdev.robo.articulation.Articulation, root_poses: Optional[jaxtyping.Float[numpy.ndarray, ... num_arti 4 4]] = None) jaxtyping.Float[numpy.ndarray, ... total_num_links 4 4] [source]¶
- Parameters:
joint_values (jaxtyping.Float[numpy.ndarray, ... total_num_joints])
articulation (fastdev.robo.articulation.Articulation)
root_poses (Optional[jaxtyping.Float[numpy.ndarray, ... num_arti 4 4]])
- Return type:
jaxtyping.Float[numpy.ndarray, … total_num_links 4 4]
- fastdev.robo.warp_kinematics.calculate_jacobian_kernel(link_poses: wp.array2d(dtype=wp.mat44), target_link_indices: wp.array(dtype=wp.int32), ancestor_mask: wp.array(dtype=wp.int32), joint_axes: wp.array(dtype=wp.vec3), link_joint_types: wp.array(dtype=wp.int32), link_joint_indices: wp.array(dtype=wp.int32), link_joint_origins: wp.array(dtype=wp.mat44), parent_link_indices: wp.array(dtype=wp.int32), joint_first_indices: wp.array(dtype=wp.int32), link_first_indices: wp.array(dtype=wp.int32), jacobian: wp.array3d(dtype=wp.float32))[source]¶
Compute the Jacobian using precomputed target link poses.
- Parameters:
link_poses (wp.array2d(dtype=wp.mat44))
target_link_indices (wp.array(dtype=wp.int32))
ancestor_mask (wp.array(dtype=wp.int32))
joint_axes (wp.array(dtype=wp.vec3))
link_joint_types (wp.array(dtype=wp.int32))
link_joint_indices (wp.array(dtype=wp.int32))
link_joint_origins (wp.array(dtype=wp.mat44))
parent_link_indices (wp.array(dtype=wp.int32))
joint_first_indices (wp.array(dtype=wp.int32))
link_first_indices (wp.array(dtype=wp.int32))
jacobian (wp.array3d(dtype=wp.float32))
- class fastdev.robo.warp_kinematics.CalculateJacobian[source]¶
Bases:
torch.autograd.Function
- static forward(ctx, joint_values: jaxtyping.Float[torch.Tensor, ... total_num_joints], target_link_indices: torch.Tensor, articulation: fastdev.robo.articulation.Articulation, root_poses: Optional[jaxtyping.Float[torch.Tensor, ... num_arti 4 4]] = None) Tuple[jaxtyping.Float[torch.Tensor, ... 6 total_num_joints], jaxtyping.Float[torch.Tensor, ... num_arti 4 4]] [source]¶
Forward pass to compute Jacobian and target link poses.
- Parameters:
joint_values (jaxtyping.Float[torch.Tensor, ... total_num_joints])
target_link_indices (torch.Tensor)
articulation (fastdev.robo.articulation.Articulation)
root_poses (Optional[jaxtyping.Float[torch.Tensor, ... num_arti 4 4]])
- Return type:
Tuple[jaxtyping.Float[torch.Tensor, … 6 total_num_joints], jaxtyping.Float[torch.Tensor, … num_arti 4 4]]
- static backward(ctx, jacobian_grad: jaxtyping.Float[torch.Tensor, ... 6 total_num_joints], target_link_poses_grad: jaxtyping.Float[torch.Tensor, ... num_arti 4 4]) Tuple[Optional[jaxtyping.Float[torch.Tensor, ... total_num_joints]], None, None, Optional[jaxtyping.Float[torch.Tensor, ... num_arti 4 4]]] [source]¶
- Abstractmethod:
- Parameters:
jacobian_grad (jaxtyping.Float[torch.Tensor, ... 6 total_num_joints])
target_link_poses_grad (jaxtyping.Float[torch.Tensor, ... num_arti 4 4])
- Return type:
Tuple[Optional[jaxtyping.Float[torch.Tensor, … total_num_joints]], None, None, Optional[jaxtyping.Float[torch.Tensor, … num_arti 4 4]]]
Backward pass for propagating Jacobian gradients.
- fastdev.robo.warp_kinematics.calculate_jacobian(joint_values: jaxtyping.Float[torch.Tensor, ... total_num_joints], target_link_indices: torch.Tensor, articulation: fastdev.robo.articulation.Articulation, root_poses: Optional[jaxtyping.Float[torch.Tensor, ... num_arti 4 4]] = None, return_target_link_poses: bool = False) Union[jaxtyping.Float[torch.Tensor, ... 6 total_num_joints], Tuple[jaxtyping.Float[torch.Tensor, ... 6 total_num_joints], jaxtyping.Float[torch.Tensor, ... num_arti 4 4]]] [source]¶
- Parameters:
joint_values (jaxtyping.Float[torch.Tensor, ... total_num_joints])
target_link_indices (torch.Tensor)
articulation (fastdev.robo.articulation.Articulation)
root_poses (Optional[jaxtyping.Float[torch.Tensor, ... num_arti 4 4]])
return_target_link_poses (bool)
- Return type:
Union[jaxtyping.Float[torch.Tensor, … 6 total_num_joints], Tuple[jaxtyping.Float[torch.Tensor, … 6 total_num_joints], jaxtyping.Float[torch.Tensor, … num_arti 4 4]]]
- fastdev.robo.warp_kinematics.delta_pose_kernel(T_current: wp.array(dtype=wp.mat44), pos_target: wp.array(dtype=wp.vec3), quat_target: wp.array(dtype=wp.vec4), delta: wp.array2d(dtype=wp.float32)) None [source]¶
Compute delta pose error between current and target poses in axis-angle form.
- Parameters:
T_current (wp.array(dtype=wp.mat44))
pos_target (wp.array(dtype=wp.vec3))
quat_target (wp.array(dtype=wp.vec4))
delta (wp.array2d(dtype=wp.float32))
- Return type:
None
- fastdev.robo.warp_kinematics.delta_pose_warp(T_current: jaxtyping.Float[torch.Tensor, ... 4 4], pos_target: jaxtyping.Float[torch.Tensor, ... 3], quat_target: jaxtyping.Float[torch.Tensor, ... 4]) jaxtyping.Float[torch.Tensor, ... 6] [source]¶
- Parameters:
T_current (jaxtyping.Float[torch.Tensor, ... 4 4])
pos_target (jaxtyping.Float[torch.Tensor, ... 3])
quat_target (jaxtyping.Float[torch.Tensor, ... 4])
- Return type:
jaxtyping.Float[torch.Tensor, … 6]
- fastdev.robo.warp_kinematics.solve_lower_triangular(L: Any, b: Any) Any [source]¶
Solves for y in L y = b where L is lower triangular with unit diagonal.
- Returns:
the solution vector.
- Return type:
y
- Parameters:
L (Any)
b (Any)
- fastdev.robo.warp_kinematics.inverse_lu(A: Any) Any [source]¶
Computes the inverse of a square matrix using LU decomposition without pivoting.
- Returns:
the inverse of A.
- Return type:
A_inv
- Parameters:
A (Any)
- fastdev.robo.warp_kinematics.compute_dq_kernel_v2(J: wp.array3d(dtype=wp.float32), err: wp.array3d(dtype=wp.float32), A: wp.array3d(dtype=wp.float32), joint_first_indices: wp.array(dtype=wp.int32), damping: warp.float32, dq: wp.array2d(dtype=wp.float32)) None [source]¶
Compute joint velocity dq using a damped least-squares formulation.
- Parameters:
J (wp.array3d(dtype=wp.float32))
err (wp.array3d(dtype=wp.float32))
A (wp.array3d(dtype=wp.float32))
joint_first_indices (wp.array(dtype=wp.int32))
damping (warp.float32)
dq (wp.array2d(dtype=wp.float32))
- Return type:
None
- fastdev.robo.warp_kinematics.compute_dq_warp(J: jaxtyping.Float[torch.Tensor, ... 6 total_num_joints], err: jaxtyping.Float[torch.Tensor, ... num_arti 6], joint_first_indices_pt: jaxtyping.Int[torch.Tensor, compute_dq_warp.num_arti], damping: float) jaxtyping.Float[torch.Tensor, ... total_num_joints] [source]¶
- Parameters:
J (jaxtyping.Float[torch.Tensor, ... 6 total_num_joints])
err (jaxtyping.Float[torch.Tensor, ... num_arti 6])
joint_first_indices_pt (jaxtyping.Int[torch.Tensor, compute_dq_warp.num_arti])
damping (float)
- Return type:
jaxtyping.Float[torch.Tensor, … total_num_joints]
- fastdev.robo.warp_kinematics.inverse_kinematics(target_link_poses: jaxtyping.Float[torch.Tensor, ... num_arti 4 4], target_link_indices: jaxtyping.Int[torch.Tensor, inverse_kinematics.num_arti], articulation: fastdev.robo.articulation.Articulation, max_iterations: int = 100, learning_rate: float = 0.1, tolerance: float = 1e-06, damping: float = 0.01, num_retries: int = 10, init_joint_values: Optional[jaxtyping.Float[torch.Tensor, ... total_num_dofs]] = None, jitter_strength: float = 1.0) Tuple[jaxtyping.Float[torch.Tensor, ... total_num_dofs], jaxtyping.Bool[torch.Tensor, ... num_arti]] [source]¶
- Parameters:
target_link_poses (jaxtyping.Float[torch.Tensor, ... num_arti 4 4])
target_link_indices (jaxtyping.Int[torch.Tensor, inverse_kinematics.num_arti])
articulation (fastdev.robo.articulation.Articulation)
max_iterations (int)
learning_rate (float)
tolerance (float)
damping (float)
num_retries (int)
init_joint_values (Optional[jaxtyping.Float[torch.Tensor, ... total_num_dofs]])
jitter_strength (float)
- Return type:
Tuple[jaxtyping.Float[torch.Tensor, … total_num_dofs], jaxtyping.Bool[torch.Tensor, … num_arti]]