diff --git a/docs/getting_started_controllers.md b/docs/getting_started_controllers.md
index 321db20..bb4b17d 100644
--- a/docs/getting_started_controllers.md
+++ b/docs/getting_started_controllers.md
@@ -22,6 +22,7 @@ Robots that we tested are:
- **FR3** (real and simulated): https://github.com/danielsanjosepro/pixi_franka_ros2
- **FER/Panda** (real): https://github.com/lvjonok/pixi_panda_ros2
+- **UR5** (real): https://github.com/danielsanjosepro/crisp_ur_demo
- **IIWA** (simulated): https://github.com/danielsanjosepro/pixi_iiwa_ros2
### Grippers
@@ -54,12 +55,13 @@ Some other manipulators that could be added to this list is [Duatic](https://git
### Available Demos
-| Robots | Franka Robotics FR3 | FR Dual FR3 | IIWA 14 | Kinova Gen3 |
-| :--- | :---: | :---: | :---: | :---: |
-| MuJoCo simulated Hardware | ✅ | ✅ | ✅ | ✅ |
-| Real Hardware | ✅ | ✅ | ❔[^1] | ❔[^1] |
+| Robots | Franka Robotics FR3 | FR Dual FR3 | IIWA 14 | Kinova Gen3 | UR5 |
+| :--- | :---: | :---: | :---: | :---: | :---: |
+| MuJoCo simulated Hardware | ✅ | ✅ | ✅ | ✅ | ✅ [^2]|
+| Real Hardware | ✅ | ✅ | ❔[^1] | ❔[^1] | ✅ [^2] |
[^1]: Untested, but effort interface available.
+[^2]: Available at: https://github.com/danielsanjosepro/crisp_ur_demo
We also have some examples with cameras.
diff --git a/docs/index.md b/docs/index.md
index 452d5d5..f0fabc0 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -7,18 +7,21 @@ hide:
-
-
# CRISP - **C**ompliant **R**OS2 Controllers for Learn**i**ng-Ba**s**ed Manipulation **P**olicies
*Authors: [Daniel San Jose Pro](https://danielsanjosepro.github.io)[^1], [Oliver Hausdörfer](https://oliver.hausdoerfer.de/)[^1], [Ralf Römer](https://ralfroemer99.github.io)[^1], Maximilian Dösch[^1], [Martin Schuck](https://amacati.github.io/) [^1] and Angela Schoellig [^1]*.
[^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.
-> A collection of real-time, C++ controllers for compliant torque-based control for manipulators compatible with `ros2_control`. Developed for deploying high-level learning-based policies (VLA, Diffusion, ...) and teleoperation on your manipulator. It is compatible with any manipulator offering an effort interface.
+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](#citing) below._
-Check the [controllers (CRISP controllers) :simple-github:](https://github.com/utiasDSL/crisp_controllers) , robot [demos (CRISP controllers demos) :simple-github:](https://github.com/utiasDSL/crisp_controllers_demos), a simple [python interface (CRISP_PY) :simple-github:](https://github.com/utiasDSL/crisp_py), and a [Gymnasium wrapper (CRISP_GYM) :simple-github:](https://github.com/utiasDSL/crisp_gym) for real-world experiments.
+Check the [controllers (CRISP controllers) :simple-github:](https://github.com/utiasDSL/crisp_controllers), the simple [python interface (CRISP_PY) :simple-github:](https://github.com/utiasDSL/crisp_py), and a [Gymnasium wrapper (CRISP_GYM) :simple-github:](https://github.com/utiasDSL/crisp_gym) for real-world experiments.
+
!!! info "Aloha gripper for Manipulators"
Check out [aloha4franka](https://tum-lsy.github.io/aloha4franka/) for the gripper used in the videos.
@@ -32,31 +35,31 @@ Check the [controllers (CRISP controllers) :simple-github:](https://github.com/u
-
+
End-to-end policies in action performing different contact-rich tasks.
-
+
Recorded Trajectories in LeRobot format for different tasks using CRISP.
-
+
Provided example with 1x video of the tracking capabilities of the controller.
-
+
Leader-follower teleoperation for a pick and place task.
-

+
Controllers: Franka Robot - Following a moving target while base joint follows a sine curve
-

+
Controllers: Kinova Robot - Simulated robot with continuous joints and nullspace control
-

+
Controllers: IIWA Robot - Impedance control in simulation
@@ -98,10 +101,73 @@ While `ROS2` frameworks like `MoveIt` offer comprehensive motion planning capabi
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.
-Designed for fast integration and real-time control, our implementation lowers the barrier to deploying learning-based algorithms on `ROS2`-compatible platforms.
+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](https://github.com/lvjonok) for testing and providing interfaces for the Panda/FER.
+- Vincenzo Orlando [@VinsOrl09](https://github.com/lvjonok) 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](https://github.com/utiasDSL/crisp_py) for more information and examples.
- 🔁 **Gymnasium environment** with utilities to deploy learning-based policies and record trajectories in LeRobotFormat. Check [CRISP_GYM](https://github.com/utiasDSL/crisp_gym).
diff --git a/docs/media/CRISP_logo_with_robot.png b/docs/media/CRISP_logo_with_robot.png
new file mode 100644
index 0000000..e4530f0
Binary files /dev/null and b/docs/media/CRISP_logo_with_robot.png differ
diff --git a/docs/media/crisp_fr3_test.mp4 b/docs/media/crisp_fr3_test.mp4
new file mode 100644
index 0000000..f48aeef
Binary files /dev/null and b/docs/media/crisp_fr3_test.mp4 differ
diff --git a/docs/media/crisp_ur5_test.mp4 b/docs/media/crisp_ur5_test.mp4
new file mode 100644
index 0000000..3ca1921
Binary files /dev/null and b/docs/media/crisp_ur5_test.mp4 differ
diff --git a/docs/media/dynaarm_visual.png b/docs/media/dynaarm_visual.png
new file mode 100644
index 0000000..58a3264
Binary files /dev/null and b/docs/media/dynaarm_visual.png differ
diff --git a/docs/media/fr3_visual.png b/docs/media/fr3_visual.png
new file mode 100644
index 0000000..43f6052
Binary files /dev/null and b/docs/media/fr3_visual.png differ
diff --git a/docs/media/iiwa14_visual.png b/docs/media/iiwa14_visual.png
new file mode 100644
index 0000000..1f421b4
Binary files /dev/null and b/docs/media/iiwa14_visual.png differ
diff --git a/docs/media/panda_visual.png b/docs/media/panda_visual.png
new file mode 100644
index 0000000..c08b5a3
Binary files /dev/null and b/docs/media/panda_visual.png differ
diff --git a/docs/media/robotiq_visual.png b/docs/media/robotiq_visual.png
new file mode 100644
index 0000000..4369cf3
Binary files /dev/null and b/docs/media/robotiq_visual.png differ
diff --git a/docs/media/ur10_visual.png b/docs/media/ur10_visual.png
new file mode 100644
index 0000000..197ac0a
Binary files /dev/null and b/docs/media/ur10_visual.png differ
diff --git a/docs/media/ur5_test.mp4 b/docs/media/ur5_test.mp4
new file mode 100644
index 0000000..02eed2d
Binary files /dev/null and b/docs/media/ur5_test.mp4 differ
diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css
index 16dc37c..a579caf 100644
--- a/docs/stylesheets/extra.css
+++ b/docs/stylesheets/extra.css
@@ -21,6 +21,7 @@
justify-content: center;
border-radius: 12px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+ margin: 1rem 0.2rem;
}
.video-item video {
@@ -28,6 +29,30 @@
height: auto;
border-radius: 12px;
background-color: rgba(0, 0, 0, 0.0);
+ transition: filter 0.3s ease;
+}
+
+.video-item:hover video {
+ filter: grayscale(100%) brightness(0.5);
+}
+
+.video-item .hover-text {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ color: white;
+ font-size: 0.8rem;
+ font-weight: 300;
+ text-align: center;
+ padding: 0.1rem;
+ opacity: 0;
+ transition: opacity 0.3s ease;
+ pointer-events: none;
+}
+
+.video-item:hover .hover-text {
+ opacity: 1;
}
.highlight .vc {
@@ -229,7 +254,7 @@
}
.carousel-caption {
- font-size: 0.85rem;
+ font-size: 0.25rem;
padding: 0.8rem 1rem;
}
@@ -241,3 +266,54 @@
right: 0.5rem;
}
}
+
+/* Robot Grid Styles */
+.robot-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 1rem;
+ margin: 1rem 0;
+}
+
+.robot-card {
+ position: relative;
+ overflow: hidden;
+ border-radius: 8px;
+ border: 1px solid #ddd;
+}
+
+.robot-card img {
+ width: 100%;
+ height: auto;
+ display: block;
+ transition: transform 0.3s ease, filter 0.3s ease;
+}
+
+.robot-card:hover img {
+ transform: scale(1.2);
+}
+
+.robot-card.greyscale img {
+ filter: grayscale(100%);
+}
+
+.robot-card.greyscale:hover img {
+ filter: grayscale(0%);
+}
+
+.robot-card .robot-name {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background: rgba(0, 0, 0, 0.7);
+ color: white;
+ text-align: center;
+ padding: 0.5rem;
+ opacity: 0;
+ transition: opacity 0.3s ease;
+}
+
+.robot-card:hover .robot-name {
+ opacity: 1;
+}