The ROS2 control hardware_interface::SystemInterface is implemented via the Fast Robot Interface (FRI), which we integrated into the ROS2 build system. Everything is setup for MoveIt2 and for the Gazebo simulation. Supported are iiwa7, iiwa14, med7, med14. This is built for foxy, but it is a work in progress and other branches are to follow.
Hi, that’s a very nice package thanks a lot. I had a look at the hardware interface and the FRI interface and have a question. Can you guarantee that the FRI communication is ensured in real time independent from how long the controller update phase is. I tried to build a driver myself and have an extra communication tread which runs independently from the control loop. this way I can ensure that no matter how long the controller might take to compute the communication is still running at real time. I am not sure if this is overkill.
as maintainer of ros2_control I think your approach is good and actually recommended for the most applications. Occasionally, you want to have tighter synchronization between controllers and hardware and use them from one thread. Then you should start thinking about RT-Preempt or other real-time Kernel. (we just have contributions about that to have them more tightly integrated into ros2_control).
hi Maximilian, the way this package is currently built, the FRI manages the control rate of the ros2_control_node. Therefore, if a controller takes too long to compute an update, the communication to the robot will drop. We initially had the communication to the robot run in a separate thread, same as your approach, but found it difficult to synchronize FRI and ros2_control. Maybe we will revert back to this approach in the future. Did you experience any unsteady motion when running the communication in a separate thread?
Update: We made significant changes to the lbr_fri_ros2_stack. Rolling & Humble are now supported. Additionally, the FRI runs now in a separate thread!