/ornis

A Terminal User Interface for ROS2, build with NotCurses

Primary LanguageC++Creative Commons Zero v1.0 UniversalCC0-1.0

ORNIS (Open.Ros.Notcurses.Interface.System)

ORNIS build

What is it?

A waste of time (A Terminal User Interface for ROS2 (a ROS2 TUI)).

Current features

  • View currently active topics/nodes/services
  • Get information on currently active topics/nodes/services
  • Support for service calls
  • Streaming topics
  • *Kind of* Supports mouse workflows

Videos

Small demo video of topic selection and service calls.

ornis_topic_selection.mp4

Prerequisites

Notcurses
ROS2 Humble or above
Cyclone DDS

FastRTPS isn't supported, as there doesn't appear to be introspection support for it like there is for cyclonedds, although it appears to be in the works, and I plan on adding support for it as soon as I get a chance.

Windows and mac also aren't currently supported. Mac might work, feel free to try it and let me know how it goes.

Installation

You're going to need Notcurses. You can either initialise it as a submodule to this repo, and compile alongside ORNIS, or you can install it using your favourite package manager. Ensure you have ROS2 (Humble or newer) installed and sourced.

Install notcurses deps

apt-get install build-essential cmake doctest-dev libavdevice-dev libdeflate-dev libgpm-dev libncurses-dev libqrcodegen-dev libswscale-dev libunistring-dev pandoc pkg-config

Build ornis

mkdir ornis_ws && cd ornis_ws
git clone https://github.com/juraph-dev/ornis.git --depth 1
cd ornis
git submodule update --init
cd tools && ./compile.sh

Usage

Ensure ornis has been sourced by sourcing its setup.bash from your .bashrc

cd ornis_ws
echo 'source '$(pwd)'/install/setup.bash' >> ~/.bashrc
source ~/.bashrc
ornis

From here on out, you can just run ornis, then trust the bar at the top that tells you how to use it. You can probably click things too, if you're one of those kinds of people.

Future roadmap

I still have a ton of things I'd like to implement. To name a few:

  1. Proper topic visualisation, ala rosshow. At the moment, you only get the raw data displayed, I'd like to provide a meaningful and intuitive way to actually see the data being thrown around.
  2. Action support. I don't personally use Actions frequently, so it wasn't a very high priority for me. It'll be pretty easy for me to add it, the hard part of ORNIS has already been layed out, I just need to get around to doing it.
  3. Add support for multiple topic streams at once. The foundation is already there to allow the user to, for example: view a topic, while sending out a service call.
  4. I want to add a "graph view" for all of the currently launched nodes. In the same vein as Graphviz, with nodes linked by publishers/subscribers. I can see it being very useful (And fun) to be able to get an easy to digest visualisation of the node structure currently running on the robot.

Ackowledgements

ros2_introspection I blatantly stole a ton of code from here
dynamic message introspection tools And here
rosshow I actually started ORNIS before I found rosshow (Promise), but once I saw it, it really fueled the fire, having shown me the potential of clever data visualisation. It's a pretty great piece of software.
Notcurses, the library powering the visuals of ORNIS. Nick Black (The creator) is a super interesting dude, and I've enjoyed reading his guidebook, which is how I was introduced to Notcurses.
Arnav Borborah Their cpp14 template is pretty great, allowed me to quickly get ORNIS up and running with barely any hassle. Having a template to look at how things like CI and test modules should be layed out was also extremely useful (Even though I don't use either, ha)

Further reading

I wrote a long winded posted about ORNIS on my blog, for if you have absolutely nothing better to do with your time.