# Node KinematicArmNode Defined in `mime.nodes.actuation._chain.KinematicArmNode`. Algorithm `MIME-NODE-104`. A kinematic chain segment: commanded joint positions held within their limits, an optional first-order servo lag, and every frame's world pose by forward kinematics, placed on the frame it mounts on. ## Governing equations $$ \bar{u}_{i} = \min(\max(u_{i}, l_{i}), h_{i}); \quad \theta_{n+1} = \bar{u} + (\theta_{n} - \bar{u}) \exp(-\mathrm{d}t / \tau); \quad \mathbf{P}_{k} = \mathbf{M}_{j} \circ \mathbf{O} \circ \mathrm{FK}_{k}(\theta_{n+1}; \mathbf{a}, \mathbf{J}, \mathbf{K}), \quad \boldsymbol{\Omega}_{k} = \boldsymbol{\omega}_{j} + R(\mathbf{M}_{j} \circ \mathbf{O}) \, \mathrm{W}_{k}(\theta_{n+1}, (\theta_{n+1} - \theta_{n}) / \mathrm{d}t) $$ ## Discretisation The servo's first-order lag is solved exactly over the step for a command held through it. ## Assumptions - Rigid joints and links, with no structural mode (MIME-ANO-101) - Its motion is prescribed: it takes no load, and its reactions are not applied ## Limitations none declared ## Declared regimes (not evidenced here) none declared ## References [@Sciavicco2000], [@Featherstone2008] ## Symbols | Symbol | Kind | Name | Units | Implemented by | |---|---|---|---|---| | $u$ | input | `joint_positions` | 1 | `mime.nodes.actuation._chain.KinematicArmNode.advance` | | $l$ | parameter | `lower` | 1 | `mime.nodes.actuation._chain.KinematicArmNode.held` | | $h$ | parameter | `upper` | 1 | `mime.nodes.actuation._chain.KinematicArmNode.held` | | $\theta$ | state | `joint_positions` | 1 | `mime.nodes.actuation._chain.KinematicArmNode.advance` | | $\tau$ | parameter | `servo_time_constant` | s | `mime.nodes.actuation._chain.KinematicArmNode.advance` | | $\mathbf{P}$ | state | `frame_poses` | m; 1 | `mime.nodes.actuation._chain.KinematicArmNode.advance` | | $\boldsymbol{\Omega}$ | state | `frame_angular_velocities` | rad/s | `mime.nodes.actuation._chain.KinematicArmNode.advance` | | $\boldsymbol{\omega}$ | input | `mount_rates` | rad/s | `mime.nodes.actuation._chain.MountedNode.base_rate` | | $\mathbf{M}$ | input | `mount_poses` | m; 1 | `mime.nodes.actuation._chain.MountedNode.base` | | $\mathbf{O}$ | parameter | `placement` | m; 1 | `mime.nodes.actuation._chain.MountedNode.base` | | $\mathbf{a}$ | parameter | `axes` | 1 | `mime.nodes.actuation._chain.KinematicArmNode.frames` | | $\mathbf{J}$ | parameter | `origin_translations` | m | `mime.nodes.actuation._chain.KinematicArmNode.frames` | | $\mathbf{K}$ | parameter | `frame_translations` | m | `mime.nodes.actuation._chain.KinematicArmNode.frames` | ## Built by - [`arm`](../entries/dynamics/arm.md) 0.1.0, rung `kinematic`