Skip to main content

A Terminal User Interface (TUI) for monitoring and managing ROS2 topics and parameters

Project description

ros2_tui

Crates.io PyPI License: MIT Test Release

A powerful Terminal User Interface (TUI) for monitoring and managing ROS2 topics and parameters in real-time.

Prerequisites

  • ROS2 installed and sourced
  • ros2 topic and ros2 param commands available in PATH

Installation

From crates.io

cargo install ros2_tui

From pypi

pip install ros2-tui

From Source

git clone https://github.com/beemelmanns/topics.git
cd topics/topics
cargo build --release

The binaries topics and params will be available at target/release/.

Topics TUI (topics)

Highlights

  • 📊 Real-time Hz/Delay monitoring backed by streaming ros2 topic hz / delay
  • 🌳 Namespace-aware topic tree with collapsible groups and instant search
  • 🎯 Watch-only metrics so large graphs stay responsive and low overhead
  • 🎨 Status indicators, Bollinger-band charts, and debug logging for on-call triage

Usage

# Start monitoring with default settings
topics

# Custom refresh rate (topics list updates every 5 seconds by default)
topics --refresh 10

Toggling a row with Enter starts Hz/Delay measurement. Unwatched topics stay lightweight, ensuring responsive navigation even with hundreds of topics.

Navigation & Controls

  • / or j/k move between topics; / or h/l collapse and expand namespaces
  • Enter toggles watching on the focused topic or expands/collapses a group
  • Tab toggles the current group; c collapses/expands all groups at once
  • F4 opens live search with auto-expansion; Space, r, or F5 refresh immediately
  • q, Esc, or Ctrl+C quit; --verbose writes detailed logs to topics_debug.log

Command-Line Options

  • --refresh <SECONDS> – Topic list refresh cadence (default: 5)
  • --detail-refresh <SECONDS> – Legacy detail polling interval (still accepted)
  • --no-initial-fetch – Skip the initial ros2 topic list call
  • --help, --version – Standard metadata flags

Architecture Highlights

  • Background workers keep ros2 topic list -v, ros2 topic hz, and ros2 topic delay streaming without blocking the UI
  • Crossbeam channels drive a non-blocking event loop that renders at ~5 FPS and processes input instantly
  • Watched topics maintain FIFO histories (including std dev) to power Bollinger-band charts and statistical readouts
  • Selective monitoring conserves system resources by spawning measurement processes only when needed

Params TUI (params)

Highlights

  • 🧭 Node/namespace browser that mirrors ros2 param list hierarchies
  • 🔄 Live value polling keeps displayed values fresh without manual refreshes
  • ✏️ In-terminal editing with type validation plus YAML dump/load workflows
  • 🧰 Built-in search, success/error banners, and contextual help overlays

Usage

# Parameter dashboard with 5 second refresh
params

# Faster poll rate for parameters
params --refresh 2

The app groups dotted parameter names into expandable namespaces so large graphs stay navigable. Value edits, dumps, and loads run through the ROS2 CLI and report their outcome inline.

Navigation & Controls

  • / or j/k move through nodes and parameters; / or h/l collapse/expand namespaces
  • ? opens the help overlay; F4 enters search mode with persistent filtering
  • Space, r, or F5 refresh on demand; Esc exits dialogs, cancels search, or quits

Parameter Actions

  • s edits the selected parameter (array values are normalised for ROS2 compatibility)
  • d dumps the current node to YAML via ros2 param dump
  • Ctrl+l loads YAML into the active node using ros2 param load
  • Inline success/error banners acknowledge operations and fade automatically

Command-Line Options

  • --refresh <SECONDS> – Parameter polling cadence (default: 5)
  • --no-initial-fetch – Skip the initial ros2 param list scan
  • --verbose / -v – Emit detailed logs to params_debug.log
  • --help, --version – Standard metadata flags

Architecture Highlights

  • A primary watcher repeatedly shells out to ros2 param list, building a ParamTree that mirrors node hierarchies
  • A secondary watcher streams value lookups to populate the table without blocking the UI thread
  • Dump/load/edit workflows wrap the ROS2 CLI while scheduling delayed refreshes to reflect state changes
  • All ROS2 interaction happens on background threads, keeping the Crossterm-driven interface responsive under load

Development

Building

cargo build --release

Testing

cargo test
cargo check

Before Pushing

Check formatting

cargo fmt --all -- --check

Lint code

cargo clippy --all-targets --all-features -- -D warnings

Comparison with Other Tools

