This highlights a need to possibly have tasks accept the scene in their constructor so that information can be pre-allocated at construction time.
The same thing happens with FrameTask re: getting the frame_id value for the joint.
Although, I do like the solver doing its own thing so that the scene usage is consistent. Maybe then the best approach is to have a setup() method in these tasks/constraints that is automatically called by the solver? Or at least we can just call solver.setup() and that invokes it for all the tasks/constraints/barriers?
Originally posted by @sea-bass in #147