Joints
Index
RigidBodyDynamics.Fixed
RigidBodyDynamics.Joint
RigidBodyDynamics.Prismatic
RigidBodyDynamics.Prismatic
RigidBodyDynamics.QuaternionFloating
RigidBodyDynamics.Revolute
RigidBodyDynamics.Revolute
RigidBodyDynamics.bias_acceleration
RigidBodyDynamics.configuration_derivative_to_velocity!
RigidBodyDynamics.constraint_wrench_subspace
RigidBodyDynamics.global_coordinates!
RigidBodyDynamics.has_fixed_subspaces
RigidBodyDynamics.joint_torque!
RigidBodyDynamics.joint_transform
RigidBodyDynamics.joint_twist
RigidBodyDynamics.local_coordinates!
RigidBodyDynamics.motion_subspace
RigidBodyDynamics.num_constraints
RigidBodyDynamics.num_positions
RigidBodyDynamics.num_velocities
RigidBodyDynamics.rand_configuration!
RigidBodyDynamics.velocity_to_configuration_derivative!
RigidBodyDynamics.zero_configuration!
The Joint
type
RigidBodyDynamics.Joint
— Type.type Joint{T<:Number}
A joint represents a kinematic restriction of the relative twist between two rigid bodies to a linear subspace of dimension $k$. The state related to the joint is parameterized by two sets of variables, namely
a vector $q \in \mathcal{Q}$, parameterizing the relative homogeneous transform.
a vector $v \in \mathbb{R}^k$, parameterizing the relative twist.
A joint has a direction. The rigid body before the joint is called the joint's predecessor, and the rigid body after the joint is its successor.
The twist of the successor with respect to the predecessor is a linear function of $v$.
For some joint types (notably those using a redundant representation of relative orientation, such as a unit quaternion), $\dot{q}$, the time derivative of $q$, may not be the same as $v$. However, an invertible linear transformation exists between $\dot{q}$ and $v$.
See also:
Definition 2.9 in Duindam, "Port-Based Modeling and Control for Efficient Bipedal Walking Robots", 2006.
Section 4.4 of Featherstone, "Rigid Body Dynamics Algorithms", 2008.
Functions
RigidBodyDynamics.bias_acceleration
— Method.bias_acceleration(joint, q, v)
Return the acceleration of the joint's successor with respect to its predecessor in configuration $q$ and at velocity $v$, when the joint acceleration $\dot{v}$ is zero.
configuration_derivative_to_velocity!(joint, v, q, q̇)
Compute joint velocity vector $v$ given the joint configuration vector $q$ and its time derivative $\dot{q}$ (in place).
Note that this mapping is linear.
See also velocity_to_configuration_derivative!
, the inverse mapping.
constraint_wrench_subspace(joint, jointTransform)
Return a basis for the constraint wrench subspace of the joint, where jointTransform
is the transform from the frame after the joint to the frame before the joint.
The constraint wrench subspace is a $6 \times (6 - k)$ matrix, where $k$ is the dimension of the velocity vector $v$, that maps a vector of Lagrange multipliers $\lambda$ to the constraint wrench exerted across the joint onto its successor.
The constraint wrench subspace is orthogonal to the motion subspace.
RigidBodyDynamics.global_coordinates!
— Method.global_coordinates!(joint, q, q0, ϕ)
Compute the global parameterization of the joint's configuration, $q$, given a 'base' orientation $q_0$ and a vector of local coordinates $ϕ$ centered around $q_0$.
See also local_coordinates!
.
RigidBodyDynamics.has_fixed_subspaces
— Method.has_fixed_subspaces(joint)
Whether the joint's motion subspace and constraint wrench subspace depend on $q$.
RigidBodyDynamics.joint_torque!
— Method.joint_torque!(joint, τ, q, joint_wrench)
Given the wrench exerted across the joint on the joint's successor, compute the vector of joint torques $\tau$ (in place), in configuration q
.
RigidBodyDynamics.joint_transform
— Method.joint_transform(joint, q)
Return a Transform3D
representing the homogeneous transform from the frame after the joint to the frame before the joint for joint configuration vector $q$.
RigidBodyDynamics.local_coordinates!
— Method.local_coordinates!(joint, ϕ, ϕ̇, q0, q, v)
Compute a vector of local coordinates $\phi$ around configuration $q_0$ corresponding to configuration $q$ (in place). Also compute the time derivative $\dot{\phi}$ of $\phi$ given the joint velocity vector $v$.
The local coordinate vector $\phi$ must be zero if and only if $q = q_0$.
For revolute or prismatic joint types, the local coordinates can just be $\phi = q - q_0$, but for joint types with configuration vectors that are restricted to a manifold (e.g. when unit quaternions are used to represent orientation), elementwise subtraction may not make sense. For such joints, exponential coordinates could be used as the local coordinate vector $\phi$.
See also global_coordinates!
.
RigidBodyDynamics.motion_subspace
— Method.motion_subspace(joint, q)
Return a basis for the motion subspace of the joint in configuration $q$.
The motion subspace basis is a $6 \times k$ matrix, where $k$ is the dimension of the velocity vector $v$, that maps $v$ to the twist of the joint's successor with respect to its predecessor. The returned motion subspace is expressed in the frame after the joint, which is attached to the joint's successor.
RigidBodyDynamics.num_positions
— Method.num_positions(joint)
Return the length of the configuration vector of joint
.
RigidBodyDynamics.num_velocities
— Method.num_velocities(joint)
Return the length of the velocity vector of joint
.
RigidBodyDynamics.rand_configuration!
— Method.rand_configuration!(joint, q)
Set $q$ to a random configuration. The distribution used depends on the joint type.
velocity_to_configuration_derivative!(joint, q̇, q, v)
Compute the time derivative $\dot{q}$ of the joint configuration vector $q$ given $q$ and the joint velocity vector $v$ (in place).
Note that this mapping is linear.
See also configuration_derivative_to_velocity!
, the inverse mapping.
RigidBodyDynamics.zero_configuration!
— Method.zero_configuration!(joint, q)
Set $q$ to the 'zero' configuration, corresponding to an identity joint transform.
RigidBodyDynamics.joint_twist
— Method.joint_twist(joint, q, v)
Return the twist of joint
's successor with respect to its predecessor, expressed in the frame after the joint.
Note that this is the same as Twist(motion_subspace(joint, q), v)
.
RigidBodyDynamics.num_constraints
— Method.num_constraints(joint)
Return the number of constraints imposed on the relative twist between the joint's predecessor and successor
JointType
s
RigidBodyDynamics.Fixed
— Type.immutable Fixed{T<:Number} <: RigidBodyDynamics.JointType{T<:Number}
The Fixed
joint type is a degenerate joint type, in the sense that it allows no motion between its predecessor and successor rigid bodies.
RigidBodyDynamics.Prismatic
— Type.immutable Prismatic{T<:Number} <: RigidBodyDynamics.OneDegreeOfFreedomFixedAxis{T<:Number}
A Prismatic
joint type allows translation along a fixed axis.
RigidBodyDynamics.Prismatic
— Method.Prismatic(axis)
Construct a new Prismatic
joint type, allowing translation along axis
(expressed in the frame before the joint).
immutable QuaternionFloating{T} <: RigidBodyDynamics.JointType{T}
A floating joint type that uses a unit quaternion representation for orientation.
Floating joints are 6-degree-of-freedom joints that are in a sense degenerate, as they impose no constraints on the relative motion between two bodies.
The full, 7-dimensional configuration vector of a QuaternionFloating
joint type consists of a unit quaternion representing the orientation that rotates vectors from the frame 'directly after' the joint to the frame 'directly before' it, and a 3D position vector representing the origin of the frame after the joint in the frame before the joint.
The 6-dimensional velocity vector of a QuaternionFloating
joint is the twist of the frame after the joint with respect to the frame before it, expressed in the frame after the joint.
RigidBodyDynamics.Revolute
— Type.immutable Revolute{T<:Number} <: RigidBodyDynamics.OneDegreeOfFreedomFixedAxis{T<:Number}
A Revolute
joint type allows rotation about a fixed axis.
RigidBodyDynamics.Revolute
— Method.Revolute(axis)
Construct a new Revolute
joint type, allowing rotation about axis
(expressed in the frame before the joint).