Tool Language Dependencies Features Performance
topics Rust ros2 CLI only TUI, Real-time metrics ⚡ Fast
params Rust ros2 CLI only TUI, Parameter management ⚡ Fast
rqt_topic Python Full ROS2 + Qt GUI, Rich features 🐌 Heavy
ros2 topic Python Full ROS2 CLI only 🚀 Fast but limited

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • Inspired by turm - A TUI for the Slurm Workload Manager
  • Built with ratatui - A Rust library for building rich terminal interfaces

Roadmap

  • Topic filtering and search (F4 search mode)
  • Hierarchical topic grouping with collapsible groups
  • Add topic message preview/echo functionality
  • services app
  • actions app

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ros2_tui-0.1.0-py3-none-musllinux_1_2_x86_64.whl (3.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

ros2_tui-0.1.0-py3-none-musllinux_1_2_i686.whl (3.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ i686

ros2_tui-0.1.0-py3-none-musllinux_1_2_armv7l.whl (2.9 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

ros2_tui-0.1.0-py3-none-musllinux_1_2_aarch64.whl (2.9 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

ros2_tui-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

ros2_tui-0.1.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl (3.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ s390x

ros2_tui-0.1.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (4.4 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

ros2_tui-0.1.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl (3.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ i686

ros2_tui-0.1.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

ros2_tui-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

File details

Details for the file ros2_tui-0.1.0-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 225f69c21c466696f9db0582c5a3f403e84af04c3cf227fece78b20588e7b11c
MD5 44b9f7239bd7f3d84d02c370b9953415
BLAKE2b-256 80b1f97680eb1c7352ee3338efd2fad44564b324763943922ccb0c835deae77a

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.0-py3-none-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.0-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 2e7c00cc15b8d1b2a2657d0806e84f5340c6c0953c85d098d20710c8ee47f9cb
MD5 bcc26e493186766a7238665e868fe24c
BLAKE2b-256 9ea85f8f226c00efc8475c598fd9002487b394b31d998247487a22abe4dc8f4d

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.0-py3-none-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.0-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 7df9b9c2228fc7e905f57838a211b2daeaa2aa6335b61a2ca1b8e825987e809d
MD5 e1251b65fcb094dc22f660f9463920ed
BLAKE2b-256 5e4976a2da56d9c8320f1301918b6ddd682c165426e6b7be98616e0a519b0f58

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.0-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9809248bbbc0c5f4c40f29b5b4e21897bbd3ffeaecf1484de76b150f93fa8bf3
MD5 8a33294f73dfb7ce749bcdf6e7c41a4f
BLAKE2b-256 468ad885a6a08158faf70f936d299f7ddcc5bfa333fc151b671cbd0f11f40b7d

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a84355afdc56a029725972058a500ab48c2290ecf06b7621b53c582eff5c9241
MD5 c7f4f4eeb104b5a0abdaafb96a650599
BLAKE2b-256 b67e8f9ed122a983faa81593e526effb161b67951d09561f3c20818eb09b6f00

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 5561cde5263db42c10896fe9d394bbd79a66e127ea125a99f9d599ead8fb373f
MD5 843ecc5b27d64c0eec409119514fd0ef
BLAKE2b-256 7f0b996f863bfcac206e94f8e4f5302a33edfba08e936169faaaffe84e9334bf

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 cdbae00c17fbf213695cf06952fd5b324b39ecc92f4dd18acc550916a3f67072
MD5 f30da15a727dac7d8a21f5071c63fcb6
BLAKE2b-256 4a083e11cebf721eb39f7b8e3da5116189074b6cca47a9fb0369ea9af37bd359

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 647bf92b9f85ef388d681b8db13cb388b0e6f7689350881a6ef8c5b432af38f0
MD5 735aeab014294971a02c0b460d7957b4
BLAKE2b-256 a827ba2c7e5f7cf6f778fab83c2a2087a1b94f50538076f4294a91b1cc87a978

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 bd68f90c1653601767aae35be8c4835e1f88e070a3824878ab482098a566e443
MD5 90832e72b8bb461ab7c22d7bb0c490a3
BLAKE2b-256 b6d874ce99ebc4e7f0a36ba83667c43b4072ad77eda8fb824c1232437c739e51

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3bd92f19fb19e77e2d10b618a24aa33832152ad835dea5efec2c9de39ae33027
MD5 440a8fef46b867a9c18a984ccc67788d
BLAKE2b-256 dbf5a575828455caa207a00ceb43b27559ad149ddb0713e1253914e8cf0e2c2c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page