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 0.1.0, rung kinematic