Add GPIO Tool controller - Controller that can manage different tools (grippers, lifts, forks) and states (automatic/manual) that can be set and determined using IOs (analog or digital)#1439
Conversation
|
This PR depends on this PR |
io_gripper_controller/README.md
Outdated
| # IO Gripper Controller | ||
|
|
||
| The IO Gripper Controller is provides implementation to control the gripper using IOs. It provides functionalities like open, close and reconfigure which can be used either though action server or service server and also publishes `joint_states` of gripper and also `dynamic_interfaces` for all command and state interfaces. | ||
|
|
||
| ## Description of controller's interfaces | ||
|
|
||
| - `joint_states` [`sensor_msgs::msg::JointState`]: Publishes the state of gripper joint and configuration joint | ||
| - `dynamic_interfaces` [`control_msgs::msg::DynamicInterfaceValues`]: Publishes all command and state interface of the IOs and sensors of gripper. | ||
|
|
There was a problem hiding this comment.
this should go into the doc folder in the rst format. For an example please check the joint_trajectory_controller.
There was a problem hiding this comment.
Please also write docs extensively about the internal state machine and also internal functionalities and external interface. As template, use the docs from another controller and adjust the content.
io_gripper_controller/include/io_gripper_controller/io_gripper_controller.hpp
Outdated
Show resolved
Hide resolved
io_gripper_controller/include/io_gripper_controller/io_gripper_controller.hpp
Outdated
Show resolved
Hide resolved
io_gripper_controller/include/io_gripper_controller/io_gripper_controller.hpp
Outdated
Show resolved
Hide resolved
io_gripper_controller/include/io_gripper_controller/io_gripper_controller.hpp
Outdated
Show resolved
Hide resolved
io_gripper_controller/include/io_gripper_controller/visibility_control.h
Outdated
Show resolved
Hide resolved
destogl
left a comment
There was a problem hiding this comment.
First set of comments. The second one comes tomorrow.
io_gripper_controller/README.md
Outdated
| # IO Gripper Controller | ||
|
|
||
| The IO Gripper Controller is provides implementation to control the gripper using IOs. It provides functionalities like open, close and reconfigure which can be used either though action server or service server and also publishes `joint_states` of gripper and also `dynamic_interfaces` for all command and state interfaces. | ||
|
|
||
| ## Description of controller's interfaces | ||
|
|
||
| - `joint_states` [`sensor_msgs::msg::JointState`]: Publishes the state of gripper joint and configuration joint | ||
| - `dynamic_interfaces` [`control_msgs::msg::DynamicInterfaceValues`]: Publishes all command and state interface of the IOs and sensors of gripper. | ||
|
|
There was a problem hiding this comment.
Please also write docs extensively about the internal state machine and also internal functionalities and external interface. As template, use the docs from another controller and adjust the content.
io_gripper_controller/include/io_gripper_controller/io_gripper_controller.hpp
Outdated
Show resolved
Hide resolved
io_gripper_controller/include/io_gripper_controller/io_gripper_controller.hpp
Outdated
Show resolved
Hide resolved
io_gripper_controller/include/io_gripper_controller/io_gripper_controller.hpp
Outdated
Show resolved
Hide resolved
io_gripper_controller/include/io_gripper_controller/io_gripper_controller.hpp
Outdated
Show resolved
Hide resolved
| return CallbackReturn::FAILURE; | ||
| } | ||
|
|
||
| if ( |
There was a problem hiding this comment.
I will update the required code for the optional. Thanks.
| } | ||
|
|
||
| // configuration joints parameter | ||
| if (params_.configuration_joints.empty()) |
| } | ||
|
|
||
| // configurations parameter | ||
| if (params_.configurations.empty()) |
| } | ||
|
|
||
| // configuration setup parameter | ||
| if (params_.configuration_setup.configurations_map.empty()) |
There was a problem hiding this comment.
everything configuration related is optional.
| } | ||
|
|
||
| // gripper_specific_sensors parameter | ||
| if (params_.gripper_specific_sensors.empty()) |
| "~/gripper_close", close_service_callback, rmw_qos_profile_services_hist_keep_all, | ||
| close_service_callback_group_); |
There was a problem hiding this comment.
| "~/gripper_close", close_service_callback, rmw_qos_profile_services_hist_keep_all, | |
| close_service_callback_group_); | |
| "~/gripper_close", close_service_callback, qos_services, close_service_callback_group_); |
io_gripper_controller/include/io_gripper_controller/io_gripper_controller.hpp
Outdated
Show resolved
Hide resolved
io_gripper_controller/include/io_gripper_controller/io_gripper_controller.hpp
Outdated
Show resolved
Hide resolved
| } | ||
| } | ||
|
|
||
| void IOGripperController::handle_reconfigure_state_transition(const reconfigure_state_type & state) |
There was a problem hiding this comment.
Proposal here. Can we do this general check only when activating the controller, i.e., on_activate because later when we're switching states we know already which states do we expect, and then we check only those.
The main idea is to avoid so many iterations in every control step is this is not even necessary.
There was a problem hiding this comment.
Can we also please add tests with different initial states of the gripper? To make sure that we recognize it correctly.
| } | ||
| } | ||
|
|
||
| void IOGripperController::handle_gripper_state_transition_open(const gripper_state_type & state) |
There was a problem hiding this comment.
I find generally this function somewhat inconsistent with the closing state checks. Can we unify this a bit. Especially the part when setting low and high states. I would except there more or less copy-paste code, or better yet calling subfunctions as we constantly do the same.
2b01517 to
311a37d
Compare
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #1439 +/- ##
==========================================
+ Coverage 84.68% 85.54% +0.86%
==========================================
Files 153 166 +13
Lines 15318 17002 +1684
Branches 1332 1431 +99
==========================================
+ Hits 12972 14545 +1573
- Misses 1858 1925 +67
- Partials 488 532 +44
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
This Pull Request introduces the IO Gripper Controller, an implementation for controlling a gripper using IOs. The controller supports functionalities such as open, close, and reconfigure, which can be triggered either through an Action Server or a Service Server. Additionally, the controller publishes the gripper’s state via joint_states and provides dynamic_interfaces to expose all command and state interfaces.
Features
Interfaces
Published Topics
joint_states[sensor_msgs::msg::JointState]:dynamic_interfaces[control_msgs::msg::DynamicInterfaceValues]:This addition enables better modular control of robotic grippers, paving the way for seamless integration in complex robotic systems.
Contributions via pull requests are much appreciated. Before sending us a pull request, please ensure that:
To send us a pull request, please:
colcon testandpre-commit run(requires you to install pre-commit bypip3 install pre-commit)Tests finalized by @destogl
The tests are written with the friendly help of Claude Code using the patterns from other controllers.