flightopsDocumentation
Get started

First steps with Flightops

3 min readdocs/tutorials/first-steps.md (source repository)

In this walkthrough, one terminal starts a harmless ROS 2 talker and a second terminal observes it with Flightops. You will check discovery, quit, and reopen. Allow about ten minutes after ROS and Flightops are installed.

Before you start

Install the Flightops beta for your platform: Ubuntu 22.04 with ROS 2 Humble, or Ubuntu 24.04 with ROS 2 Jazzy. Then activate this device once with flightops license activate; it needs the internet and the key from your beta email. Use a laptop or desktop terminal at least 120 columns wide if possible. The demo needs demo_nodes_cpp, included with the ROS 2 desktop installation. Flightops does not install ROS.

Choose an unused ROS domain from 1โ€“232. The commands below use 181; replace it in both terminals if that domain is already in use. The localhost setting keeps this example on your computer.

1. Prepare terminal A for the talker

Open terminal A. Run one of these commands for your installed distribution:

bash
source /opt/ros/humble/setup.bash

Or, on Ubuntu 24.04:

bash
source /opt/ros/jazzy/setup.bash

Then run:

bash
export ROS_DOMAIN_ID=181 ROS_LOCALHOST_ONLY=1
ros2 pkg prefix demo_nodes_cpp

The last command should print the installed package prefix. If it cannot find demo_nodes_cpp, install the matching ROS desktop/demo package before continuing. If you use a workspace overlay for your own project, source its install/local_setup.bash after the ROS underlay.

2. Prepare terminal B for Flightops

Open a second terminal. Source the same ROS distribution as terminal A. Use the Humble command on Ubuntu 22.04:

bash
source /opt/ros/humble/setup.bash

Or use the Jazzy command on Ubuntu 24.04:

bash
source /opt/ros/jazzy/setup.bash

Then run:

bash
export ROS_DOMAIN_ID=181 ROS_LOCALHOST_ONLY=1
export PATH="$HOME/.local/bin:$PATH"
flightops --verify
flightops license status
flightops doctor

--verify should pass, license status should report a valid license (if it does not, run flightops license activate), and doctor should report the matching ROS distribution, domain 181, a terminal, and writable session storage. It may report zero nodes because terminal A has not started the talker yet. If ROS is unavailable, check the sourced setup file and Python version against the installation table, then use troubleshooting.

3. Start the talker in terminal A

bash
ros2 run demo_nodes_cpp talker

Leave it running. You should see numbered Publishing: messages. This process belongs to terminal A, not Flightops.

4. Attach from terminal B

bash
flightops

Health (1) should show, under System at a glance, the chosen ROS distribution and domain, with a node and topics discovered. If they do not appear, press r to refresh. Press 2 for Graph, 3 for Topics, or 4 for Nodes. Use the arrow keys to select a row, Tab to move between panes, and ? for on-screen help. Press q to close Flightops. The talker in terminal A should still print messages.

If discovery stays empty, run flightops doctor again in terminal B and compare ROS_DOMAIN_ID, RMW_IMPLEMENTATION, and the sourced ROS setup between terminals. A node count alone does not prove that a specific message was delivered.

5. Reopen the observation

In terminal B:

bash
flightops attach

flightops attach is the explicit form of flightops. It takes a fresh observation and restores saved view preferences for this environment. It does not start another talker. Check that the external talker is still visible, then press q. Stop the talker in terminal A with Ctrl+C when you are done.

This was an attach session: quitting Flightops leaves externally started nodes alone. In a managed launch started with flightops launch ..., quitting Flightops stops the launch process tree it owns. Reopening an observation never repeats a managed launch. Follow launch and inspect to try that workflow.

Where to go next

Use saved results to open an HTML report, attach for your own running system, or optional AI setup after the basic workflow works. The beta known limits list what the beta does not cover yet.