diff options
| author | Sébastien Crozet <developer@crozet.re> | 2022-03-19 16:10:49 +0100 |
|---|---|---|
| committer | Sébastien Crozet <sebastien@crozet.re> | 2022-03-20 21:49:16 +0100 |
| commit | db6a8c526d939a125485c89cfb6e540422fe6b4b (patch) | |
| tree | 32738172c6bd27e07ed9a4b8f90f5fbbfc07fd5e /src/dynamics/joint/multibody_joint | |
| parent | e2e6fc787112ab35a3d4858aa2cf83fcf41c16a2 (diff) | |
| download | rapier-db6a8c526d939a125485c89cfb6e540422fe6b4b.tar.gz rapier-db6a8c526d939a125485c89cfb6e540422fe6b4b.tar.bz2 rapier-db6a8c526d939a125485c89cfb6e540422fe6b4b.zip | |
Fix warnings and add comments.
Diffstat (limited to 'src/dynamics/joint/multibody_joint')
4 files changed, 43 insertions, 24 deletions
diff --git a/src/dynamics/joint/multibody_joint/multibody.rs b/src/dynamics/joint/multibody_joint/multibody.rs index 58d11b6..c4cc85f 100644 --- a/src/dynamics/joint/multibody_joint/multibody.rs +++ b/src/dynamics/joint/multibody_joint/multibody.rs @@ -120,7 +120,7 @@ impl Multibody { } } - pub fn with_root(handle: RigidBodyHandle) -> Self { + pub(crate) fn with_root(handle: RigidBodyHandle) -> Self { let mut mb = Multibody::new(); mb.root_is_dynamic = true; let joint = MultibodyJoint::free(Isometry::identity()); @@ -128,7 +128,7 @@ impl Multibody { mb } - pub fn remove_link(self, to_remove: usize, joint_only: bool) -> Vec<Multibody> { + pub(crate) fn remove_link(self, to_remove: usize, joint_only: bool) -> Vec<Multibody> { let mut result = vec![]; let mut link2mb = vec![usize::MAX; self.links.len()]; let mut link_id2new_id = vec![usize::MAX; self.links.len()]; @@ -187,7 +187,7 @@ impl Multibody { result } - pub fn append(&mut self, mut rhs: Multibody, parent: usize, joint: MultibodyJoint) { + pub(crate) fn append(&mut self, mut rhs: Multibody, parent: usize, joint: MultibodyJoint) { let rhs_root_ndofs = rhs.links[0].joint.ndofs(); let rhs_copy_shift = self.ndofs + rhs_root_ndofs; let rhs_copy_ndofs = rhs.ndofs - rhs_root_ndofs; @@ -235,6 +235,7 @@ impl Multibody { self.workspace.resize(self.links.len(), self.ndofs); } + /// The inverse augmented mass matrix of this multibody. pub fn inv_augmented_mass(&self) -> &LU<Real, Dynamic, Dynamic> { &self.inv_augmented_mass } @@ -298,7 +299,7 @@ impl Multibody { &mut self.damping } - pub fn add_link( + pub(crate) fn add_link( &mut self, parent: Option<usize>, // FIXME: should be a RigidBodyHandle? dof: MultibodyJoint, @@ -368,7 +369,7 @@ impl Multibody { .extend((0..num_jacobians).map(|_| Jacobian::zeros(0))); } - pub fn update_acceleration<Bodies>(&mut self, bodies: &Bodies) + pub(crate) fn update_acceleration<Bodies>(&mut self, bodies: &Bodies) where Bodies: ComponentSet<RigidBodyMassProps> + ComponentSet<RigidBodyForces> @@ -451,7 +452,7 @@ impl Multibody { } /// Computes the constant terms of the dynamics. - pub fn update_dynamics<Bodies>(&mut self, dt: Real, bodies: &mut Bodies) + pub(crate) fn update_dynamics<Bodies>(&mut self, dt: Real, bodies: &mut Bodies) where Bodies: ComponentSetMut<RigidBodyVelocity> + ComponentSet<RigidBodyMassProps>, { @@ -756,36 +757,40 @@ impl Multibody { ) } + /// The generalized accelerations of this multibodies. #[inline] pub fn generalized_acceleration(&self) -> DVectorSlice<Real> { self.accelerations.rows(0, self.ndofs) } + /// The generalized velocities of this multibodies. #[inline] pub fn generalized_velocity(&self) -> DVectorSlice<Real> { self.velocities.rows(0, self.ndofs) } + /// The mutable generalized velocities of this multibodies. #[inline] pub fn generalized_velocity_mut(&mut self) -> DVectorSliceMut<Real> { self.velocities.rows_mut(0, self.ndofs) } #[inline] - pub fn integrate(&mut self, dt: Real) { + pub(crate) fn integrate(&mut self, dt: Real) { for rb in self.links.iter_mut() { rb.joint .integrate(dt, &self.velocities.as_slice()[rb.assembly_id..]) } } + /// Apply displacements, in generalized coordinates, to this multibody. pub fn apply_displacements(&mut self, disp: &[Real]) { for link in self.links.iter_mut() { link.joint.apply_displacement(&disp[link.assembly_id..]) } } - pub fn update_root_type<Bodies>(&mut self, bodies: &mut Bodies) + pub(crate) fn update_root_type<Bodies>(&mut self, bodies: &mut Bodies) where Bodies: ComponentSet<RigidBodyType> + ComponentSet<RigidBodyPosition>, { @@ -851,6 +856,7 @@ impl Multibody { } } + /// Apply forward-kinematics to this multibody and its related rigid-bodies. pub fn forward_kinematics<Bodies>(&mut self, bodies: &mut Bodies, update_mass_props: bool) where Bodies: ComponentSet<RigidBodyType> @@ -917,12 +923,13 @@ impl Multibody { self.update_body_jacobians(); } + /// The total number of freedoms of this multibody. #[inline] pub fn ndofs(&self) -> usize { self.ndofs } - pub fn fill_jacobians( + pub(crate) fn fill_jacobians( &self, link_id: usize, unit_force: Vector<Real>, @@ -964,14 +971,16 @@ impl Multibody { (j.dot(&invm_j), j.dot(&self.generalized_velocity())) } - #[inline] - pub fn has_active_internal_constraints(&self) -> bool { - self.links() - .any(|link| link.joint().num_velocity_constraints() != 0) - } + // #[cfg(feature = "parallel")] + // #[inline] + // pub(crate) fn has_active_internal_constraints(&self) -> bool { + // self.links() + // .any(|link| link.joint().num_velocity_constraints() != 0) + // } + #[cfg(feature = "parallel")] #[inline] - pub fn num_active_internal_constraints_and_jacobian_lines(&self) -> (usize, usize) { + pub(crate) fn num_active_internal_constraints_and_jacobian_lines(&self) -> (usize, usize) { let num_constraints: usize = self .links .iter() @@ -981,7 +990,7 @@ impl Multibody { } #[inline] - pub fn generate_internal_constraints( + pub(crate) fn generate_internal_constraints( &self, params: &IntegrationParameters, j_id: &mut usize, diff --git a/src/dynamics/joint/multibody_joint/multibody_joint.rs b/src/dynamics/joint/multibody_joint/multibody_joint.rs index 5a04070..c4d9adb 100644 --- a/src/dynamics/joint/multibody_joint/multibody_joint.rs +++ b/src/dynamics/joint/multibody_joint/multibody_joint.rs @@ -13,13 +13,16 @@ use na::{UnitQuaternion, Vector3}; #[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))] #[derive(Copy, Clone, Debug)] +/// An joint attached to two bodies based on the reduced coordinates formalism. pub struct MultibodyJoint { + /// The joint’s description. pub data: GenericJoint, pub(crate) coords: SpacialVector<Real>, pub(crate) joint_rot: Rotation<Real>, } impl MultibodyJoint { + /// Creates a new multibody joint from its description. pub fn new(data: GenericJoint) -> Self { Self { data, @@ -45,9 +48,9 @@ impl MultibodyJoint { self.joint_rot = pos.rotation; } - pub fn local_joint_rot(&self) -> &Rotation<Real> { - &self.joint_rot - } + // pub(crate) fn local_joint_rot(&self) -> &Rotation<Real> { + // &self.joint_rot + // } fn num_free_lin_dofs(&self) -> usize { let locked_bits = self.data.locked_axes.bits(); diff --git a/src/dynamics/joint/multibody_joint/multibody_joint_set.rs b/src/dynamics/joint/multibody_joint/multibody_joint_set.rs index 7e512a8..0365062 100644 --- a/src/dynamics/joint/multibody_joint/multibody_joint_set.rs +++ b/src/dynamics/joint/multibody_joint/multibody_joint_set.rs @@ -97,6 +97,7 @@ impl MultibodyJointSet { } } + /// Iterates through all the multibody joints from this set. pub fn iter(&self) -> impl Iterator<Item = (MultibodyJointHandle, &Multibody, &MultibodyLink)> { self.rb2mb .iter() @@ -246,7 +247,8 @@ impl MultibodyJointSet { } } - pub fn remove_articulations_attached_to_rigid_body<Bodies>( + /// Removes all the multibody joints attached to a rigid-body. + pub fn remove_joints_attached_to_rigid_body<Bodies>( &mut self, rb_to_remove: RigidBodyHandle, islands: &mut IslandManager, diff --git a/src/dynamics/joint/multibody_joint/multibody_link.rs b/src/dynamics/joint/multibody_joint/multibody_link.rs index 3c35446..7336a6c 100644 --- a/src/dynamics/joint/multibody_joint/multibody_link.rs +++ b/src/dynamics/joint/multibody_joint/multibody_link.rs @@ -18,12 +18,13 @@ pub struct MultibodyLink { /* * Change at each time step. */ + /// The multibody joint of this link. pub joint: MultibodyJoint, // TODO: should this be removed in favor of the rigid-body position? - pub local_to_world: Isometry<Real>, - pub local_to_parent: Isometry<Real>, - pub shift02: Vector<Real>, - pub shift23: Vector<Real>, + pub(crate) local_to_world: Isometry<Real>, + pub(crate) local_to_parent: Isometry<Real>, + pub(crate) shift02: Vector<Real>, + pub(crate) shift23: Vector<Real>, /// The velocity added by the joint, in world-space. pub(crate) joint_velocity: RigidBodyVelocity, @@ -56,10 +57,12 @@ impl MultibodyLink { } } + /// The multibody joint of this link. pub fn joint(&self) -> &MultibodyJoint { &self.joint } + /// The handle of the rigid-body of this link. pub fn rigid_body_handle(&self) -> RigidBodyHandle { self.rigid_body } @@ -86,11 +89,13 @@ impl MultibodyLink { } } + /// The world-space transform of the rigid-body attached to this link. #[inline] pub fn local_to_world(&self) -> &Isometry<Real> { &self.local_to_world } + /// The position of the rigid-body attached to this link relative to its parent. #[inline] pub fn local_to_parent(&self) -> &Isometry<Real> { &self.local_to_parent |
