ros2_controllers
ros2_controllers copied to clipboard
tricycle_controller vs tricycle_steering_controller
We have two controllers with similar names: tricycle_controller vs tricycle_steering_controller.
I haven't used any of them, so I ask: (especially @tonynajjar who has contributed the first one, and @petkovich who created the second one)
- Is there a justification of keeping both?
If the answer is yes:
- Let's document it.
- The "older" tricycle_controller doesn't follow our best-practices, e.g., using generate_parameter_library, and it lacks of tests (see coverage): Let's improve that.
If the answer is no:
- Is the "newer" tricycle_steering_controller feature-equal to the "older" tricycle_controller?
If the answer is no: Let's port them. If the answer is yes:
- Is the "newer" tricycle_steering_controller compatible to the "older" tricycle_controller? (I don't think so)
- Should we delete it after some deprecation period with some migration guidelines published in the docs?
What I understood so far:
- Tricycle_controller has a single double-actuated wheel: steering and traction on the same wheel. This is basically a front-drive bicycle model, because it does not make a difference how many wheels are on the rear axle.
- This is different from tricycle_steering_controller, which claims having two traction wheels on the rear axle and one steering joint in the front (or vice versa). Same for bicycle_steering_controller: on traction wheel on the rear axle and one steering joint in the front (or vice versa)
- Tricycle_controller has additional features:
- Traction limiter
- Steering limiter
- ackermann_msg debug topic
I tend now to include tricycle controller into the steering lib on a long term basis, see also #692 Then we don't have to decide if it should be called tricycle (one possible mechanical configuration) or bicycle (the actual kinematic model) controller ;)