{ "blockSetId": "observation", "name": "Observation & Sensing", "description": "Data collection and behavioral observation blocks for capturing experiment metrics", "version": "1.0.0", "pluginApiVersion": "1.0", "hriStudioVersion": ">=0.1.0", "trustLevel": "official", "category": "sensors", "author": { "name": "HRIStudio Team", "email": "support@hristudio.com", "organization": "HRIStudio" }, "documentation": { "mainUrl": "https://docs.hristudio.org/blocks/observation", "description": "Observation blocks enable systematic data collection during experiments. They capture behavioral observations, sensor readings, and interaction metrics for later analysis." }, "blocks": [ { "id": "observe_behavior", "name": "observe behavior", "description": "Record behavioral observations during the trial", "category": "sensor", "shape": "action", "icon": "Eye", "color": "#16a34a", "nestable": false, "parameters": [ { "id": "behavior_type", "name": "Behavior Type", "type": "select", "value": "engagement", "options": [ "engagement", "attention", "confusion", "comfort", "compliance", "interaction_quality", "task_performance", "emotional_state", "custom" ], "description": "Category of behavior being observed" }, { "id": "custom_behavior", "name": "Custom Behavior", "type": "text", "value": "", "placeholder": "Describe custom behavior", "description": "Description for custom behavior type" }, { "id": "duration", "name": "Observation Duration (s)", "type": "number", "value": 5, "min": 1, "max": 300, "step": 1, "description": "How long to observe the behavior" }, { "id": "rating_scale", "name": "Rating Scale", "type": "select", "value": "1-5", "options": ["1-3", "1-5", "1-7", "1-10", "0-100", "boolean", "notes_only"], "description": "Scale for quantifying the observation" } ], "execution": { "type": "observation", "blocking": true, "data_capture": true } }, { "id": "measure_response_time", "name": "measure response time", "description": "Measure time between stimulus and participant response", "category": "sensor", "shape": "action", "icon": "Stopwatch", "color": "#16a34a", "nestable": false, "parameters": [ { "id": "stimulus_type", "name": "Stimulus", "type": "select", "value": "robot_action", "options": [ "robot_action", "wizard_speech", "visual_cue", "audio_cue", "touch", "custom" ], "description": "Type of stimulus that starts the timer" }, { "id": "response_type", "name": "Response Type", "type": "select", "value": "verbal", "options": [ "verbal", "gesture", "movement", "button_press", "eye_contact", "any_action", "custom" ], "description": "Type of response that stops the timer" }, { "id": "timeout", "name": "Timeout (s)", "type": "number", "value": 30, "min": 1, "max": 300, "step": 1, "description": "Maximum time to wait for response" } ], "execution": { "type": "timing_measurement", "blocking": true, "data_capture": true } }, { "id": "count_events", "name": "count events", "description": "Count occurrences of specific events or behaviors", "category": "sensor", "shape": "action", "icon": "Hash", "color": "#16a34a", "nestable": false, "parameters": [ { "id": "event_type", "name": "Event Type", "type": "select", "value": "verbal_utterances", "options": [ "verbal_utterances", "gestures", "eye_contact", "interruptions", "questions_asked", "task_attempts", "errors", "custom" ], "description": "Type of event to count" }, { "id": "custom_event", "name": "Custom Event", "type": "text", "value": "", "placeholder": "Describe custom event", "description": "Description for custom event type" }, { "id": "counting_period", "name": "Counting Period (s)", "type": "number", "value": 60, "min": 5, "max": 600, "step": 5, "description": "Duration to count events" }, { "id": "auto_detect", "name": "Auto Detection", "type": "boolean", "value": false, "description": "Attempt automatic detection (if supported)" } ], "execution": { "type": "event_counting", "blocking": true, "data_capture": true } }, { "id": "record_audio", "name": "record audio", "description": "Capture audio recording during interaction", "category": "sensor", "shape": "action", "icon": "Mic", "color": "#16a34a", "nestable": false, "parameters": [ { "id": "duration", "name": "Duration (s)", "type": "number", "value": 30, "min": 1, "max": 600, "step": 1, "description": "Length of audio recording" }, { "id": "quality", "name": "Quality", "type": "select", "value": "standard", "options": ["low", "standard", "high", "lossless"], "description": "Audio recording quality" }, { "id": "channels", "name": "Channels", "type": "select", "value": "mono", "options": ["mono", "stereo", "multi"], "description": "Audio channel configuration" }, { "id": "auto_transcribe", "name": "Auto Transcribe", "type": "boolean", "value": false, "description": "Automatically transcribe speech to text" } ], "execution": { "type": "audio_recording", "blocking": true, "data_capture": true } }, { "id": "capture_video", "name": "capture video", "description": "Record video of the interaction", "category": "sensor", "shape": "action", "icon": "Video", "color": "#16a34a", "nestable": false, "parameters": [ { "id": "duration", "name": "Duration (s)", "type": "number", "value": 30, "min": 1, "max": 600, "step": 1, "description": "Length of video recording" }, { "id": "camera", "name": "Camera", "type": "select", "value": "primary", "options": ["primary", "secondary", "overhead", "robot_pov", "all"], "description": "Which camera(s) to use" }, { "id": "resolution", "name": "Resolution", "type": "select", "value": "720p", "options": ["480p", "720p", "1080p", "4K"], "description": "Video resolution" }, { "id": "framerate", "name": "Frame Rate", "type": "select", "value": "30fps", "options": ["15fps", "30fps", "60fps", "120fps"], "description": "Video frame rate" } ], "execution": { "type": "video_recording", "blocking": true, "data_capture": true } }, { "id": "log_event", "name": "log event", "description": "Record a timestamped event in the trial log", "category": "sensor", "shape": "action", "icon": "FileText", "color": "#16a34a", "nestable": false, "parameters": [ { "id": "event_name", "name": "Event Name", "type": "text", "value": "", "placeholder": "Name of the event", "description": "Short identifier for the event" }, { "id": "event_data", "name": "Event Data", "type": "text", "value": "", "placeholder": "Additional data or notes", "description": "Optional additional information" }, { "id": "severity", "name": "Severity", "type": "select", "value": "info", "options": ["debug", "info", "warning", "error", "critical"], "description": "Importance level of the event" }, { "id": "category", "name": "Category", "type": "select", "value": "experiment", "options": [ "experiment", "participant", "robot", "wizard", "technical", "protocol", "custom" ], "description": "Category for organizing events" } ], "execution": { "type": "event_logging", "blocking": false, "data_capture": true } }, { "id": "survey_question", "name": "survey question", "description": "Present a survey question to the participant", "category": "sensor", "shape": "action", "icon": "HelpCircle", "color": "#16a34a", "nestable": false, "parameters": [ { "id": "question", "name": "Question", "type": "text", "value": "", "placeholder": "Enter your question", "description": "The question to ask the participant" }, { "id": "response_type", "name": "Response Type", "type": "select", "value": "likert_5", "options": [ "likert_5", "likert_7", "yes_no", "multiple_choice", "text_input", "numeric", "slider" ], "description": "Type of response interface" }, { "id": "options", "name": "Options", "type": "text", "value": "", "placeholder": "Option1,Option2,Option3", "description": "Comma-separated options for multiple choice" }, { "id": "required", "name": "Required", "type": "boolean", "value": true, "description": "Whether a response is required to continue" } ], "execution": { "type": "survey_question", "blocking": true, "data_capture": true } }, { "id": "physiological_measure", "name": "physiological measure", "description": "Capture physiological data from connected sensors", "category": "sensor", "shape": "action", "icon": "Activity", "color": "#16a34a", "nestable": false, "parameters": [ { "id": "measure_type", "name": "Measure Type", "type": "select", "value": "heart_rate", "options": [ "heart_rate", "skin_conductance", "eye_tracking", "eeg", "emg", "blood_pressure", "temperature", "custom" ], "description": "Type of physiological measurement" }, { "id": "duration", "name": "Measurement Duration (s)", "type": "number", "value": 10, "min": 1, "max": 300, "step": 1, "description": "How long to collect data" }, { "id": "sampling_rate", "name": "Sampling Rate (Hz)", "type": "number", "value": 100, "min": 1, "max": 1000, "step": 1, "description": "Data collection frequency" }, { "id": "baseline", "name": "Baseline Measurement", "type": "boolean", "value": false, "description": "Mark this as a baseline measurement" } ], "execution": { "type": "physiological_data", "blocking": true, "data_capture": true } } ] }