Skip to content

Commit 01a5055

Browse files
committed
Merge branch 'main' into humble
2 parents abf9d78 + df011c2 commit 01a5055

File tree

5 files changed

+67
-19
lines changed

5 files changed

+67
-19
lines changed

CITATION.cff

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
cff-version: 1.2.0
2+
message: "If you enjoyed using this repository for your work, we would really appreciate ❤️ if you could cite it, as it helps us to continue offering support."
3+
authors:
4+
- family-names: Huber
5+
given-names: Martin
6+
orcid: https://orcid.org/0000-0003-4603-6773
7+
- family-names: Mower
8+
given-names: Christopher E.
9+
orcid: https://orcid.org/0000-0002-3929-9391
10+
- family-names: Ourselin
11+
given-names: Sebastien
12+
orcid: https://orcid.org/0000-0002-5694-5340
13+
- family-names: Vercauteren
14+
given-names: Tom
15+
orcid: https://orcid.org/0000-0003-1794-0456
16+
- family-names: Bergeles
17+
given-names: Christos
18+
orcid: https://orcid.org/0000-0002-9152-3194
19+
20+
21+
title: "LBR-Stack: ROS 2 and Python Integration of KUKA FRI for Med and IIWA Robots"
22+
version: 1.3.1
23+
doi: 10.48550/arXiv.2311.12709
24+
date-released: 2023-11-22

