Skip to main content

AR4 Mk 1 Dynamic Compensation

Hi Chris,

I've been developing the Teensy 4.1 firmware further and am currently working on a dynamics observer, with the longer-term goal of dynamic/gravity compensation.

I've already implemented numerical Jacobian/singularity monitoring and am now looking to populate a rigid-body dynamics model of the AR4 Mk1. Do you have any of the following mechanical/dynamic parameters available from the AR4 CAD or original design calculations?

For each moving link / joint assembly J1–J6:

  • Mass of each link/assembly (kg)
  • Centre of mass location for each link (XYZ), and which coordinate frame the COM is referenced to
  • Moment/inertia tensor about the link COM: Ixx, Iyy, Izz and, if available, Ixy, Ixz, Iyz
  • Confirmation of the link coordinate frames used for those values

For the drivetrain:

  • Gear reduction for J1–J6
  • Any belt/pulley reductions in addition to the gearbox reduction
  • Motor rotor inertia for each motor, if known
  • Gearbox/output inertia or reflected inertia, if available
  • Approximate gearbox efficiency for each joint, if known
  • Any known static/Coulomb friction or viscous-friction values

For the kinematic model:

  • The definitive AR4 DH parameters / link geometry used by the controller
  • Confirmation of joint-axis directions/sign conventions
  • Any mechanical zero offsets that aren't represented directly in the DH table

For the wrist/tool:

  • Mass and COM of the standard J6/flange assembly
  • Rated/default payload
  • Payload COM assumptions used when the AR4 was designed
  • Any maximum joint torque figures or calculated torque requirements for J1–J6

I'm particularly interested in whether you already have a mass-properties export from the CAD. If you have the original CAD assemblies with materials assigned, even a table/export of mass, COM and inertia tensor for each moving assembly would be ideal.

I'm initially running the dynamics as an observer only — calculating gravity, inertial and Coriolis/centrifugal loading without changing motion — so I can validate the model against encoder following error before implementing any active compensation.

Cheers,
Stefan

Stefan Asmus

AR4 Mk1 Dynamic Compensation — Development Update

Hi Guys,

Just following up on my earlier post regarding the mechanical and dynamic parameters for the AR4 Mk1.

I've continued developing the Teensy 4.1 firmware and have now been able to resolve or estimate a significant portion of the information I originally asked about using the AR4 STEP assembly, AR4 V1.5 manual/BOM, drivetrain information and the existing encoder/firmware configuration.

The goal remains to develop a rigid-body dynamics observer and, once validated, investigate whether model-based gravity/dynamic compensation can improve the Mk1's encoder following error while retaining the existing step/direction hardware.

Parameters resolved so far

Rigid-body mass model

I've separated the robot into the six moving rigid-body groups associated with J1–J6 and generated a first-pass mass model.

Current Rev-A estimated moving-link masses are:

Joint/link Estimated mass
J1 4.263 kg
J2 2.037 kg
J3 0.895 kg
J4 1.378 kg
J5 1.071 kg
J6 0.280 kg

The remaining stationary/base structure is approximately 2.326 kg, giving a total of 12.25 kg.

I've deliberately reconciled the estimated mass model against the published AR4 aluminium robot mass of 12.25 kg, rather than allowing assumed material densities alone to determine the final mass. The V1.5 manual specifies the aluminium robot at 27 lb / 12.25 kg, with 629 mm reach, 1.9 kg payload and 0.2 mm repeatability.

These individual link masses should therefore be regarded as engineering estimates, not measured or experimentally identified values.

Centre of mass

Using the STEP geometry and estimated component mass distribution, I've obtained first-pass COM positions for each rigid body.

Currently these are expressed in the STEP/global coordinate frame:

Link X Y Z
J1 43.5 mm 130.5 mm 260.1 mm
J2 -5.4 mm 95.3 mm 426.2 mm
J3 19.4 mm 8.6 mm 556.1 mm
J4 26.7 mm 40.8 mm 572.6 mm
J5 12.5 mm 191.1 mm 533.7 mm
J6 14.5 mm 232.1 mm 512.3 mm

The next step is transforming these into the respective local J1–J6 link coordinate frames.

Inertia tensors

I've also generated initial CAD-derived inertia tensors about the estimated COM of each rigid body:

J1
Ixx = 0.01811    Iyy = 0.02090    Izz = 0.01307
Ixy = -0.00217   Ixz = -0.00434   Iyz = -0.00616

J2
Ixx = 0.02376    Iyy = 0.02062    Izz = 0.00715
Ixy = -0.00109   Ixz =  0.00218   Iyz =  0.00915

