ROSMonitoring adds runtime verification to ROS without tying it to one specification language. A YAML file names the topics to watch and the message types; a generator then writes monitor nodes in Python and rewires the launch files so traffic passes through them. Monitors hand each intercepted message, serialised as JSON, to a separate oracle that holds the property (the follow-up paper lists past-time LTL, MTL and STL oracles) and returns a verdict. Offline monitors only log. Online monitors either log the verdict and publish a warning, or filter: they drop messages that would violate the property, so the property is enforced on the topic.
I only saw the abstract and the description of the framework in its follow-up, ROSMonitoring 2.0 (Ghaffari Saadat, Ferrando, Dennis and Fisher, FMAS 2024).
Findings
- The abstract stresses portability across ROS distributions and independence from the specification formalism.
- It is demonstrated on a simulation of the Mars Curiosity rover, with experiments on how it scales. I did not see the numbers.
Limits
- Per the follow-up paper, the original framework monitors topics only (no ROS services) and orders events by when subscribers receive them, which can scramble the order across several topics.
- A filtering monitor sits in the message path, so its latency and failure become the system’s.
- Dropping a violating message is the only built-in reaction. What the robot should do instead is left to the developer.
Relevance
The filter mode is a tiny shield for ROS topics; compare shield synthesis and Simplex. The verdict semantics come from Leucker and Schallhart and Bauer et al.. The tool shows up as an exemplar in the ROS RV guidelines; see runtime monitoring.
Links
- DOI · ROSMonitoring 2.0 on arXiv
- Subfield: Safety and verification