@@ -70,6 +70,124 @@ source install/setup.bash
7070ros2 launch ros2_gst_video_bridge gst_video_bridge.launch.py
7171```
7272
73+ ## End-to-End Basler USB Test (SRT Listener -> Caller)
74+
75+ This section documents the validated launch flow for a Basler USB camera with:
76+
77+ - camera node publishing ROS images,
78+ - bridge node running SRT in listener mode,
79+ - receiver running as SRT caller.
80+
81+ ### 0) One-time USB udev rule for Basler
82+
83+ ``` bash
84+ sudo tee /etc/udev/rules.d/99-basler-usb.rules > /dev/null << 'EOF '
85+ SUBSYSTEM=="usb", ATTR{idVendor}=="2676", MODE="0666", GROUP="plugdev"
86+ EOF
87+
88+ sudo udevadm control --reload-rules
89+ sudo udevadm trigger
90+ ```
91+
92+ Reconnect the USB camera (or reboot) after applying the rule.
93+
94+ ### 1) Verify camera detection
95+
96+ ``` bash
97+ cd /home/ccu-001/ws_dev
98+ source /opt/ros/humble/setup.zsh
99+ source install/setup.zsh
100+
101+ ros2 run camera_aravis2 camera_finder
102+ ```
103+
104+ ### 2) Launch camera node (Terminal A)
105+
106+ ``` bash
107+ source /opt/ros/humble/setup.zsh
108+ source /home/ccu-001/ws_dev/install/setup.zsh
109+ ros2 launch camera_aravis2 camera_driver_uv_example.launch.py guid:=Basler-2676016350B6-23285942
110+ ```
111+
112+ ### 3) Launch bridge node in SRT listener mode (Terminal B)
113+
114+ ``` bash
115+ source /opt/ros/humble/setup.zsh
116+ source /home/ccu-001/ws_dev/install/setup.zsh
117+ ros2 launch ros2_gst_video_bridge gst_video_bridge_minimal.launch.py \
118+ input_topic:=/camera_driver_uv_example/vis/image_raw \
119+ " sink_uri:=srt://0.0.0.0:9000?mode=listener"
120+ ```
121+
122+ ### 4) Launch SRT receiver as caller (Terminal C)
123+
124+ ``` bash
125+ gst-launch-1.0 -v srtsrc uri=" srt://1.0.0.22:9000?mode=caller" latency=60 ! tsdemux ! h264parse ! avdec_h264 ! videoconvert ! autovideosink sync=false
126+ ```
127+
128+ ### 5) Quick runtime checks
129+
130+ Check that the camera topic is publishing:
131+
132+ ``` bash
133+ source /opt/ros/humble/setup.zsh
134+ source /home/ccu-001/ws_dev/install/setup.zsh
135+ ros2 topic hz /camera_driver_uv_example/vis/image_raw
136+ ```
137+
138+ Check bridge runtime metrics:
139+
140+ ``` bash
141+ source /opt/ros/humble/setup.zsh
142+ source /home/ccu-001/ws_dev/install/setup.zsh
143+ ros2 topic echo /gst_video_bridge/runtime_metrics --once
144+ ```
145+
146+ If ` fps_in ` and ` fps_out ` are both greater than zero, the bridge is actively forwarding frames.
147+
148+ ### Launch files
149+
150+ - ` gst_video_bridge_minimal.launch.py ` :
151+ - essential arguments only (`profile_machine`, `profile_stream`, `input_topic`, `sink_uri`)
152+ - ` gst_video_bridge_advanced.launch.py ` :
153+ - full override surface for transport/codec/runtime plus `params_file`
154+ - ` gst_video_bridge.launch.py ` :
155+ - compatibility wrapper to the advanced launch
156+
157+ Examples:
158+
159+ ``` bash
160+ ros2 launch ros2_gst_video_bridge gst_video_bridge_minimal.launch.py \
161+ profile_machine:=jetson profile_stream:=low_latency \
162+ input_topic:=/camera_driver_uv/vis/image_raw \
163+ sink_uri:=srt://127.0.0.1:9000? mode=listener
164+
165+ ros2 launch ros2_gst_video_bridge gst_video_bridge_advanced.launch.py \
166+ params_file:=/home/ccu-001/ws_dev/src/ros2_gst_video_bridge/config/profiles/jetson_monitoring_udp.yaml
167+ ```
168+
169+ ### Curated profile files
170+
171+ Under ` config/profiles/ ` :
172+
173+ - ` jetson_low_latency_srt.yaml `
174+ - ` x86_low_latency_srt.yaml `
175+ - ` raspi_low_latency_srt.yaml `
176+ - ` jetson_monitoring_udp.yaml `
177+ - ` x86_monitoring_udp.yaml `
178+ - ` raspi_monitoring_udp.yaml `
179+ - ` recording_file_sink.yaml `
180+
181+ ### Runtime metrics
182+
183+ The node publishes runtime metrics on ` ~/runtime_metrics ` (` std_msgs/msg/String ` ), including:
184+
185+ - state (` connecting|streaming|degraded|reconnecting|failed ` )
186+ - ` fps_in ` , ` fps_out `
187+ - dropped frame counters
188+ - reconnect counter
189+ - latency estimate in milliseconds
190+
73191### Discoverability modes (Phase 3)
74192
75193- List ROS image topics visible on the host:
@@ -98,5 +216,5 @@ ros2 run ros2_gst_video_bridge gst_video_bridge_node --ros-args -p runtime.mode:
98216
99217## Current Status
100218
101- This is a professional starter scaffold with formatting/linting and a minimal ROS 2 node.
102- The next implementation milestone is wiring ROS image subscriptions into a real GStreamer ` appsrc ` pipeline .
219+ The node now supports ROS image ingestion into a real GStreamer ` appsrc ` pipeline with runtime modes,
220+ reconnection policy, and profile-driven launch/configuration .
0 commit comments