Skip to content

Hardware interface for sending motion primitives to the robot via the Instruction Executor instead of trajectories #1341

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

Open
wants to merge 45 commits into
base: main
Choose a base branch
from

Conversation

mathias31415
Copy link

@mathias31415 mathias31415 commented Apr 11, 2025

This PR extends the ur_robot_driver package with a hardware interface for sending motion primitives to the robot via the Instruction Executor instead of traditional trajectory execution.

To reuse the state interface functionalities of the original hardware interface in the new motion_primitive_ur_driver, these functionalities have been refactored into a shared helper file: stateinterface_helper.hpp.

The implementation uses the motion_primitives_forward_controller, which is planned to be integrated into the ros2_controllers repository. (ros-controls/ros2_controllers#1636)

Motion primitives are received by the controller using the MotionPrimitive.msg from the industrial_robot_motion_interfaces package. A modified version of this message is used here, which includes additional helper types:

  • STOP_MOTION: Interrupts current robot motion and clears the motion queue.
  • MOTION_SEQUENCE_START and MOTION_SEQUENCE_END: Define a sequence block—primitives between these markers are grouped and executed as a single, blended motion sequence. This enables smooth transitions between individual primitives, unlike executing them one by one.

This implementation also depends on a pending Pull Request in the Universal_Robots_Client_Library. This PR extends the Instruction Executor with support for movec commands, which is required for executing circular Cartesian motions within this driver.

I'd appreciate any feedback or suggestions – thanks in advance!

…calls (and moved some more code to the helper header)
…tware_version_major_>= 5) in transform_force_torque() since ur_driver_ is not available in the ur_state_helper.hpp
… the hardware interface can receive a new motion primitive — replaces the previous, more complex handling via execution_status
…unch.py and added if else for driver_type to load the right ros2_control.xacro file in ur.urdf.xacro
@urfeex
Copy link
Member

urfeex commented Apr 11, 2025

Thank you for your contribution! I'll have a look at this hopefully soon.

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