ORNIS: a ROS2 TUI

G’day everyone, long (long) time lurker, first time poster.

Over the last few months I’ve been working on a Terminal User Interface for ROS2. It’s written in C++, and uses Notcurses as the rendering library. I wanted to build something that was both fun to look at and use, which also made introspecting and interacting with a running ROS2 system less clunky.

A couple of gifs:
ornis_services ornis_subscription

The current feature list:

  • Echo/Plot topics
  • Send receive service calls.
  • View node list/information
  • Probably a few others that I’ve forgotten.

I have plans in the future to implement the following:

  • Interacting with actions/parameters.
  • More topic visualisation methods, in the same vein as rosshow. Notcurses is very powerful, it doesn’t look like it’d be too difficult to implement video streaming or point cloud visualisation.
  • Fuzzy search. For something like calling a service, my ideal workflow would look something like:
  1. Press ‘s’ for services
  2. Either use arrows to select, or just begin typing to show only fuzzy matched entries. So, typing something like ‘motor stop’ would show all services whose name contains both of those entries, in whatever order.
  3. Enter to select, enter again to display interaction form
  4. Simply fill out service, call, press enter to send it off, and view result.
    I think this approach would greatly assist with situations where you’re stuck on a laptop in the field, and you’re trying to debug/test parts of a complex workflow.
  • Adjustable theming. Currently, the colors are hard-coded, I intend on having it read from your terminal’s color scheme. It’s currently a bit hard on the eyes, to be honest.
  • Proper mouse support. It’s not that I hate the mouse inclined, It’s just an afterthought currently. I’m pretty sure It doesn’t work in the latest release. Now that I’ve decided to make it public, I will be putting more time into it.

You can find the repo here: https://gitlab.com/juraph/ornis. If anyone has any interest in contributing, and would prefer to use github, don’t hesitate to let me know. I’m happy to re-host it there.

A word of warning, it’s more than a little buggy, and frankly a bit bad. I’m still working on that part. But, I know that I’ll never end up sharing it anywhere if I wait until I’m happy with it.

I also have a bit of a dev log of my work on ORNIS, although I’m using the term ‘dev’ and ‘log’ very loosely here.

19 Likes

This is AMAZING!!!

I love that you used notcurses.
I’ll be waiting for the point cloud viz haha.

I can imagine this making my setup look much more hackery.

Thanks for sharing this project with us!

1 Like

ros2_introspection I blatantly stole a ton of code from here

You are welcome :smile:

2 Likes

Great work!

I have a qst about the roadmap of this tui tool, will the function of ornis covering whole aspect of ros2cli?

thanks!

If anyone has any interest in contributing, and would prefer to use github, don’t hesitate to let me know. I’m happy to re-host it there.

I’d like to contribute this repo in github, you can add me with username ZhenshengLee.

Thanks.

Awesome! I’d love to collaborate. I’ll move the repo over this weekend, and write up a roadmap on what I would like the future to hold. The next few items will be aimed towards feature parity with ROS2CLI, as well as more visualization features, like point clouds and camera feeds. I’d also like to improve the accessibility, so that the mouse inclined folks can click their way around.

2 Likes

@acxz (also @Juraph)
You might like to have a look at this as well for some ideas :wink:

2 Likes

Took me longer than expected to get around to it, but I’ve migrated the project to github here: https://github.com/juraph-dev/ornis. I’ve also got the github workflows going for a bit of CI. Feel free to jump in you find anything to work on!

5 Likes