-
Notifications
You must be signed in to change notification settings - Fork 25
Description
This issue is describing ros-controls/ros2_controllers#1822
Is your feature request related to a problem? Please describe.
This proposal follows up on ros-controls/ros2_controllers#692 of controllers and related maintainer comments. Main idea comes from #692. While the steering/traction joint naming issue raised in #692 has already been addressed in the library, this proposal focuses on extensibility. Currently supports three kinematic types but is difficult to extend to others but the proposed plugin-based approach makes extension to other robots straightforward. A kinematically agnostic controller could provide much wider support. Doing this by making user create a plugin derived from kinematic_model_base
.
Describe the solution you'd like
This architecture is a considered evolution of the existing steering_controllers_library
, addressing its key limitations. Here are the changes made on top of this file:
Function Name | In Both? | Changed? | Notes |
---|---|---|---|
reset_controller_reference_msg |
Yes | Minor | Only namespace/class name differs; logic is identical |
Constructor |
Yes | Changed | Loads kinematic plugin too |
on_init |
Yes | Minor | Only parameter listener type differs |
set_interface_numbers |
Yes | Same | |
on_configure |
Yes | Changed | Simpler, less odometry config, more plugin logic; library: more odometry checks |
reference_callback |
Yes | Same | |
command_interface_configuration |
Yes | Same | |
state_interface_configuration |
Yes | Minor | Adding steering differently and loggin more |
on_export_reference_interfaces |
Yes | Minor | Only message type/class name differs |
on_set_chained_mode |
Yes | Same | |
on_activate |
Yes | Minor | Sets all command interfaces to NaN, library only resets |
on_deactivate |
Yes | Minor | Sets all command interfaces to NaN, library only sets command interfaces |
update_reference_from_subscribers |
Yes | Same | |
update_and_write_commands |
Yes | Changed | Uses kinematic plugin, library uses odometry; both clear reference after use |
initialize_implementation_parameter_listener |
No | Only this branch |
Describe alternatives you've considered
A direct change or keeping both controller for steerable robots
Additional context
Proof of Concept
Proof of concept repos: generic_steering_controller_demo, four_wheeler_demo. These demonstrate 4x4 and carlike robots using the proposed structure.
Future steps:
First of all six_wheel_rover
plugin should be added after that more plugins can be added.
In the next step this can be modified to provide support for URDFParsingKinematics
making the controller taking data directly from urdf and no need for parameters. Making this as the maintainer's recommendation fully aligning with "agnostic to the source of info". At the very last stage maybe adding a support for 6dof controller.
If this approach stabilizes and gains adoption, existing controllers in steering_controllers_library could be incrementally migrated to this structure. That way, we avoid duplicated code paths long-term without breaking current users.
Do you agree this direction (plugin-based generic steering controller inside ros2_controllers) is the correct path?
Note: I know I probably need to add steering controllers library writers in sign but didn't want to make it without permission