You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The ``lbr_fri_ros2`` package adds :lbr_fri_ros2:`AsyncClient <lbr_fri_ros2::AsyncClient>`.
13
-
14
12
Software Architecture
15
13
---------------------
16
-
An overview of the software architecture is shown :ref:`below <target to software architecture figure>`:
17
-
18
-
.. _target to software architecture figure:
19
-
.. thumbnail:: img/lbr_fri_ros2.drawio.svg
20
-
:alt: lbr_fri_ros2
21
-
22
-
Design Principles
23
-
~~~~~~~~~~~~~~~~~
24
-
- Leave KUKA's FRI **untouched** (except for new ``ament_cmake`` build system) -> implemented through :ref:`FRI` package.
25
-
- Bridge ``nanopb`` (used within FRI for message definition) with ROS 2 Interface Definition Language (``IDL``) -> implemented through ``lbr_fri_idl`` package.
26
-
- Support future versions of the FRI -> implemented through ``vcstool`` and by separating the :ref:`FRI` package.
27
-
- Run stand-alone **and** within ``ros2_control`` -> implemented through :lbr_fri_ros2:`App <lbr_fri_ros2::App>`.
28
-
29
-
Implementation Details
30
-
~~~~~~~~~~~~~~~~~~~~~~
31
-
The FRI lets users communicate to the robot via a :fri:`ClientApplication <KUKA::FRI::ClientApplication>`. The :fri:`ClientApplication <KUKA::FRI::ClientApplication>` has (see :ref:`above <target to software architecture figure>`):
32
-
33
-
- :fri:`UdpConnection <KUKA::FRI::UdpConnection>` (UDP socket for reading states / sending commands)
34
-
- :fri:`Client <KUKA::FRI::LBRClient>` (interface for reading states / sending commands)
14
+
The ``lbr_fri_ros2`` package extends the FRI with:
35
15
36
-
The user calls :fri:`step <KUKA::FRI::ClientApplication::step()>`, which, depending on the robot's state, callbacks:
16
+
#. :lbr_fri_ros2:`AsyncClient <lbr_fri_ros2::AsyncClient>` for asynchronous communication to the hardware
17
+
#. :lbr_fri_ros2:`App <lbr_fri_ros2::App>` for running the :lbr_fri_ros2:`AsyncClient <lbr_fri_ros2::AsyncClient>` asynchronously
An overview of the software architecture is shown :ref:`below <software architecture figure>`:
41
20
42
-
The user can implement these callbacks to read states / send commands by implementing an :fri:`Client <KUKA::FRI::LBRClient>`.
43
-
44
-
The ``lbr_fri_ros2`` package implements an :fri:`Client <KUKA::FRI::LBRClient>` in :lbr_fri_ros2:`Client <lbr_fri_ros2::Client>`.
45
-
46
-
The :lbr_fri_ros2:`Client <lbr_fri_ros2::Client>` has
47
-
48
-
- A publisher to publish states in :lbr_fri_ros2:`pub_lbr_state_ <lbr_fri_ros2::Client::pub_lbr_state_()>`.
49
-
- A subscription to read commands in :lbr_fri_ros2:`on_lbr_command_ <lbr_fri_ros2::Client::on_lbr_command_(const lbr_fri_idl::msg::LBRCommand::SharedPtr lbr_command)>`.
50
-
51
-
Commands in :lbr_fri_ros2:`on_lbr_command_ <lbr_fri_ros2::Client::on_lbr_command_(const lbr_fri_idl::msg::LBRCommand::SharedPtr lbr_command)>` are checked for validity via a :lbr_fri_ros2:`CommandGuard <lbr_fri_ros2::CommandGuard>`.
21
+
.. _software architecture figure:
22
+
.. thumbnail:: img/lbr_fri_ros2_v1.5.0.svg
23
+
:alt: lbr_fri_ros2
52
24
53
-
API
54
-
~~~
55
-
For the ``Doxygen`` generated API, checkout `lbr_fri_ros2 <../../../docs/doxygen/lbr_fri_ros2/html/hierarchy.html>`_.
25
+
The :ref:`lbr_ros2_control` package can be considered a **User** in the above figure. It builds on top of the ``lbr_fri_ros2`` package to provide a ROS 2 interface to the hardware.
0 commit comments