J3
Ixx = 0.001137   Iyy = 0.000799   Izz = 0.000812
Ixy = 0.000063   Ixz = 0.000130   Iyz = -0.000227

J4
Ixx = 0.01205    Iyy = 0.00146    Izz = 0.01115
Ixy = 0.000330   Ixz = -0.000093  Iyz = 0.00318

J5
Ixx = 0.00209    Iyy = 0.000650   Izz = 0.00199
Ixy = -0.000278  Ixz = -0.000030  Iyz = 0.000283

J6
Ixx = 0.0000924  Iyy = 0.000250   Izz = 0.000234
Ixy = -0.0000049 Ixz = 0.0000213  Iyz = 0.0000062

Units are kg·m².

Again, these are currently Rev-A estimates, rather than experimentally identified inertial parameters, and still need to be transformed consistently into the local link frames.

Motor and gearbox configuration

The V1.5 manual identifies the original Mk1 motor/gearbox assemblies as:

Joint Motor / drivetrain
J1 17HS15-1684D-HG10-AR4
J2 23HS22-2804D-HG50-AR4
J3 17HS15-1684D-HG50-AR4
J4 11HS20-0674D-PG14-AR4
J5 17LS19-1684E-200G-AR4
J6 14HS11-1004D-PG19-AR4

The manual directly identifies these J1–J6 motor assemblies.

The corresponding nominal gearbox/drivetrain information currently identified is approximately:

J1   HG10        10:1 gearbox
J2   HG50        50:1 gearbox
J3   HG50        50:1 gearbox + external drive
J4   PG14        planetary gearbox
J5               lead-screw linear transmission
J6   PG19        planetary gearbox

The external timing hardware has also been identified from the BOM, including the 60T, 10T and 15T pulleys and the associated timing belts.

The manual also documents the two J3 transmission arrangements: the newer custom belt/pulley arrangement and the alternative 6 mm chain drive using two 13-tooth sprockets.

I'm currently consolidating the gearbox and external transmission ratios into an effective motor-to-joint reduction for each axis.

Existing controller/feedback configuration

The current Mk1 architecture remains:

Teensy 4.1
     ↓
STEP / DIR
     ↓
Stepper drivers
     ↓
Geared stepper motors
     ↓
Encoder feedback to Teensy

The manual confirms the Teensy 4.1 controller hardware.

The modified firmware now has access to the information required for a dynamics observer, including:

Commanded joint position
Encoder joint position

Commanded joint velocity
Measured/estimated joint velocity

Commanded trajectory acceleration

Position following error
Velocity following error

I've also already implemented numerical Jacobian/singularity monitoring in the Teensy firmware.

Dynamics implementation

The rigid-body model I'm working toward is:

τ=M(q)q¨+C(q,q˙)+G(q)\tau = M(q)\ddot q+ C(q,\dot q)+ G(q)

where:

  • M(q)q¨M(q)\ddot q represents inertial loading,
  • C(q,q˙)C(q,\dot q) represents Coriolis/centrifugal effects,
  • G(q)G(q) represents gravity loading.

The first implementation will remain observer-only.

It will calculate and log predicted joint loading alongside the encoder following error without modifying the commanded robot motion.

Once that has been validated, I intend to start experimentally with low-authority gravity compensation on J2 and J3, rather than immediately enabling full inverse-dynamics compensation.

Because the existing drives accept STEP/DIR rather than commanded torque, the eventual compensation would not be true servo torque control. The current idea is to translate predicted dynamic loading into a bounded command-position/phase lead, while retaining encoder following-error feedback and strict limits on compensation magnitude and rate.

Parameters still outstanding

At this point the list of genuinely unknown parameters has become considerably smaller.

The main information I would still be interested in from the original design data is:

  • Motor rotor inertia for J1–J6
  • Gearbox input/output or reflected inertia
  • Approximate gearbox efficiency
  • Any known Coulomb/static friction values
  • Any known viscous-friction coefficients
  • Confirmation of the complete effective motor-to-joint reduction for each axis
  • Original/local link coordinate-frame definitions
  • Original CAD-derived mass/COM/inertia properties, if available
  • Original payload COM assumption
  • Any original calculated joint torque requirements or maximum joint torque figures

If you have an original CAD mass-properties export, that would still be particularly useful because it would allow me to compare the original values directly against the Rev-A estimates above.

Likewise, if there were any original drivetrain torque calculations used when selecting the Mk1 motors and gearboxes, I'd be very interested in comparing those against the predicted gravity and dynamic torques from the new model.

The intention is to keep the work open and document the implementation and test results as it develops, particularly whether model-based compensation produces a measurable reduction in encoder following error on the existing Mk1 stepper hardware.

Cheers,

Stefan