Skip to content

vision_pipeline

Role: Meta-package that orchestrates the perception stack. Bundles launch files and provides lifecycle + composable-node managers so a single service call can flip a whole task pipeline on or off.

Key entrypoints

File Purpose
launch/gate.launch.py, bin.launch.py, torpedo.launch.py, slalom.launch.py, trash.launch.py, image_matching.launch.py One launch per RoboSub task.
vision_pipeline/lifecycle_manager_node.py Drives LifecycleNode state transitions (configureactivate).
vision_pipeline/component_manager_node.py Loads / unloads composable nodes inside a container.
config/auv4_orin/*.yaml Per-task model / topic configs.

ROS interfaces

Type Name
Service manage_nodes (lifecycle_msgs/srv/ChangeState)
Service manage_components (std_srvs/srv/SetBool)

Vision nodes are namespaced /auv4/<task>/... (preserved verbatim from upstream).

Pipeline composition

This package itself owns no perception logic. It composes:

Gotchas

Lifecycle state

Lifecycle nodes start inactive. They must be activated explicitly via manage_nodes or ros2 lifecycle set /<node> activate before they publish anything.

Depth Anything is .onnx, not .engine

Depth Anything configs must reference .onnx files. The runtime compiles .engine on first run.

QoS mismatch

Image topics use sensor_data QoS (best-effort). Subscribers expecting reliable QoS will not receive messages. This is the most common silent-perception-failure mode.

  • All vision nodes run on the Orin in the real robot, consuming decompressed images that the SBC republishes (orin_cam_repub.launch.py).

See also

  • Strategies: each BT mission starts its matching vision_pipeline task on entry and stops it on exit.