Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding Io gripper controller #1439

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

sachinkum0009
Copy link

@sachinkum0009 sachinkum0009 commented Dec 21, 2024

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

  • Action and Service Integration: Offers flexible control of gripper operations through action or service calls.
  • State Publishing: Continuously publishes the gripper's joint states and dynamic interface values for real-time monitoring.

Interfaces

Published Topics

  1. joint_states [sensor_msgs::msg::JointState]:

    • Publishes the state of the gripper joint and its configuration joint.
  2. dynamic_interfaces [control_msgs::msg::DynamicInterfaceValues]:

    • Publishes all command and state interfaces related to the gripper's IOs and sensors.

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:

  1. Limited scope. Your PR should do one thing or one set of things. Avoid adding “random fixes” to PRs. Put those on separate PRs.
  2. Give your PR a descriptive title. Add a short summary, if required.
  3. Make sure the pipeline is green.
  4. Don’t be afraid to request reviews from maintainers.
  5. New code = new tests. If you are adding new functionality, always make sure to add some tests exercising the code and serving as live documentation of your original intention.

To send us a pull request, please:

  • Fork the repository.
  • Modify the source; please focus on the specific change you are contributing. If you also reformat all the code, it will be hard for us to focus on your change.
  • Ensure local tests pass. (colcon test and pre-commit run (requires you to install pre-commit by pip3 install pre-commit)
  • Commit to your fork using clear commit messages.
  • Send a pull request, answering any default questions in the pull request interface.
  • Pay attention to any automated CI failures reported in the pull request, and stay involved in the conversation.

@sachinkum0009
Copy link
Author

This PR depends on this PR

Comment on lines +1 to +9
# 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.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should go into the doc folder in the rst format. For an example please check the joint_trajectory_controller.

@@ -0,0 +1,234 @@
// Copyright (c) 2024, Stogl Robotics Consulting UG (haftungsbeschränkt) (template)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// Copyright (c) 2024, Stogl Robotics Consulting UG (haftungsbeschränkt) (template)
// Copyright (c) 2024, Stogl Robotics Consulting UG (haftungsbeschränkt)

Comment on lines +16 to +18
// Source of this file are templates in
// [RosTeamWorkspace](https://github.com/StoglRobotics/ros_team_workspace) repository.
//
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// Source of this file are templates in
// [RosTeamWorkspace](https://github.com/StoglRobotics/ros_team_workspace) repository.
//

Comment on lines +62 to +69
IDLE = 0,
SET_BEFORE_COMMAND = 1,
CLOSE_GRIPPER = 2,
CHECK_GRIPPER_STATE = 3,
OPEN_GRIPPER = 4,
START_CLOSE_GRIPPER = 5,
SET_AFTER_COMMAND = 6,
HALTED = 7,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd suggest documenting what these mean above in a longer docstring

Comment on lines +112 to +115
std::vector<std::string> command_ios_open, command_ios_close, set_before_command_open, set_after_command_open, reconfigure_command;
std::vector<double> command_ios_open_values, command_ios_close_values, set_before_command_open_values, set_after_command_open_values, reconfigure_command_values;
std::vector<std::string> state_ios_open, state_ios_close, set_before_command_close, set_after_command_close;
std::vector<double> state_ios_open_values, state_ios_close_values, set_before_command_close_values, set_after_command_close_values, set_after_command_open_values_original_;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

one variable per line please. I know it will get long...

Comment on lines +1 to +54
// Copyright (c) 2024, Stogl Robotics Consulting UG (haftungsbeschränkt) (template)
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//
// Source of this file are templates in
// [RosTeamWorkspace](https://github.com/StoglRobotics/ros_team_workspace) repository.
//

#ifndef GRIPPER_IO_CONTROLLER__VISIBILITY_CONTROL_H_
#define GRIPPER_IO_CONTROLLER__VISIBILITY_CONTROL_H_

// This logic was borrowed (then namespaced) from the examples on the gcc wiki:
// https://gcc.gnu.org/wiki/Visibility

#if defined _WIN32 || defined __CYGWIN__
#ifdef __GNUC__
#define GRIPPER_IO_CONTROLLER__VISIBILITY_EXPORT __attribute__((dllexport))
#define GRIPPER_IO_CONTROLLER__VISIBILITY_IMPORT __attribute__((dllimport))
#else
#define GRIPPER_IO_CONTROLLER__VISIBILITY_EXPORT __declspec(dllexport)
#define GRIPPER_IO_CONTROLLER__VISIBILITY_IMPORT __declspec(dllimport)
#endif
#ifdef GRIPPER_IO_CONTROLLER__VISIBILITY_BUILDING_DLL
#define GRIPPER_IO_CONTROLLER__VISIBILITY_PUBLIC GRIPPER_IO_CONTROLLER__VISIBILITY_EXPORT
#else
#define GRIPPER_IO_CONTROLLER__VISIBILITY_PUBLIC GRIPPER_IO_CONTROLLER__VISIBILITY_IMPORT
#endif
#define GRIPPER_IO_CONTROLLER__VISIBILITY_PUBLIC_TYPE GRIPPER_IO_CONTROLLER__VISIBILITY_PUBLIC
#define GRIPPER_IO_CONTROLLER__VISIBILITY_LOCAL
#else
#define GRIPPER_IO_CONTROLLER__VISIBILITY_EXPORT __attribute__((visibility("default")))
#define GRIPPER_IO_CONTROLLER__VISIBILITY_IMPORT
#if __GNUC__ >= 4
#define GRIPPER_IO_CONTROLLER__VISIBILITY_PUBLIC __attribute__((visibility("default")))
#define GRIPPER_IO_CONTROLLER__VISIBILITY_LOCAL __attribute__((visibility("hidden")))
#else
#define GRIPPER_IO_CONTROLLER__VISIBILITY_PUBLIC
#define GRIPPER_IO_CONTROLLER__VISIBILITY_LOCAL
#endif
#define GRIPPER_IO_CONTROLLER__VISIBILITY_PUBLIC_TYPE
#endif

#endif // GRIPPER_IO_CONTROLLER__VISIBILITY_CONTROL_H_
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's not add this or any visibility macros in general here please.

#1053
S1 from this list is the preferred solution which we'll implement in the rest of the controllers too

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants