Skip to main content
Version: Next

Visualizing ROS data with Foxglove

This guide explains how to export a bounded selection of raw ROS records from ReductStore as MCAP and open the result remotely in Foxglove. It expands on the workflow introduced in the ROS applications guide.

The example uses the public ROS dataset. Before you begin, you need:

  • the Foxglove desktop app or Foxglove web app;
  • access to the ReductStore Web Console;
  • a ReductStore server with the ReductROS extension; and
  • raw ROS entries with a valid $schema attachment containing their encoding, schema, topic, and schema name. ReductBridge writes this attachment automatically.
Shared demo server

The Play server and its public reductstore token are shared demo resources. Do not upload private data to this server or use the demo token for production data.

Export records as MCAP

Open play.reduct.store, enter the public reductstore token if prompted, and open Query. Configure the query as follows:

  1. Select the orion bucket.
  2. Select * under Entries. For production investigations, select only the required entries where possible.
  3. Select Last 1 hour or another bounded time range.
  4. Enter this conditional query:
{
"#ext": {
"ros": {
"export": {
"format": "mcap"
}
}
}
}
  1. Select Fetch Records.
ReductStore Web Console query for exporting the public ROS dataset as MCAP

ReductROS reads the $schema attachment for each selected entry, restores its ROS topic and schema, orders the messages by timestamp, and returns an application/mcap result named mcap-export. The MCAP result is generated by the query on demand; it is not stored as a new record in the source bucket.

Expanded mcap-export result with download, share, and delete record actions

Limit large exports

For a wider query range, use the optional duration and size limits to split the output into manageable episodes:

{
"#ext": {
"ros": {
"export": {
"format": "mcap",
"duration": "1h",
"size": "500MB"
}
}
}
}

A new episode starts when either threshold is reached. See Exporting raw messages as MCAP for the authoritative parameter reference.

In the mcap-export result row, select Share record. Choose the shortest practical expiry, retain a filename ending in .mcap, and select Generate Link.

Share record dialog with query-link expiry and MCAP filename settings

The Web Console copies the generated URL automatically when clipboard access is available. The dialog also provides a Copy action.

Share record dialog showing a generated temporary query link

The link applies the saved query again when it is accessed and resolves the selected output record. It does not point to a persisted export. See the Query Link API for details.

Temporary credential

Anyone with the URL can read the query result without an API token until the link expires. Treat it as a temporary credential, and do not publish or forward it unnecessarily.

If the export returns multiple episodes, create a link for each output record. Foxglove accepts multiple remote URLs when they are entered one per line.

Open the export in Foxglove

In Foxglove:

  1. Open a new connection.
  2. Select Remote files.
  3. Paste the ReductStore query link into Remote file URL(s).
  4. Select Open.
Foxglove Remote files connection with a ReductStore query link

Foxglove reads the MCAP index and exposes the restored ROS topics and schemas. Add an Image panel and select /right_ir/rotated/image_raw to inspect the infrared camera topic.

Foxglove Image panel displaying the right infrared rotated raw image topic

See Foxglove's remote HTTP file documentation and Image panel documentation for connection and panel options.

Troubleshooting

  • No mcap-export result: Check that the selected time range contains records, ReductROS is available, and every selected entry has a valid $schema attachment.
  • Topics are missing: Check the entry selection and the topic and schema metadata stored in each entry's $schema attachment.
  • Foxglove cannot open the URL: Generate a new link if it expired, and make sure the ReductStore URL is externally reachable and supports CORS and HTTP range requests. Signed URLs should point directly to the resource because redirects can fail under CORS.
  • A private deployment generates an unreachable URL: Configure RS_PUBLIC_URL as the externally reachable ReductStore URL. See ReductStore configuration.
  • Playback is slow: Shorten the time range, select fewer topics, or split the output with duration and size.