title | tags | header-includes | authors | affiliations | date | bibliography | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
LBR-Stack: ROS 2 and Python Integration of KUKA FRI for Med and IIWA Robots |
|
|
|
|
21 November 2023 |
paper.bib |
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 LBR
s 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
andIIWA7/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 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:
- Only support
IIWA 7/14
robots, notMed 7/14
. - Don't provide Python bindings.
- Don't support multiple FRI versions:
- 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 | |||||||||||
iiwa_ros | |||||||||||
iiwa_ros2 | |||||||||||
iiwa-stack | |||||||||||
libiiwa | |||||||||||
KST-KUKA |
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).
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).
Footnotes
-
Foxglove: https://foxglove.dev/ros. ↩
-
vcstool: https://github.com/dirk-thomas/vcstool. ↩