The const and non-const version return the same object, but the non-const version also calls .update() on the RobotState. Both functions always give a valid answer at the time you call them, but for efficiency reasons FK is not computed all the time for every state update. This is why when you get the state, transforms could be dirty. The confusing thing I believe is that the assertion on dirty transforms is removed in release code -- again for efficiency reasons.I am thinking to actually have that check done every time though.