Skip to content

Proposal of generic_steering_controller #70

@silanus23

Description

@silanus23

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions