Skip to main content

hdds-studio Quickstart

Get started with the visual DDS system designer and monitor.

Installation

Download

# Linux (AppImage)
curl -LO https://github.com/skylab/hdds/releases/latest/download/hdds-studio-linux.AppImage
chmod +x hdds-studio-linux.AppImage
./hdds-studio-linux.AppImage

# macOS
curl -LO https://github.com/skylab/hdds/releases/latest/download/hdds-studio-macos.dmg
open hdds-studio-macos.dmg

# Windows
# Download from releases page

From Source

git clone https://github.com/skylab/hdds.git
cd hdds/tools/hdds-studio
cargo tauri build

First Launch

Create New Project

  1. Launch hdds-studio
  2. Click File → New Project
  3. Enter project name: MyDDSSystem
  4. Select project location
  5. Click Create

Project Structure

MyDDSSystem/
├── project.hdds # Project configuration
├── types/ # IDL type definitions
│ └── sensor_data.idl
├── participants/ # Participant configurations
│ └── sensor_node.toml
└── qos/ # QoS profiles
└── default.xml

Visual Type Designer

Create New Type

  1. Open Types panel (left sidebar)
  2. Click + New Type
  3. Use the visual editor:
┌─────────────────────────────────────────────┐
│ Type Editor: SensorData │
├─────────────────────────────────────────────┤
│ │
│ ┌─ struct SensorData ─────────────────┐ │
│ │ │ │
│ │ 🔑 sensor_id [unsigned long ▼] │ │
│ │ │ │
│ │ value [float ▼] │ │
│ │ │ │
│ │ timestamp [unsigned ll ▼] │ │
│ │ │ │
│ │ [+ Add Field] │ │
│ │ │ │
│ └──────────────────────────────────────┘ │
│ │
│ Annotations: [@appendable ▼] [+ Add] │
│ │
├─────────────────────────────────────────────┤
│ [Preview IDL] [Generate Code] [Save] │
└─────────────────────────────────────────────┘

Add Key Field

  1. Click on field name
  2. Check Key checkbox in properties panel
  3. Field shows 🔑 indicator

Nested Types

Drag and drop types to create nested structures:

┌─ struct VehicleStatus ──────────────────┐
│ │
│ 🔑 vehicle_id [unsigned long] │
│ │
│ ┌─ Position ─────────────────────┐ │
│ │ latitude [double] │ │
│ │ longitude [double] │ │
│ │ altitude [float] │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─ Velocity ─────────────────────┐ │
│ │ speed [float] │ │
│ │ heading [float] │ │
│ └─────────────────────────────────┘ │
│ │
└──────────────────────────────────────────┘

System Topology Designer

Create Topology Diagram

  1. Open Topology panel
  2. Drag components from palette:
┌─────────────────────────────────────────────────────────┐
│ System Topology │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Sensor Node │ │ Control Node │ │
│ │ │ │ │ │
│ │ ⬆ Writer │───────▶│ ⬇ Reader │ │
│ │ SensorTopic │ │ SensorTopic │ │
│ │ │ │ │ │
│ │ │ │ ⬆ Writer │───┐ │
│ │ │ │ CommandTopic│ │ │
│ └──────────────┘ └──────────────┘ │ │
│ │ │
│ ┌──────────────┐ │ │
│ │ Actuator │◀──────────────────────────┘ │
│ │ │ │
│ │ ⬇ Reader │ │
│ │ CommandTopic│ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘

Configure QoS

  1. Right-click on connection line
  2. Select Configure QoS
  3. Use QoS wizard:
┌─────────────────────────────────────────────────────────┐
│ QoS Configuration: SensorTopic │
├─────────────────────────────────────────────────────────┤
│ │
│ Reliability [●] Reliable [ ] Best Effort │
│ │
│ Durability [●] Transient [ ] Volatile │
│ Local │
│ │
│ History [●] Keep Last [ ] Keep All │
│ Depth: [10 ] │
│ │
│ Deadline [ ] Enabled │
│ Period: [ ] ms │
│ │
│ ───────────────────────────────────────────────────── │
│ Preview: │
│ Reliability: Reliable (100ms blocking) │
│ Durability: TransientLocal │
│ History: KeepLast(10) │
│ │
├─────────────────────────────────────────────────────────┤
│ [Cancel] [Apply] │
└─────────────────────────────────────────────────────────┘

Live System Monitor

Connect to Running System

  1. Click Monitor → Connect
  2. Enter domain: 0
  3. Click Connect

Live Dashboard

┌─────────────────────────────────────────────────────────┐
│ Live Monitor - Domain 0 [⏸ Pause]│
├─────────────────────────────────────────────────────────┤
│ │
│ Participants: 3 ●●● │
│ Topics: 5 │
│ Active Writers: 8 │
│ Active Readers: 12 │
│ │
│ ┌─ SensorTopic ──────────────────────────────────────┐ │
│ │ Rate: ████████████████░░░░ 85 Hz │ │
│ │ Latency: 0.34 ms (avg) │ │
│ │ │ │
│ │ 📊 [View Graph] 📝 [View Data] 🔍 [Inspect] │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ ┌─ CommandTopic ─────────────────────────────────────┐ │
│ │ Rate: ██░░░░░░░░░░░░░░░░░░ 10 Hz │ │
│ │ Latency: 1.23 ms (avg) │ │
│ │ │ │
│ │ 📊 [View Graph] 📝 [View Data] 🔍 [Inspect] │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘

Real-Time Data Viewer

Click View Data to see live samples:

┌─────────────────────────────────────────────────────────┐
│ Data Viewer: SensorTopic [🔄 Auto] │
├─────────────────────────────────────────────────────────┤
│ Timestamp │ sensor_id │ value │ source │
├────────────────────┼───────────┼─────────┼─────────────┤
│ 12:34:56.123 │ 1 │ 25.50 │ sensor-1 │
│ 12:34:56.133 │ 2 │ 18.25 │ sensor-2 │
│ 12:34:56.143 │ 1 │ 25.52 │ sensor-1 │
│ 12:34:56.153 │ 3 │ 42.10 │ sensor-3 │
│ 12:34:56.163 │ 2 │ 18.30 │ sensor-2 │
│ ... │ │ │ │
└─────────────────────────────────────────────────────────┘

Code Generation

Generate from Project

  1. Click Build → Generate Code
  2. Select targets:
    • Rust (HDDS)
    • C++ (FastDDS)
    • Python
  3. Click Generate

Generated Files

MyDDSSystem/generated/
├── rust/
│ ├── Cargo.toml
│ └── src/
│ ├── lib.rs
│ ├── sensor_data.rs
│ └── participants/
│ └── sensor_node.rs
└── cpp/
├── CMakeLists.txt
└── src/
├── sensor_data.hpp
└── sensor_node.cpp

Keyboard Shortcuts

ActionShortcut
New ProjectCtrl+N
Open ProjectCtrl+O
SaveCtrl+S
UndoCtrl+Z
RedoCtrl+Shift+Z
Generate CodeF5
Connect MonitorF6
Toggle SidebarCtrl+B
SearchCtrl+F

Preferences

Configure Settings

Edit → Preferences:

┌─────────────────────────────────────────────────────────┐
│ Preferences │
├───────────────────┬─────────────────────────────────────┤
│ General │ │
│ ├─ Appearance │ Theme: [Dark ▼] │
│ ├─ Editor │ Font: [JetBrains Mono ▼] [14] │
│ └─ Auto-save │ [✓] Enable auto-save (every 5 min) │
│ │ │
│ Code Generation │ │
│ ├─ Rust │ Output: [./generated/rust] │
│ ├─ C++ │ Output: [./generated/cpp] │
│ └─ Python │ Output: [./generated/python] │
│ │ │
│ Monitor │ │
│ ├─ Default domain │ [0 ] │
│ └─ Refresh rate │ [100] ms │
└───────────────────┴─────────────────────────────────────┘

Next Steps