NASA's Ogma > Introducing preliminary ROS support

Hi everyone! :wave:

I’m new around here. I’m the creator and developer of Ogma, a NASA tool that transforms high level languages into runtime monitors. For those unfamiliar, the idea of runtime monitoring (or runtime verification) is to have code that checks that everything within your mission/operation is nominal, and warns the system or the human operator if not.

A common use case for Ogma is to transform high-level requirements written in structured natural language (FRET) into hard real-time C99 monitors, together with a NASA Core Flight System application (cFS). We’ve also used it to monitor X-Plane simulations, like this (the little widget on the right incorporates our monitors running based on the simulator data):


We are now introducing support for ROS. The idea would be that users can write properties in a high-level language (Lustre, FRET, others?), and Ogma will produce a self-contained ROS package that will check in runtime whether those properties hold, and notify in some way if not.

This line of work has been made available at GitHub - nasa/ogma at develop-ros. I’d like to invite everyone to participate. Perhaps you can help us understand how to best generate the ROS package, what notification mechanisms you’d prefer to see, other high-level languages specifically connected to the robotics domain that we should support, or other changes we should make. I also know that the ROS interface has been changing, and we’d definitely like to provide code that the community can use. Your feedback will be very helpful in that respect.

Feel free to try it. If you have any issues installing Ogma itself (irrespective of ROS support), feel free to open an issue on github. If you have any comments regarding ROS support specifically, you can post them here.



As part of Space ROS, we’re starting to work on an improvement to the diagnostics system for ROS 2, based on the existing system and the diagnostics system from ROS 1. This looks like it would be an excellent source of events for it.


That sounds great! Let me know if the interface is different or anything needs to change to make that possible. Happy to hop on a quick call at some point to discuss.

That was my first impression, too. Although rosconsole is mighty, publishing the status information on /diagnostics sounds more meaningful to me.


We’ve made some improvements to the prototype. I think we’ll soon be ready to merge into the main development branch.

Are you leading the development of Space ROS?



Wrt to publishing to /diagnostics, we currently default to a custom monitoring topic, but we could make it customizable so people don’t even have to edit the code we generate.

Really cool project. Does it support temporal logic specification?

Yes. However, FRET supports writing monitors also in natural language. But you can use several temporal logics to write monitors as well.

The monitors (even for TL) are guaranteed to be hard realtime.

Cool! I will look into it when I get a chance :smiley:

1 Like