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
- Launch hdds-studio
- Click File → New Project
- Enter project name:
MyDDSSystem - Select project location
- 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
- Open Types panel (left sidebar)
- Click + New Type
- 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
- Click on field name
- Check Key checkbox in properties panel
- 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
- Open Topology panel
- Drag components from palette:
┌─────────────────────────────────────────────────────────┐
│ System Topology │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Sensor Node │ │ Control Node │ │
│ │ │ │ │ │
│ │ ⬆ Writer │───────▶│ ⬇ Reader │ │
│ │ SensorTopic │ │ SensorTopic │ │
│ │ │ │ │ │
│ │ │ │ ⬆ Writer │───┐ │
│ │ │ │ CommandTopic│ │ │
│ └──────────────┘ └──────────────┘ │ │
│ │ │
│ ┌──────────────┐ │ │
│ │ Actuator │◀──────────────────────────┘ │
│ │ │ │
│ │ ⬇ Reader │ │
│ │ CommandTopic│ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
Configure QoS
- Right-click on connection line
- Select Configure QoS
- 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
- Click Monitor → Connect
- Enter domain:
0 - 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
- Click Build → Generate Code
- Select targets:
- Rust (HDDS)
- C++ (FastDDS)
- Python
- 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
| Action | Shortcut |
|---|---|
| New Project | Ctrl+N |
| Open Project | Ctrl+O |
| Save | Ctrl+S |
| Undo | Ctrl+Z |
| Redo | Ctrl+Shift+Z |
| Generate Code | F5 |
| Connect Monitor | F6 |
| Toggle Sidebar | Ctrl+B |
| Search | Ctrl+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
- Type Designer - Advanced type editing
- Topology Editor - System design
- Live Monitor - Real-time monitoring
- Code Templates - Custom templates