Hi team,
I have been working on a local fork of this repository to add some capabilities needed for more advanced manipulation tasks, and I am preparing to submit a Pull Request.
Currently, the standard Robotiq driver exposes only position and velocity state to the ROS 2 controller ecosystem. Real-world manipulation tasks, such as force-sensitive assembly or bin-picking, require richer feedback to make informed decisions at the controller level. Without this feedback, sequences must rely on blind timeouts rather than reliable grasp confirmation.
To address this, I have extended the driver to surface new state fields and implemented a optimization for the serial bus.
Key Features Added
-
Gripper Current (Effort): The driver now reads the motor current draw reported in hardware register byte 5. This provides a scaled representation of the force the gripper is exerting.
-
Object Detection Status: The driver now exposes a discrete status code emitted by the gripper firmware. This status indicates whether an object has been grasped, was missed, or if the fingers are still moving.
-
Modbus Traffic Optimization: Modbus write commands are now suppressed when the target speed, force, and position values have not changed since the previous cycle. This reduces unnecessary bus contention and leaves more bandwidth for status polling.
Architectural and API Updates
-
Interface Expansion: Two pure virtual methods, get_gripper_current() and get_object_detection_status(), were added to driver.hpp to ensure all implementations supply concrete hardware or mock data.
-
ros2_control Integration: The hardware interface now exports HW_IF_EFFORT and "object_detection_status" to downstream controllers. The URDF validation logic in on_init() was updated to accept 2, 3, or 4 state interfaces, allowing partial adoption and backwards compatibility with older URDFs.
-
Humble/Iron Compatibility: The signature of on_init() was updated to accept const hardware_interface::HardwareInfo& info instead of the older parameter type.
-
Velocity Calculation: A proper discrete-time derivative was implemented in the read() method for more stable velocity estimates.
-
Thread Safety: New std::atomic variables were introduced to safely transfer the raw current and object detection data across the thread boundary between the background polling loop and the real-time control loop.
I will open the Pull Request soon so you can review the code. Looking forward to your feedback!
Hi team,
I have been working on a local fork of this repository to add some capabilities needed for more advanced manipulation tasks, and I am preparing to submit a Pull Request.
Currently, the standard Robotiq driver exposes only position and velocity state to the ROS 2 controller ecosystem. Real-world manipulation tasks, such as force-sensitive assembly or bin-picking, require richer feedback to make informed decisions at the controller level. Without this feedback, sequences must rely on blind timeouts rather than reliable grasp confirmation.
To address this, I have extended the driver to surface new state fields and implemented a optimization for the serial bus.
Key Features Added
Gripper Current (Effort): The driver now reads the motor current draw reported in hardware register byte 5. This provides a scaled representation of the force the gripper is exerting.
Object Detection Status: The driver now exposes a discrete status code emitted by the gripper firmware. This status indicates whether an object has been grasped, was missed, or if the fingers are still moving.
Modbus Traffic Optimization: Modbus write commands are now suppressed when the target speed, force, and position values have not changed since the previous cycle. This reduces unnecessary bus contention and leaves more bandwidth for status polling.
Architectural and API Updates
Interface Expansion: Two pure virtual methods, get_gripper_current() and get_object_detection_status(), were added to driver.hpp to ensure all implementations supply concrete hardware or mock data.
ros2_control Integration: The hardware interface now exports HW_IF_EFFORT and "object_detection_status" to downstream controllers. The URDF validation logic in on_init() was updated to accept 2, 3, or 4 state interfaces, allowing partial adoption and backwards compatibility with older URDFs.
Humble/Iron Compatibility: The signature of on_init() was updated to accept const hardware_interface::HardwareInfo& info instead of the older parameter type.
Velocity Calculation: A proper discrete-time derivative was implemented in the read() method for more stable velocity estimates.
Thread Safety: New std::atomic variables were introduced to safely transfer the raw current and object detection data across the thread boundary between the background polling loop and the real-time control loop.
I will open the Pull Request soon so you can review the code. Looking forward to your feedback!