An approach that is worth testing is set up an experimental method that forces strong constraints and boundary conditions on the test run.
To do this you need some kind of physical datum, some kind of bar or a box that produces a fairly consistent positioning, at approximately the same height as the punch, but off to the side. The bar should ideally be horizontal or vertical (whatever is closest to the average fist position) and the IMU should be orientated in the glove so that an axis is nearly vertical in the datum position. (Redefine that as Z)
So to do a test run
(a) Rest glove on the bar for 5 seconds
(b) Throw a punch in the next 5 second interval
(c) Rest glove on the bar for 5 seconds
Before this you should have done an accelerometer scale and zero calibration.
This approach will produce results in approximately
body coordinates.
For
accelerations we have U V W axis , so if you are facing north then U = motion to the north(X accelerometer), V = motion to the east(Y accelerometer), W=up and down (Zaccelerometer), I'll be lazy and just call these X Y Z .
For
rotations we have palm rotate up/down = pitch P, wrist rotate CW/CCW = Roll R , Turning on the spot = Yaw axis Y . (In world coordinates you can define Az El coordinates, by eg pointing at something with your finger, the compass direction you are pointing at is azimuth, the angle from finger to floor = elevation)
Note you have to be careful about which directions are positive, or the matrix algebra will get messed up, I think North East Down is one example of a correct sign system??
So once you have recorded a run
(1) Scale the accelerometers with the known gains and offsets. This will give the three acceleration A
x , A
y , A
z(2) Determine the initial and final tilt angles and G magnitude, from the accelerometer tilts at start and finish
So local gravity, G
o = sqrt(A
x2 + A
y2 + A
z2)
Tilt about Roll axis, R
o = arcsine(A
y/G
o) , about pitch axis, P
o = arcsine(A
y/G
o)
The starting (and finish?) Yaw orientations should be set to zero
(3) Determine the gyro rate offsets from the average of (start and finish), (or a measurement with the glove resting on a table within the last hour may suffice) . Now integrate the gyros to get angle , using the tilts in (2) as starting points if the integrated angle doesn't finish close to the final tilts, then make a small tweak to the offsets , something like correction = (calc_angle - final_tilt)/10sec.
(4) Calculate the apparent accelerations in Axt, Ayt based on sine(tilt) , and Azt based on cos(xtilt)*cos(ytilt)
(5) Calculate the centripetal accelerations based on Axc = Rz * Vy + Ry * Vz , That's basically a cross product, centripetal_Acceleration_in_X_direction = ( angular_Rate_around_Z_axis times velocity_ in_ydirection) + ( angular_Rate_around_y_axis times velocity_ in_zdirection).
(6) Subtract (4) and (5) from the raw accelerations to give corrected accelerations. Getting the sign right is important.
(7) Integrate these to get corrected velocities, these should all start and stop at zero, if not add a small offset tweak to the accelerations.
(
Integrate the velocities to get position ( these should all start and stop at zero, if not add a small offset tweak to the accelerations.)
Ideally you should use the velocities in (7) to refine the centripetal correction step in (5)
At this point you should have sufficiently accurate data for your measurements of acceleration and orientation
This method does not handle orientations correctly from a maths perspective, but if you keep all angles within +/-60 degrees of your reference position you should be close enough. You can see the errors by doing a test run where you tilt the glove 45 degrees up, and pirouette 360 degrees (your data will only show about 270 degrees of rotation. You will also get similar error if the fist makes a stirring motion.