Packages for kinematic trees?

tl;dr: Any good packages for defining trees of named homogeneous transforms?

I have a use case and wonder if someone here might help accelerate my search for existing solutions that I can adopt or build upon. Basically what I’d like is the ability to define a number of coordinate frames of interest for a spacecraft. Usually there will be one or more ‘global’ frames used for different purposes. For example, there may be a frame used as a datum for describing the positions of various items of interest. There may be many of these datum type frames used for different subsystems.

Then typically each subsystem may have items of interest (say a high gain antenna, a star tracker, an RCS thruster) which is described with reference to one of the datum frames. There may in turn be a new ‘local’ frame for that piece of equipment, so e.g. points of interest on an instrument, maybe the optical axis of a camera, would be defined in terms of that local frame. Then there’s the case of a robotic arm which will have a whole chain of frames from the base to the end effector. In that case (and others like a gimbaled instrument) the frames relationship isn’t static but can vary with time.

So one can describe all these frames in relation with each other in a tree structure, and given individual transforms between nodes in the tree, overall transforms between any 2 frames can be calculated. I’d like to be able to give each frame a unique identifier, associate it with some parent frame. After defining a number of these frames I should be able to ask for the overall transformation from any frame to any other frame (using their unique identifiers) with a simple call like get_transform(from_frame, to_frame).

It would be relatively easy to implement this but probably it’s been done already somewhere. Though I’d like to avoid heavy dependencies if possible. So e.g. it looks like RigidBodyDynamics.jl might meet my needs but is possibly overkill for my use case.

There’s also CoordinateTransformations.jl which seems more general and has facilities for composing transforms, but I don’t think has anything for creating trees and naming the frames.

I’m sure there are others too but I’m hoping someone has had a similar enough use case and can either recommend something existing or confirm that there isn’t an existing package that quite fits the bill, in which case I guess I’ll see if I can put something together.

1 Like

Dear @airpmb, did your search succeed? I’m in a similar situation, just need to combine a couple of coordinate systems and probably make some transformations.

Thx

No, I didn’t find anything that quite fit what I was looking for. I started to look at building something myself but for now that’s on hold as I’ve had to tend to other priorities.

1 Like

I don’t think there is a lightweight reference frame package available as of yet, but you may be interested in Modia3D.

Also, Chrono has a cool system for dealing with reference frames in C++.