Skip to content

Foxglove endoscopy tool tracking#

Authors: Chris von Csefalvay (HCLTech)
Supported platforms: x86_64, aarch64
Language: Python, C++
Last modified: May 11, 2026
Latest version: 0.1.0
Minimum Holoscan SDK version: 4.1.0
Tested Holoscan SDK versions: 4.2.0, 4.1.0
Contribution metric: Level 2 - Trusted

This application shows the Foxglove operator in an endoscopy tool-tracking graph. It replays the standard HoloHub endoscopy sample, runs the existing LSTM tool-tracking inference path, and publishes video, tool-coordinate annotations, and inference FPS to Foxglove Studio.

Foxglove Studio endoscopy view

Requirements#

  • Holoscan SDK 4.1.0 or newer.
  • The HoloHub endoscopy tool-tracking dataset generated through the normal HoloHub data workflow.
  • Foxglove Studio installed. The Foxglove web app can also connect, but browser networking restrictions can make local or private-network WebSocket endpoints trickier than the desktop application.

Foxglove Studio setup#

Install Foxglove Studio, then start the application and create a Foxglove WebSocket connection to ws://localhost:8765. The included app config binds 0.0.0.0, so remote clients on trusted networks can connect Studio to ws://<target-host>:8765. Foxglove documents the custom WebSocket connection flow in its custom data source guide. The Foxglove web app can be used too, but browser security policies can make direct WebSocket connections to local or private hosts more finicky; use the desktop app first when debugging connectivity.

Quick start#

You can build and run the application within a container using the following command:

For C++:

./holohub run foxglove_endoscopy_tool_tracking --language cpp

For Python:

./holohub run foxglove_endoscopy_tool_tracking --language python

Then connect Foxglove Studio to ws://localhost:8765.

Topics#

The C++ app publishes:

Topic Message Description
/video RawImage Replayed endoscopy frame.
/detections ImageAnnotations Tool points, labels, and small boxes aligned to /video.
/state/inference_fps KeyValuePair Inference throughput estimate for plotting.

The Python app publishes /video, /tool_mask, and /detections. It demonstrates the Python publisher and tensor/annotation adapter path; the C++ app is the fuller example because it also publishes inference FPS.

Notes#

The sample does not publish /tf pose transforms because the source dataset does not include camera or tool pose data. Pose publishing is implemented in the operator through FoxglovePoseAdapterOp and is intended for graphs that already produce a 4x4 transform tensor or xyz+quat tensor.