Files
hristudio/docs/tutorials/03-designing-experiments.md

342 lines
9.6 KiB
Markdown

# Tutorial 3: Designing Experiments
Learn how to create experiment protocols using the visual block designer.
## Objectives
- Navigate the experiment designer
- Use core blocks (events, wizard actions, control flow)
- Build a branching experiment protocol
## What is an Experiment?
An **Experiment** defines the protocol for your study:
```
Experiment
├── Steps (ordered sequence)
│ ├── Actions (robot behaviors)
│ ├── Wizard Blocks (human decisions)
│ └── Control Flow (loops, branches)
├── Robot Actions (from plugins)
└── Parameters (configurable values)
```
## Step 1: Create an Experiment
1. Open your study
2. Go to **Experiments** tab
3. Click **New Experiment**
### Experiment Settings
| Field | Description |
|-------|-------------|
| Name | Protocol title |
| Description | What the experiment measures |
| Robot | Which robot to use |
| Version | Track protocol versions |
## Step 2: The Experiment Designer Interface
The designer has three main areas:
```
┌──────────────────────────────────────────────────────────────┐
│ Experiment: Robot Trust Study v1 [Save] │
├────────────┬─────────────────────────────────────────────────┤
│ │ │
│ Blocks │ Canvas │
│ Library │ │
│ │ ┌─────────┐ ┌─────────┐ │
│ ┌──────┐ │ │ Step 1 │───▶│ Step 2 │ │
│ │Events│ │ │ Hook │ │ Story │ │
│ ├──────┤ │ └─────────┘ └────┬────┘ │
│ │Wizard│ │ │ │
│ ├──────┤ │ ┌────▼────┐ │
│ │Control│ │ │ Step 3 │ │
│ ├──────┤ │ │ Check │ │
│ │Robot │ │ └────┬────┘ │
│ └──────┘ │ ┌────┴────┐ │
│ │ ┌────┴───┐ ┌───┴────┐ │
│ │ │Step 4a │ │Step 4b │ │
│ │ │Correct │ │ Wrong │ │
│ │ └───┬────┘ └───┬────┘ │
│ │ └─────┬─────┘ │
│ │ ┌────▼────┐ │
│ │ │ Step 5 │ │
│ │ │Conclude │ │
│ │ └─────────┘ │
├────────────┴─────────────────────────────────────────────────┤
│ Properties Panel │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Step 1: The Hook │ │
│ │ Duration: 25 seconds │ │
│ │ Actions: 2 blocks │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
```
## Step 3: Understanding Block Categories
### Events (Triggers)
Start your experiment with these blocks:
| Block | Description |
|-------|-------------|
| **Trial Start** | Triggers when trial begins |
| **Wizard Button** | Waits for wizard to press a button |
| **Timer** | Waits for a specified duration |
| **Participant Response** | Waits for participant input |
### Wizard Actions
Blocks the wizard can control:
| Block | Description |
|-------|-------------|
| **Say Text** | Robot speaks text |
| **Play Animation** | Play a predefined animation |
| **Show Image** | Display image on robot screen |
| **Move Robot** | Move robot to position |
### Control Flow
Control experiment progression:
| Block | Description |
|-------|-------------|
| **Branch** | Split into multiple paths |
| **Loop** | Repeat a sequence |
| **Wait** | Pause for duration |
| **Converge** | Merge multiple paths back |
### Robot Actions
Actions from your installed robot plugin:
| Block | Description |
|-------|-------------|
| **say_text** | Robot speaks |
| **walk_forward** | Robot walks forward |
| **turn_left** | Robot turns |
| **wave** | Robot waves |
## Step 4: Building "The Interactive Storyteller"
Let's build a simple storytelling experiment with branching:
### Step 1: The Hook (Start)
1. Click **+ Add Step**
2. Name it "The Hook"
3. Set type to **Robot**
4. Drag **Say Text** block:
```
text: "Hello! I have a story to tell you. Are you ready?"
```
5. Drag **Move Arm** block:
```
arm: right
gesture: welcome
```
### Step 2: The Narrative
1. Add new step "The Narrative"
2. Connect from Step 1
3. Add **Say Text**:
```
text: "Once upon a time, a traveler flew to Mars..."
```
4. Add **Turn Head** for gaze behavior:
```
yaw: 1.5
pitch: 0.0
```
### Step 3: Comprehension Check (Branching)
1. Add new step "Comprehension Check"
2. Set type to **Conditional**
3. Add **Ask Question**:
```
question: "What color was the rock?"
options:
- Correct: "Red"
- Incorrect: "Blue"
```
4. This creates two paths automatically
### Step 4: Branch Paths
**Branch A (Correct):**
```
Say: "Yes! It was a glowing red rock."
Emotion: Happy
```
**Branch B (Incorrect):**
```
Say: "Actually, it was red."
Emotion: Sad
```
### Step 5: Converge
1. Add new step "Story Continues"
2. Set type to **Converge**
3. Connect both branches to this step
4. Add concluding speech
### Step 6: Conclusion
1. Add final step "Conclusion"
2. Add **Say Text**: "The End. Thank you for listening!"
3. Add **Bow** animation
## Step 5: Block Properties
Each block has configurable properties:
### Say Text Block
```json
{
"text": "Hello, how are you?",
"language": "en-US",
"speed": 1.0,
"emotion": "neutral"
}
```
### Branch Block
```json
{
"variable": "last_response",
"options": [
{ "label": "Yes", "value": "yes", "nextStepId": "step_abc" },
{ "label": "No", "value": "no", "nextStepId": "step_xyz" }
]
}
```
### Loop Block
```json
{
"iterations": 3,
"maxDuration": 60,
"children": [...]
}
```
## Step 6: Testing Your Experiment
### Preview Mode
Test your experiment without running a real trial:
1. Click **Preview** button
2. Step through each block
3. See timing and flow
4. Test branching decisions
### Simulation Mode
Run with a simulated robot:
1. Enable `NEXT_PUBLIC_SIMULATION_MODE=true`
2. Start a trial
3. Robot actions are logged but not executed
4. Great for protocol testing
## Advanced: Parallel Execution
Run multiple actions simultaneously:
```
Step: Greeting
├── Parallel Block
│ ├── Say: "Hello!"
│ ├── Move Arm: Wave
│ └── Move Head: Look at participant
```
## Experiment Versioning
Track protocol changes:
1. **Draft** - Experiment being designed
2. **Testing** - Being tested with participants
3. **Ready** - Approved for data collection
4. **Deprecated** - Superseded by newer version
## Common Patterns
### Linear Protocol
```
Start → Step 1 → Step 2 → Step 3 → End
```
### Branching Protocol
```
Start → Step 1
├── Condition A → Step 2a
└── Condition B → Step 2b
```
### Loop Protocol
```
Start → Step 1 → Loop (3x) → Step 2 → End
└── (back to Step 1)
```
### Parallel Protocol
```
Start → Parallel
├── Action A
├── Action B
└── Action C
→ Continue
```
## Troubleshooting
### Block Not Connecting
- Check step types are compatible
- Ensure no circular dependencies
- Verify conditions are complete
### Robot Action Not Available
- Install the robot plugin
- Check plugin is enabled for study
- Verify robot is connected
### Timing Issues
- Adjust duration estimates
- Use explicit wait blocks
- Test with real timing
## Next Steps
Now that you've designed your experiment:
1. **[Running Trials](04-running-trials.md)** - Execute your experiment
2. **[Wizard Interface](05-wizard-interface.md)** - Learn real-time control
3. **[Robot Integration](06-robot-integration.md)** - Connect your robot
---
**Previous**: [Your First Study](02-your-first-study.md) | **Next**: [Running Trials](04-running-trials.md)