Proposal: extract ros2 interfaces from controller manager into a helper file #69
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
extract ros2 pub/sub/services into a
ros2_communication
helper files.Motivation:
In a project, we're wrapping
controller_manager
in a custom scheduler task, essentially re-writing theros2_control_node
ros2_control_node
is not a node, but an executable specific to the OS scheduler responsible for instantiating and running thecontroller_manager
, which IS the node.controller_manager.cpp
file is hitting 4k LoC, mixes core logic and ROS2 communicaiton (services, publishers, subscribers)Proposed changes
We propose a simple refactoring with two main objectives:
Extract all ROS 2 interfaces and their callback implementations into a helper file
ros2_communication.cpp/hpp
which currentcontroller_manager.hpp
would include.Rename the current
ros2_control_node
toros2_control_executable
to accurately reflect its function as a system entry point rather than a NodeNotes:
naming is are for discussion, of course
Food for thought, outside of scope of this suggestion:
We could push it a step further and make
ControllerManager
not inherit fromNode
at all, and place all ROS-related stuff intoControllerManagerNode
class.Then, as we do with
ResourceManager
, we'd pass in the necessary node interfaces to it:Then the
ControlNode
would be responsible for ros2 communication, controller manager for controllers and resource manager for hardware.