Sorry it took me a while to get a chance to take a look at this.

In Panda joints, as in the scene graph, when you set a rotation, it always rotates about the origin of the joint: the local (0, 0, 0) point. In many animation packages, however, it is possible to specify an explicit rotate pivot, which is different from the (0, 0, 0) point.

Your joint Bone.001 does not have any translation offset from its parent, so its local (0, 0, 0) point is the same as that of its parent, and thus when you rotate Bone.001, it rotates around the parent’s origin.

It might be that you intended to include a translation offset for Bone.001. Or, maybe the offset is indeed supposed to be (0, 0, 0), but you intended to specify an explicit rotate pivot, so that it rotate around some point other than (0, 0, 0). In order to implement a rotate pivot, you have to build a matrix for the joint animation, of the form:

joint = LMatrix4f::translate_mat(-pivot) * rotate_mat * LMatrix4f::translate_mat(pivot).

A matrix of this form translates the pivot to the origin, performs the rotation, and then translates the pivot back. When you compose matrices like this, you end up with one matrix that performs the overall resulting transform. You can therefore perform this matrix compose for each frame, and add the resulting matrix to the animation table for each frame; the result will be the appropriate animation.

David