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
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