plotjuggler_plugins/DataStreamPlotJugglerBridge/README.md
WebSocket Client plugin to integrate remote data into PlotJuggler through a WebSocket bridge.
This plugin allows PlotJuggler to connect to a WebSocket server (for example, a custom ROS2 bridge) without requiring direct DDS or ROS2 access.
PlotJuggler <-> WebSocket Client Plugin <-> WebSocket Server (pj_ros_bridge or similar)
The server can run on:
mkdir -p ~/ws_plotjuggler/src
cd ~/ws_plotjuggler/src
git clone https://github.com/PlotJuggler/PlotJuggler.git
plotjuggler_pluginscd PlotJuggler/plotjuggler_plugins
git clone https://github.com/Alvvalencia/DataStreamWebsocketBridge.git
The final structure should look like:
PlotJuggler/
├── plotjuggler_plugins/
│ ├── DataStreamWebsocketBridge/
│ ├── ...
plotjuggler_plugins/CMakeLists.txtOpen:
PlotJuggler/plotjuggler_plugins/CMakeLists.txt
Add your plugin directory:
add_subdirectory(DataStreamWebsocketBridge)
Place it alongside the other plugin add_subdirectory(...) entries.
sudo apt install \
qt6-base-dev \
qt6-websockets-dev \
libzstd-dev
sudo apt install \
qtbase5-dev \
qtwebsockets5-dev \
libzstd-dev
cd ~/ws_plotjuggler
mkdir build
cd build
cmake ../src/PlotJuggler -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
./bin/plotjuggler
Streaming → WebSocket Client
Configure:
Connect.
Select topics and subscribe.
If the server listens on:
ws://0.0.0.0:9090
It accepts connections from any network interface.
From another machine, connect using:
ws://SERVER_IP:9090
Example:
ws://192.168.1.42:9090
If using your ROS2 bridge:
ros2 run pj_ros_bridge pj_ros_bridge_node
Default configuration:
Then connect the plugin to:
ws://localhost:9090
or to the robot’s IP address.
The plugin handles the following states:
If the server closes the connection, the plugin detects the event and displays a warning in the UI.
Typical plugin structure:
DataStreamWebsocketBridge/
├── websocket_client.h
├── websocket_client.cpp
├── websocket_client.ui
├── CMakeLists.txt
└── resources/
It integrates using PlotJuggler’s DataStream interface.