Why can’t it be made? You can still describe the motion of an Ackermann vehicle in terms of the body frame. It’s just that you can’t arbitrarily command it.
I think this discussion boils down to:
-
How should we be describing the constraints of a mobile base? A full twist message is capable of describing the motion of any arbitrary base, but has no way of enforcing the actual constraints of the system.
This is a good question, and I think historically this has been done in a bit of an ad-hoc way. Maybe it makes sense to put these type of constraints into the URDF (or something else) and make a REP around it?
-
How useful is it to have an arbitrary description of motion?
I think this is part of your argument for using different command types. If a robot can’t actuate the commands coming from the Twist message, isn’t it better to have a dedicated type so that the motion can be guaranteed?
I think the answer depends a lot on the upstream modules you envision interfacing with your system. Some planning algorithms can be used across several different types of mobility bases (with some configuration). I get the argument that if it needs some amount of configuration, why not also configure the output type? The trade off is that you’ll forego any common tooling that could otherwise be leveraged. It would also make the planning modules a bit more difficult to implement, since they’d have to have special cases for each output type as opposed to using more generic constraints.
-
Should we have standardized interfaces to “common” mobility types?
I think the answer to this is yes. But I think it’s also good to couple this with a standardized abstraction (which is what Twist is to me), that way “custom” types can be easily added.
I guess my argument would be to keep a generalized abstraction layer, and have the kind of command checking you’re suggesting at a lower interface layer.
1 Like