Skip to content

Latest commit

 

History

History
105 lines (84 loc) · 7.76 KB

paper.md

File metadata and controls

105 lines (84 loc) · 7.76 KB
title tags header-includes authors affiliations date bibliography
LBR-Stack: ROS 2 and Python Integration of KUKA FRI for Med and IIWA Robots
C++
Python
ROS 2
KUKA LBR Med
KUKA LBR IIWA
Hard Real-time
\usepackage{pifont}
\newcommand{\cmark}{\ding{51}}
\newcommand{\xmark}{\ding{55}}
name orcid corresponding affiliation
Martin Huber
0000-0003-4603-6773
true
1
name orcid affiliation
Christopher E. Mower
0000-0002-3929-9391
1
name orcid affiliation
Sebastien Ourselin
0000-0002-5694-5340
1
name orcid equal-contrib affiliation
Tom Vercauteren
0000-0003-1794-0456
true
1
name orcid equal-contrib affiliation
Christos Bergeles
0000-0002-9152-3194
true
1
name index
School of Biomedical Engineering & Imaging Sciences, King's College London, United Kingdom
1
21 November 2023
paper.bib

Supported robots in the LBR-Stack. From left to right: KUKA LBR IIWA 7 R800, IIWA 14 R820, Med 7 R800, Med 14 R820. Visualizations made using Foxglove .

Summary

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 Med 7/14 and KUKA LBR IIWA 7/14 robots in the Gazebo simulation [@gazebo] and for communication with real hardware. A demo video can be found here. An overview of the software architecture is shown in Figure \ref{fig:fri}.

At the LBR-Stack's core is the following package:

  • fri: Integration of KUKA's original FRI client library into CMake: link.

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

  • pyfri: Python bindings for the fri: link.
  • lbr_fri_ros2_stack: ROS 1/2 integration of the KUKA LBRs through the fri: link.

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:

  • lbr_bringup: Python library for launching the different components.
  • lbr_description: Description files for the Med7/14 and IIWA7/14 robots.
  • lbr_demos: Demonstrations for simulation and the real robots.
  • lbr_fri_idl: Interface Definition Language (IDL) equivalent of FRI protocol buffers.
  • lbr_fri_ros2: FRI ROS 2 interface through realtime_tools [@ros_control].
  • lbr_ros2_control: Interface and controllers for ros2_control [@ros2_control].
  • lbr_moveit_config: MoveIt 2 configurations [@moveit].

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.\label{fig:fri}

Statement of need

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.

Limitations with the current FRI solutions are:

  1. Only support IIWA 7/14 robots, not Med 7/14.
  2. Don't provide Python bindings.
  3. Don't support multiple FRI versions:
    • Modified FRI client source code iiwa_ros.
    • FRI client library tangled into the source code iiwa_ros2.
  4. Partial support of FRI functionality. Both, iiwa_ros and iiwa_ros2, exclusively aim at providing implementations of the ROS 1/2 hardware abstraction layer. This does not support:
    • FRI's cartesian impedance control mode.
    • FRI's cartesian control mode (FRI version 2 and above).

The first original contribution of this work is to add support for the KUKA LBR Med 7/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 support for multiple FRI versions by treating the FRI library as an externally provided library by separating it into the fri package, which leaves the FRI's source code untouched and simply provides build support. The partial support for the FRI functionality is solved by defining an IDL message to KUKA's nanopb command and state protocol buffers in lbr_fri_idl. These messages can then be interfaced from ROS 1/2 topics via simple controllers or from the ROS 1/2 hardware abstraction layer.

Framework IIWA Med ROS ROS 2 RT FRI pyfri Pos Imp Cart Imp HW IF
lbr-stack $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$
iiwa_ros $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$
iiwa_ros2 $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$
iiwa-stack $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$
libiiwa $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$ $\bullet$
KST-KUKA $\bullet$ $\bullet$ $\bullet$ $\bullet$

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).

Acknowledgement

We want to acknowledge the work in [@iiwa_stack], as their MoveIt configurations were utilized in a first iteration of this project.

This work was supported by core funding from the Wellcome/EPSRC [WT203148/Z/16/Z; NS/A000049/1], the European Union’s Horizon 2020 research and innovation programme under grant agreement No 101016985 (FAROS project), and EPSRC under the UK Government Guarantee Extension (EP/Y024281/1, VITRRO).

References

Footnotes

  1. Foxglove: https://foxglove.dev/ros.

  2. vcstool: https://github.com/dirk-thomas/vcstool.