README.md

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# lbr_stack_doc
22
[![Documentation Status](https://readthedocs.org/projects/lbr-fri-ros2-stack-doc/badge/?version=humble)](https://lbr-fri-ros2-stack-doc.readthedocs.io/en/humble/?badge=humble)
3+
[![status](https://joss.theoj.org/papers/c43c82bed833c02503dd47f2637192ef/status.svg)](https://joss.theoj.org/papers/c43c82bed833c02503dd47f2637192ef)
34

45
This repository holds the documentation for the [lbr-stack](https://github.com/lbr-stack).
56

@@ -43,15 +44,30 @@ Open and browse the documentation by opening `doc/source/html/index.html`.
4344
To build the [paper](paper/paper.md) via [Docker](https://joss.readthedocs.io/en/latest/submitting.html#docker), run
4445

4546
```shell
46-
docker run --rm \
47-
--volume $PWD/paper:/data \
48-
--user $(id -u):$(id -g) \
49-
--env JOURNAL=joss \
50-
openjournals/inara
47+
docker run --rm -it \
48+
-v $PWD:/data \
49+
-u $(id -u):$(id -g) \
50+
openjournals/inara \
51+
-o pdf,crossref,preprint \
52+
paper/paper.md
5153
```
5254

5355
inside the `lbr_stack_doc` repository.
5456

57+
## Citation
58+
If you enjoyed using this repository for your work, we would really appreciate ❤️ if you could cite it, as it helps us to continue offering support.
59+
60+
```
61+
@misc{huber2023lbrstack,
62+
title={LBR-Stack: ROS 2 and Python Integration of KUKA FRI for Med and IIWA Robots},
63+
author={Martin Huber and Christopher E. Mower and Sebastien Ourselin and Tom Vercauteren and Christos Bergeles},
64+
year={2023},
65+
eprint={2311.12709},
66+
archivePrefix={arXiv},
67+
primaryClass={cs.RO}
68+
}
69+
```
70+
5571
## Acknowledgements
5672
<img src="https://www.kcl.ac.uk/newimages/Wellcome-EPSRC-Centre-medical-engineering-logo.xa827df3f.JPG?f=webp" alt="wellcome" height="45" width="65" align="left">
5773

44.2 KB
Binary file not shown.

paper/img/joss_figure.png

378 KB
Loading

paper/paper.md

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,16 @@ authors:
3333
affiliations:
3434
- name: School of Biomedical Engineering and Image Sciences, King's College London, United Kingdom
3535
index: 1
36-
date: 12 May 2023
36+
date: 21 November 2023
3737
bibliography: paper.bib
3838
---
3939

40+
![Supported robots in the LBR-Stack. From left to right: KUKA LBR IIWA7, IIWA14, Med7, Med14. Visualizations made using Foxglove [^1].](img/joss_figure.png)
41+
42+
[^1]: Foxglove: [https://foxglove.dev/ros](https://foxglove.dev/ros).
43+
4044
# Summary
41-
The `LBR-Stack` is a collection of packages that simplify the usage and extend the capabilities of KUKA's Fast Robot Interface (FRI) [@fri]. It is designed for mission critical hard real-time applications. Supported are the `KUKA LBR Med7/14` and `KUKA LBR iiwa7/14` robots in the Gazebo simulation [@gazebo] and for communication with real hardware. A demo video can be found [here](https://www.linkedin.com/posts/mhubii_robotics-opensource-ros2-activity-7009974676017848320-S3U5/?utm_source=share&utm_medium=member_desktop).
45+
The `LBR-Stack` is a collection of packages that simplify the usage and extend the capabilities of KUKA's Fast Robot Interface (FRI) [@fri]. It is designed for mission critical hard real-time applications. Supported are the `KUKA LBR Med7/14` and `KUKA LBR IIWA7/14` robots in the Gazebo simulation [@gazebo] and for communication with real hardware. A demo video can be found [here](https://www.linkedin.com/posts/mhubii_robotics-opensource-ros2-activity-7009974676017848320-S3U5/?utm_source=share&utm_medium=member_desktop). An overview of the software architecture is shown in Figure \ref{fig:fri}.
4246

4347
At the `LBR-Stack`'s core are two packages:
4448

@@ -47,27 +51,31 @@ At the `LBR-Stack`'s core are two packages:
4751

4852
All other packages are built on top. These include Python bindings and packages for integration into the Robot Operating System (ROS) and ROS 2:
4953

50-
- **pyFRIClient**: Python bindings for the **fri**.
54+
- **pyFRI**: Python bindings for the **fri**.
5155
- **lbr_fri_ros2_stack**: ROS 1/2 integration of the `KUKA LBR`s through the **fri_vendor**.
5256

5357
For brevity, and due to the architectural advantages over ROS [@ros2], only ROS 2 is considered in the following. The **lbr_fri_ros2_stack** comprises the following packages:
5458

5559
- **lbr_bringup**: Python library for launching the different components.
56-
- **lbr_description**: Description files for the `Med7/14` and `iiwa7/14` robots.
60+
- **lbr_description**: Description files for the `Med7/14` and `IIWA7/14` robots.
5761
- **lbr_demos**: Demonstrations for simulation and the real robots.
5862
- **lbr_fri_msgs**: Interface Definition Language (IDL) equivalent of FRI protocol buffers.
5963
- **lbr_fri_ros2**: FRI ROS 2 interface through `realtime_tools` [@ros_control].
60-
- **lbr_hardware_interface**: Interface for `ros2_control` [@ros2_control].
64+
- **lbr_ros2_control**: Interface and controllers for `ros2_control` [@ros2_control].
6165
- **lbr_moveit_config**: MoveIt 2 configurations [@moveit].
6266

67+
![An overview of the overall software architecture. There exists a single source for KUKA's FRI. This design facilitates that downstream packages, i.e. the Python bindings and the ROS 2 package, can easily support multiple FRI versions. The ROS 2 side utilizes vcstool[^2].\label{fig:fri}](img/fri_dependency_architecture.pdf)
68+
69+
[^2]: vcstool: [https://github.com/dirk-thomas/vcstool](https://github.com/dirk-thomas/vcstool).
70+
6371
# Statement of need
6472
<!-- statement of need in a research context -->
6573

6674
An overview of existing work that interfaces the KUKA LBRs from an external computer is given in Table 1. We broadly classify these works into custom communication solutions [@iiwa_stack; @kuka_sunrise_toolbox; @libiiwa] and communication solutions through KUKA's FRI UDP channel [@iiwa_ros; @iiwa_ros2]. The former can offer greater flexibility while the latter offer a well defined interface and direct software support from KUKA. Contrary to the custom communication solutions, the FRI solutions additionally enable hard real-time communication, that is beneficial for mission critical development. Stemming from translational medical research, this work therefore focuses on the FRI.
6775

6876
Limitations with the current FRI solutions are:
6977

70-
1. Only support `iiwa7/14` robots, not `Med7/14`.
78+
1. Only support `IIWA7/14` robots, not `Med7/14`.
7179
2. Don't provide Python bindings.
7280
3. Maintainability:
7381
* Modified client source code [iiwa_ros](https://github.com/epfl-lasa/iiwa_ros).
@@ -78,14 +86,14 @@ Limitations with the current FRI solutions are:
7886

7987
The first original contribution of this work is to add support for the `KUKA LBR Med7/14` robots, which, to the best author's knowledge, does not exist in any other work. The second novel contribution of this work is to provide Python bindings. This work solves the maintainability by outsourcing the FRI into the separate **fri** and **fri_vendor** packages, which leaves the FRI's source code untouched and simply provides build support. 4. is solved by defining an IDL message to KUKA's `nanopb` command and state protocol buffers in **lbr_fri_msgs**. These messages can then be interfaced from ROS 1/2 topics or from the ROS 1/2 hardware abstraction layer.
8088

81-
| Framework | iiwa | Med | ROS | ROS 2 | RT | FRI | Pos | Imp | Cart Imp | HW IF |
82-
| --------------- | ---- |---- | --- | ------ | -- | ---- | --- | --- | -------- | ------ |
83-
|[lbr_fri_ros2_stack](https://github.com/lbr-stack/lbr_fri_ros2_stack) | \bullet | \bullet | \bullet | \bullet | \bullet | \bullet | \bullet | \bullet | \bullet | \bullet |
84-
| [iiwa_ros](https://github.com/epfl-lasa/iiwa_ros) | \bullet | | \bullet | | \bullet | \bullet | \bullet | \bullet | | \bullet |
85-
| [iiwa_ros2](https://github.com/ICube-Robotics/iiwa_ros2) | \bullet | | | \bullet | \bullet | \bullet | \bullet | \bullet | | \bullet |
86-
| [iiwa-stack](https://github.com/IFL-CAMP/iiwa_stack) | \bullet | | \bullet | | | | \bullet | \bullet | \bullet | |
87-
| [libiiwa](https://github.com/Toni-SM/libiiwa) | \bullet | | \bullet | \bullet | | | \bullet | \bullet | \bullet | |
88-
| [KST-KUKA](https://github.com/Modi1987/KST-Kuka-Sunrise-Toolbox) | \bullet | | | | | | \bullet | \bullet | \bullet | |
89+
| Framework | IIWA | Med | ROS | ROS 2 | RT | FRI | pyFRI | Pos | Imp | Cart Imp | HW IF |
90+
| --------------- | ---- |---- | --- | ------ | -- | --- | ----- | --- | --- | -------- | ------ |
91+
| [lbr-stack](https://github.com/lbr-stack) | $\bullet$ | $\bullet$ | $\bullet$ | $\bullet$ | $\bullet$ | $\bullet$ | $\bullet$ | $\bullet$ | $\bullet$ | $\bullet$ | $\bullet$ |
92+
| [iiwa_ros](https://github.com/epfl-lasa/iiwa_ros) | $\bullet$ | | $\bullet$ | | $\bullet$ | $\bullet$ | | $\bullet$ | $\bullet$ | | $\bullet$ |
93+
| [iiwa_ros2](https://github.com/ICube-Robotics/iiwa_ros2) | $\bullet$ | | | $\bullet$ | $\bullet$ | $\bullet$ | | $\bullet$ | $\bullet$ | | $\bullet$ |
94+
| [iiwa-stack](https://github.com/IFL-CAMP/iiwa_stack) | $\bullet$ | | $\bullet$ | | | | | $\bullet$ | $\bullet$ | $\bullet$ | |
95+
| [libiiwa](https://github.com/Toni-SM/libiiwa) | $\bullet$ | | $\bullet$ | $\bullet$ | | | | $\bullet$ | $\bullet$ | $\bullet$ | |
96+
| [KST-KUKA](https://github.com/Modi1987/KST-Kuka-Sunrise-Toolbox) | $\bullet$ | | | | | | | $\bullet$ | $\bullet$ | $\bullet$ | |
8997

9098
Table: Overview of existing frameworks for interfacing the KUKA LBRs. A square indicates support for the respective feature. List of abbreviations: Hard Real-time (**RT**), Position Control (**Pos**), Impedance Control (**Imp**), Cartesian Impedance Control (**Cart Imp**), Hardware Interface (**HW IF**).
9199

0 commit comments

Comments
 (0)