A good way to start a project is doing a state-of-the-art. Here, we decided to go for a currated list of ROS packages that have real-time features, whether soft, firm or hard. We will not list the ROS2 packages with real-time features, since ROS2 was meant to have at least soft real-time capabilities from day one.
Real Time and ROS
Set of packages
OROCOS
The OROCOS Toolchain allows setup, distribution and the building of real-time software components. It is sometimes refered to as ‘middleware’ because it sits between the application and the Operating System. It takes care of the real-time communication and execution of software components.
Basically every ROS function that you might be used to call in regular rosnode has been wrapped for orocos to be Real-Time Safe.
Most used features include :
- Transform the deployer into a ROS node (rtt_rosnode)
- Connect an Orocos port to a ROS topic (rtt_roscomm)
- Connect an Orocos operation to a ROS service (rtt_roscomm)
- Map Orocos Parameters with the ROS parameter server (rtt_rosparam)
- Get the clock from ros (rtt_rosclock)
List of packages from OROCOS
- rtt_ros ROS package import plugin as well aswrapper scripts and launchfiles for using Orocoswith ROS.
- rtt_rosclock Realtime-Safe NTP clock measurementand ROS Time structure construction as well as asimulation-clock-based periodic RTT activity.
- rtt_rosnode Plugin for ROS node instantiationinside an Orocos program.
- rtt_rosparam Plugin for synchronizing ROSparameters with Orocos component properties.
- rtt_roscomm ROS message typekit generation and Orocos plugin for publishing and subscribing to ROS topics as well as calling and responding toROS services.
- rtt_rosdeployment An RTT service whichadvertises common DeploymentComponent operationsas ROS services.
- rtt_rospack Plugin for locating ROS resources.
- rtt_tf RTT-Plugin which uses tf to allow RTTcomponents to lookup and publish transforms.
- rtt_actionlib RTT-Enabled actionlib actionserver for providing actions from ROS-integratedRTT components.
- rtt_dynamic_reconfigure A service plugin thatimplements a dynamic_reconfigure server toupdate properties dynamically during runtime.
- rtt_ros_msgs ROS .msg and .srv types for usewith these plugins.
- rtt_ros_integration Catkin metapackage for this repository.
Packages
rtt_lwr
rtt_lwr is a set of components for controlling the Kuka LWR and IIWA at 1Khz. It relies on OROCOS for the real-time part, but also interfaces with ROS so we can use Rviz, MoveIt, ros-control etc.
It has been designed so researchers/Phd Students/Engineers at ISIR can develop generic controllers for light weight robots and seemlessly switch between simulation/real hardware without the need to recompile their code.
- Maintainer status: not maintained
- Maintainers: TBD
- Author: TBD
- Licence: TBD
- Bug / feature tracker: None
-
Source: https://github.com/orocos/rtt_ros_control.git
- Additional Infos : Rock Core may be using the package. Need to investigate.
Toolboxes
realtime_tools
Contains a set of tools that can be used from a hard realtime thread, without breaking the realtime behavior.
Basically, it implements a real-time clock consistent with ROS in order to help you not break real-time constraints.
- Maintainer status: maintained
- Maintainer: Bence Magyar
, Gennaro Raiola - Author: Stuart Glaser
- License: BSD
- Bug / feature tracker: https://github.comros-controls/realtime_tools/issues
- Source: git https://github.com/ros-controlsrealtime_tools.git (branch: melodic-devel)
ROS2 and Real Time
Real-time computing is a key feature of many robotics systems, particularly safety- and mission-critical applications such as autonomous vehicles, spacecrafts, and industrial manufacturing. We are designing and prototyping ROS 2 with real-time performance constraints in mind, since this is a requirement that was not considered in the early stages of ROS 1 and it is now intractable to refactor ROS 1 to be real-time friendly.
The official way to build a real-time linux to use the real-time features of ROS2 is to patch a vanilla kernel with RTPREEMPT Linux.