# Voice Control Node

This node turns voice intents into robot commands and publishes them to the Dora graph.

## Dataflow wiring

Typical wiring (from `dataflow_voice_control_ulite6_zed.yml`):

- Inputs
  - `voice_in` (speech/commands)
  - `tcp_pose` (current robot TCP pose)
  - `objects` (detected objects)
  - `status` (robot status)
  - `image_annotated` (debug image)
- Outputs
  - `robot_cmd` (robot command queue)
  - `scene_update` (scene debug)
  - `voice_out` (debug/feedback)

## Runtime flow

1) Voice input is parsed into an intent (action + optional object/color/size).
2) The scene is queried for a target object if the action requires it.
3) `RobotBehavior.execute()` validates preconditions and dispatches to a handler.
4) The handler queues `RobotStep` commands via the adapter.
5) `CommandQueueService` sends commands on `robot_cmd`.

## Key files

- `dora_voice_control/dora_voice_control/main.py`
  - Node wiring, intent processing, and dispatch loop.
- `dora_voice_control/dora_voice_control/core/behavior.py`
  - Base behavior, action validation, handler dispatch.
- `dora_voice_control/dora_voice_control/robots/`
  - Robot-specific adapters and behaviors.

## Environment variables (common)

- `ROBOT_TYPE`: robot selector (e.g., `vacuum`, `littlehand`)
- `COMMAND_OUTPUT`: output port name for robot commands (default `robot_cmd`)
- `INIT_ON_START`: queue initial reset + move to home (default `true`)
- `INIT_X/Y/Z`, `INIT_ROLL/PITCH/YAW`: home pose

See `dora_voice_control/README.md` for full configuration.
