aboutsummaryrefslogtreecommitdiff
path: root/src/dynamics/joint/multibody_joint/multibody_workspace.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/dynamics/joint/multibody_joint/multibody_workspace.rs')
-rw-r--r--src/dynamics/joint/multibody_joint/multibody_workspace.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/dynamics/joint/multibody_joint/multibody_workspace.rs b/src/dynamics/joint/multibody_joint/multibody_workspace.rs
new file mode 100644
index 0000000..767d751
--- /dev/null
+++ b/src/dynamics/joint/multibody_joint/multibody_workspace.rs
@@ -0,0 +1,27 @@
+use crate::dynamics::RigidBodyVelocity;
+use crate::math::Real;
+use na::DVector;
+
+/// A temporary workspace for various updates of the multibody.
+#[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))]
+#[derive(Clone)]
+pub(crate) struct MultibodyWorkspace {
+ pub accs: Vec<RigidBodyVelocity>,
+ pub ndofs_vec: DVector<Real>,
+}
+
+impl MultibodyWorkspace {
+ /// Create an empty workspace.
+ pub fn new() -> Self {
+ MultibodyWorkspace {
+ accs: Vec::new(),
+ ndofs_vec: DVector::zeros(0),
+ }
+ }
+
+ /// Resize the workspace so it is enough for `nlinks` links.
+ pub fn resize(&mut self, nlinks: usize, ndofs: usize) {
+ self.accs.resize(nlinks, RigidBodyVelocity::zero());
+ self.ndofs_vec = DVector::zeros(ndofs)
+ }
+}