Skip to content

Cartesian Controller Server that combines ROS2 and YARP for generic system teleoperation.

Notifications You must be signed in to change notification settings

mercerebo1/cartesian-controllers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cartesian-controllers

Cartesian Controller Server that combines ROS2 and YARP for generic system teleoperation.

This project integrates YARP and ROS 2 to provide a Cartesian control server for robots. It enables communication with a YARP subdevide through its ICartesianControl interface, while allowing the robot's current position to be published and commands to be received via ROS 2 nodes.

Overview

The CartesianControlServerROS2 package is part of the cartesian-controllers repository. It acts as a bridge between YARP and ROS 2, providing real-time control and feedback for robotic systems. The server allows for the manipulation of the robot’s position, velocity, and force/torque, as well as gripper control.

Key Features

  • Direct control via YARP's ICartesianControl interface.
  • ROS 2 integration for publishing robot states and receiving commands from ROS 2 nodes.
  • Supports position, velocity, force/torque, and gripper control via dedicated callbacks.
  • Fully configurable parameters such as command types and reference frames (base or TCP).

Installation

Clone the repository and install the necessary dependencies:

~$ git clone https://github.com/mercerebo1/cartesian-controllers.git
~$ cd cartesian-controllers

Ensure both YARP and ROS 2 are correctly installed and configured on your system.

Usage example

This Cartesian Control Server was initially created to use BasicCartesianControl as a YARP subdevice from kinematics-dynamics. Please, see below proposed control arquitecture:

Control arquitecture proposed.

  • Block 1: /spacenav node from spacenav package which sends buttons state and linear and angular component of a SpaceMouse.

  • Block 2: /spacenav_device node from spacenav_device package that manage analogic data received and proccess data according three control modes: Twist (command velocities to TCP), Pose (command positions to TCP) and Wrench (command forces to TCP).

  • Block 3: Current Cartesian Control Server ROS 2 which is able to communicate to other ROS 2 nodes and wrap a YARP subdevice (BasicCartesianControl).

  • Block 4: Joint control from cartesian control applying Inverse Kinematics solver 'Screw Theory' from kinematics-dynamics.

  • Block 5: Actuation control accessed by Motor Control Interfaces differentiating between simulated and real environment.

This control arquitecture is a modification from the arquitecture presented in “A generic controller for teleoperation on robotic manipulators using low-cost devices,” [1]. The aim is to start a transition from YARP to ROS 2.

References

[1] B. Łukawski, J. G. Victores, and C. Balaguer, “A generic controller for teleoperation on robotic manipulators using low-cost devices,” in XLIV Jornadas de Automática, 2023, pp. 785-788. [Online]. Available: https://doi.org/10.17979/spudc.9788497498609.785.

Available Callbacks:

The server handles multiple types of commands through ROS 2 topics:

  • poseTopic_callback: Processes Pose messages to send position commands to the controller.
  • twistTopic_callback: Processes Twist messages to control the robot's velocity.
  • wrenchTopic_callback: Processes Wrench messages to send force/torque commands.
  • gripperTopic_callback: Controls the robot’s gripper actuator (open, close, stop).

Parameter Configuration:

The server allows the configuration of several parameters, including:

  • Transmission command type: Define the type of control commands (position, velocity, force).
  • Reference frame: Select between base or TCP frame for executing commands.

Code Structure

CartesianControlServerROS2.cpp

This file implements the main server logic for handling Cartesian control:

  • Subscription Callbacks: Manages incoming messages to control the robot’s position, velocity, force, and gripper.
  • Parameter Management: Dynamically adjusts the server's settings based on incoming messages to ensure correct robot control.

DeviceDriverImpl.cpp

This file handles device-level control, including:

  • Initialization and Configuration: Opens the Cartesian control device, sets execution parameters, and initializes the ROS 2 node.
  • Publications and Subscriptions: Sends PoseStamped messages and listens for Pose, Twist, Wrench, and Int32 messages for gripper control.
  • Robot Control: Defines callbacks for processing commands and sending them to the controller.

PeriodicThreadImpl.cpp

This file implements the run function, which updates the robot's state periodically:

  • State Retrieval: Captures the current position and status of the robot.
  • Time Conversion: Converts timestamps for ROS 2 message compatibility.
  • Orientation Calculation: Computes robot orientation using the KDL library.
  • Message Publication: Sends PoseStamped messages with updated robot state to the ROS 2 topic.

Contributing

Feel free to submit issues or pull requests to improve the project. Contributions are welcome!

About

Cartesian Controller Server that combines ROS2 and YARP for generic system teleoperation.

Resources

Stars

Watchers

Forks