I think starting a new clean thread with just the problem that you are currently having would be a good idea.
I still think this is a magnetic problem. Have you ever tried the suit outside your flat? sometimes modern apartment buildings have an incredible amount of iron in the structure which distorts the magnetic field inside them. This would explain the errors in heading you experiment, which are always located at the lower part of the body (thus closer to the floor, where big iron beams support the structure).
We are currently working on a magnetic correction algorithm that should help to compensate this type of disturbances. Yet, having a test in a different environment would help confirm the hypothesis.
A way to get an idea of your vertical magnetic disturbance profile would be this:
- Start the notochord with the
--raw flag, and just one KC attached
- In the Blender addon Use the
Vector node to visualize the incoming magnetic vector. If you keep your KC in the same orientation and move it around the arrow should always point in the same direction (heading north, and about 65° ~ 70° off from the horizontal)
- Keeping the KC in the same orientation pull it above your head, as far as your arm (and the KC cable) allows you, then slowly pull it down up to the floor.
Did the arrow changed direction during this process? If it did, was the angle of heading change similar to the angle of heading error you get in the knees?
PS: there's a bug on the vector node, it sometimes doesn't create the correct list of incoming KC names. If this happens to you just plug a Testcube node in the same tree, and it will populate the list that is used also by the Vector node.
Another thing to keep in mind: Magnetometers are affected by torsion. This is a known fact, but we recently made some tests, and the influence of just a small torsion can be huge. Are you by chance calibrating your sensors outside the case, and then screwing them? Or perhaps adjusting the screws from time to time? Those actions might change the torsion of the PCB, and invalidate the previously done calibration. I'll upload a demo video soon