[go: up one dir, main page]

Skip to content

CRISP Controllers Logo CRISP Controllers Logo

CRISP - Compliant ROS2 Controllers for Learning-Based Manipulation Policies

Authors: Daniel San Jose Pro1, Oliver Hausdörfer1, Ralf Römer1, Maximilian Dösch1, Martin Schuck 1 and Angela Schoellig 1.

You want to deploy your learning-based policy to your manipulator, or collect teleoperation data? CRISP provides the tools for that.

  • CRISP provides the ros2_control low-level controllers (compliant, real-time, C++, torque-based) and simple python interfaces CRISP_PY to interface with them. It is compatible with any manipulator offering an joint-level torque effort interface.

  • CRISP provides also a Gymnasium environment CRISP_GYM to deploy learning-based LeRobot policies and collect data in LeRobotDataset format.

If you use this work, please cite it using the bibtex below.

Check the controllers (CRISP controllers) , the simple python interface (CRISP_PY) , and a Gymnasium wrapper (CRISP_GYM) for real-world experiments.

Aloha gripper for Manipulators

Check out aloha4franka for the gripper used in the videos.

Why?

Learning-based controllers, such as diffusion policies, deep reinforcement learning, and vision-action-models in general, typically output low-frequency or sporadic target poses, necessitating a low-level controller to track these references smoothly, especially in contact-rich environments. While ROS2 frameworks like MoveIt offer comprehensive motion planning capabilities, they are often unnecessarily complex for tasks requiring simple, real-time pose or joint servoing.

We present a set of lightweight, torque-based Cartesian and joint-space controllers implemented in C++ for ros2_control, compatible with any robot exposing an effort interface—a common standard among modern manipulators. Our controllers incorporate friction compensation, joint limit avoidance, and error clipping, and have been validated on the Franka Robotics FR3 on hardware, and on various platforms in simulation.

We provide tooling to collect data in LeRobotDataset format using teleoperation and deploy learning-based policies with minimal effort using CRISP_PY and CRISP_GYM.

Why the name "CRISP"? "CRISP" reflects our design philosophy behind the package: a concise, to-the-point implementation for easy deployment and integration in other software stacks.

Real World Deployments

Our controllers have been tested in real hardware on the following robots:

Many thanks community contributions:

  • Lev Kozlov @lvjonok for testing and providing interfaces for the Panda/FER.
  • Vincenzo Orlando @VinsOrl09 for testing and providing interfaces for the UR robots.

Check the robots in action:

UR5 Robot using a CRISP controller to track a circular trajectory while being disturbed.
End-To-End policy stacking Lego bricks with the CRISP controllers.

Features

  • 🐍 Python interface to move your ROS2 robot around without having to think about topics, spinning, and more ROS2 concepts but without losing the powerful ROS2 API. Check CRISP_PY for more information and examples.
  • 🔁 Gymnasium environment with utilities to deploy learning-based policies and record trajectories in LeRobotFormat. Check CRISP_GYM.
  • Demos showcasing how to use the controller with FR3 of Franka Emika in single and bimanual setup. Check the crisp_controller_demos.
  • ⚙️ Dynamically and highly parametrizable: powered by the generate_parameter_library you can modify stiffness and more during operation.
  • 🤖 Operational Space Controller as well as Cartesian Impedance Controller for torque-based control.
  • 🚫 No MoveIt or complicated path-planning, just a simple C++ ros2_controller. Ready to use.

Citing

You can check our preprint on arXiv: 2509.06819

@misc{pro2025crispcompliantros2,
      title={CRISP - Compliant ROS2 Controllers for Learning-Based Manipulation Policies and Teleoperation}, 
      author={Daniel San José Pro and Oliver Hausdörfer and Ralf Römer and Maximilian Dösch and Martin Schuck and Angela P. Schöllig},
      year={2025},
      eprint={2509.06819},
      archivePrefix={arXiv},
      primaryClass={cs.RO},
      url={https://arxiv.org/abs/2509.06819}, 
}

  1. The authors are with Technical University of Munich, Germany; TUM School of Computation, Information and Technology, Department of Computer Engineering, Learning Systems and Robotics Lab; Munich Institute of Robotics and Machine Intelligence.