# Bridge ROS and GST with `ros-gst-bridge`
The `ros-gst-bridge` sample application is a tool that facilitates seamless integration between Robot Operating System (ROS) and GStreamer. It supports the efficient streaming and processing of multimedia data, such as video and audio, between ROS nodes and GStreamer pipelines.
Note
For more information, see the [ros-gst-bridge](https://github.com/BrettRD/ros-gst-bridge) GitHub repo.
## Pipeline flow for `ros-gst-bridge`
## ROS nodes/topics used in `ros-gst-bridge`
ROS GST bridge allows customization of ROS 2 topics. For details about the customization process, see the open source project: [ros-gst-bridge](https://github.com/BrettRD/ros-gst-bridge).
## Prerequisites
You have completed the following settings in [Set up the environment for running sample applications](https://docs.qualcomm.com/doc/80-70033-265/topic/quick_start.html#setup-demo-qs).
- Set up the device
- Set up the host docker
## Run out-of-the-box `ros-gst-bridge`
### Run the `rosimagesink` case
1. Start a terminal and run the following command to run the `rosimagesink` case.
# Set the ROS_DOMAIN_ID
(ssh) source /usr/share/qirp-setup.sh
(ssh) export ROS_DOMAIN_ID=55
(ssh) gst-launch-1.0 videotestsrc ! videoconvert ! rosimagesink ros-topic="image"
Copy to clipboard
2. Start the `rqt`. For more information, see [rqt](https://wiki.ros.org/rqt).
# YOUR_HOST_IP is the IP address of the Host where you want to view the sample output, for more information, see `rqt `_.
(ssh) export DISPLAY=YOUR_HOST_IP:0
(ssh) export ROS_DOMAIN_ID=55
(ssh) rqt
Copy to clipboard
3. Select the following buttons in sequence.
Plugins --> Visualization --> Image View
4. Select topic `/image` by manual on rqt console, then picture show on `rqt` successfully.
### Run the `rostextsink` case
1. Start a terminal and run the following command to publish a text message.
# Set the ROS_DOMAIN_ID
(ssh) source /usr/share/qirp-setup.sh
(ssh) export ROS_DOMAIN_ID=55
(ssh) ros2 topic pub /input_text std_msgs/msg/String "{data: 'Hello World'}"
Copy to clipboard
2. Start second terminal and run the following command to run the `rostextsink` case.
# Set the ROS_DOMAIN_ID
(ssh) source /usr/share/qirp-setup.sh
(ssh) export ROS_DOMAIN_ID=55
(ssh) gst-launch-1.0 rostextsrc topic="/input_text" ! rostextsink ros-topic="/output_text"
Copy to clipboard
3. Start third terminal and run the following command to check the text result.
# Set the ROS_DOMAIN_ID
(ssh) source /usr/share/qirp-setup.sh
(ssh) export ROS_DOMAIN_ID=55
(ssh) ros2 topic echo /output_text
Copy to clipboard
4. The text message `Hello World` is displayed on the terminal.
For more `rosaudiosink` cases, see [ros-gst-bridge](https://github.com/BrettRD/ros-gst-bridge).
## Run out-of-the-box `ros-gst-bridge` with Qualcomm IM SDK
The Qualcomm® Intelligent Multimedia SDK (IM SDK) is a unified SDK across Internet of Things (IOT) segments. This SDK enables seamless multimedia and AI/ML application deployment.
The AI/ML sample applications provide custom use cases that show how to use the AI/ML GStreamer features of the Qualcomm Linux platform.
### Run the `pose estimation` case
1. Power on the device and connect to the HDMI cable, and then download the model and label files according to [IM SDK prerequisites for running the pose estimation sample applications](https://imsdkdocs.qualcomm.com/supportedmodels/pose-estimation).
2. In the terminal of the target device, run the following command to activate the display.
(ssh) export XDG_RUNTIME_DIR=/dev/socket/weston && export WAYLAND_DISPLAY=wayland-1
Copy to clipboard
3. Start a terminal and run the following command to run the `pose estimation` case.
The Qualcomm IM SDK uses `queue ! waylandsink` to output AI inference results to the display.
You can replace it with `queue ! rosimagesink sync=true ros-topic="gst_image"` to transform Qualcomm IM AI gst elements results to ROS 2 topics. The following is a `Pose estimation` example.
Note
This example relies on the basic functions of Qualcomm Intelligent Multimedia (IM) SDK, update your commandline according to the Qualcomm IM SDK commandline usage if you need a different use case.
For more details, see the [Qualcomm IM SDK Pose Estimation Reference](https://imsdkdocs.qualcomm.com/supportedmodels/pose-estimation).
(ssh) gst-launch-1.0 -e --gst-debug=2 \
qtimlvconverter name=stage_01_preproc mode=image-batch-non-cumulative \
qtimltflite name=stage_01_inference delegate=external external-delegate-path=libQnnTFLiteDelegate.so \
external-delegate-options="QNNExternalDelegate,backend_type=htp,log_level=(string)1;" \
model=$HOME/Downloads/qimsdk_samples/models/$MODEL_NAME_1 \
qtimlpostprocess name=stage_01_postproc results=10 module=qpd labels=$HOME/Downloads/qimsdk_samples/labels/$LABELS_NAME_1 \
settings=~/labels/$LABELS_NAME_2 \
qtimlvconverter name=stage_02_preproc mode=roi-batch-cumulative image-disposition=centre \
qtimltflite name=stage_02_inference delegate=external external-delegate-path=libQnnTFLiteDelegate.so \
external-delegate-options="QNNExternalDelegate,backend_type=htp,htp_performance_mode=(string)2,log_level=(string)1;" \
model=$HOME/Downloads/qimsdk_samples/models/$MODEL_NAME_2 \
qtimlpostprocess name=stage_02_postproc results=2 module=hrnet labels=$HOME/Downloads/qimsdk_samples/labels/$LABELS_NAME_3 \
settings=~/labels/$LABELS_NAME_4 \
filesrc location=$HOME/Downloads/qimsdk_samples/media/$SRC_VIDEO_NAME ! qtdemux ! h264parse ! \
v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! \
tee name=t_split_1 \
t_split_1. ! queue ! stage_01_preproc. stage_01_preproc. ! queue ! stage_01_inference. stage_01_inference. ! queue ! \
stage_01_postproc. stage_01_postproc. ! text/x-raw ! queue ! qtimetamux name=metamux_1 \
t_split_1. ! queue ! metamux_1. metamux_1. ! queue ! tee name=t_split_2 \
t_split_2. ! queue ! stage_02_preproc. stage_02_preproc. ! queue ! stage_02_inference. stage_02_inference. ! queue ! \
stage_02_postproc. stage_02_postproc. ! text/x-raw ! queue ! qtimetamux name=metamux_2 \
metamux_2. ! queue ! qtivoverlay ! queue ! rosimagesink fullscreen=true sync=true ros-topic="gst_image" \
t_split_2. ! queue ! metamux_2.
Copy to clipboard
Last Published: Sep 30, 2026
[Previous Topic
Convert between NV12 and RGB888 with qrb\_ros\_colorspace\_convert](https://docs.qualcomm.com/bundle/publicresource/80-70033-265/topics/qrb-ros-color-space-convert_5_2_9.md) [Next Topic
Enable core audio with qrb\_ros\_audio\_service](https://docs.qualcomm.com/bundle/publicresource/80-70033-265/topics/qrb-ros-audio-service.md)