> ## Índice de la documentación
> Consulta el índice completo de la documentación en: https://developer.rhombus.com/llms.txt
> Úsalo para descubrir todas las páginas disponibles antes de seguir explorando.

# Robots Recon

> Qué puedes construir con Recon, el robot de seguridad de Rhombus, a través de la API: cómo se relacionan los mapas, los puntos de ruta, las rutas y las patrullas, las convenciones que comparten todas las operaciones de robots y los permisos que necesitan.

> **Note**: Esta página se tradujo automáticamente. Si encuentras errores o tienes sugerencias, [escríbenos](mailto:support@rhombus.com).

Recon es el robot de seguridad de Rhombus. Las operaciones de robots de la API (en `/api/robot/`, que aparecen como **Robot Webservice** en la [referencia de la API](https://developer.rhombus.com/api-reference/overview), en inglés) permiten que tu software vea qué hace cada robot, defina los lugares que visita, ejecute patrullas según un horario o bajo demanda y vea sus cámaras. Un WebSocket en vivo agrega telemetría y conducción en tiempo real.

| Guía                                                                                 | Qué cubre                                                                                                                               |
| ------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
| [Monitorear robots](https://developer.rhombus.com/es/robots/monitor)                 | Batería, conexión, actividad actual y progreso de la flota, y el historial de lo que hizo cada robot                                    |
| [Mapas y puntos de ruta](https://developer.rhombus.com/es/robots/maps-and-waypoints) | La imagen del mapa del robot, la conversión entre píxeles y coordenadas del mapa, las zonas de exclusión y los puntos de ruta guardados |
| [Rutas y patrullas](https://developer.rhombus.com/es/robots/routes-and-patrols)      | Paradas ordenadas con tiempos de espera y acciones de llegada, y patrullas que ejecutan una ruta en un robot según un horario           |
| [Enviar y seguir](https://developer.rhombus.com/es/robots/dispatch)                  | Enviar un robot a una patrulla, a un punto o de vuelta a su base de carga, y seguir la ejecución hasta su resultado                     |
| [Video y audio](https://developer.rhombus.com/es/robots/video-and-audio)             | Video en vivo y grabado de cada una de las cámaras del robot, y audio en vivo                                                           |
| [Socket en vivo del robot](https://developer.rhombus.com/es/robots/live-socket)      | Conducir el robot y leer su telemetría en tiempo real                                                                                   |

## Cómo encajan las piezas

```mermaid
flowchart LR
  M[Map] --> W[Waypoints]
  M --> R[Routes]
  W -. referenced by .-> R
  R --> P[Patrols]
  B[Robot] --> P
  P -- schedule or deploy --> A[Activity]
  A --> E[Events]
```

- **Mapa.** Durante la configuración, el robot crea un mapa del espacio donde trabaja, y cada robot tiene un mapa asignado. Crear y asignar mapas no forma parte de la API; la API lee el mapa asignado y todo lo que colocas en él.
- **Punto de ruta.** Una pose con nombre (una posición y un rumbo) en un mapa, que puedes reutilizar en varias rutas.
- **Ruta.** Una lista ordenada de paradas en un mapa. Cada parada es un punto de ruta o una pose propia, con un tiempo de espera opcional y acciones que se ejecutan cuando llega el robot. Cualquier robot de ese mapa puede ejecutar la ruta.
- **Patrulla.** Una ruta asignada a un robot, con un horario opcional y sus propias acciones de llegada.
- **Actividad.** Lo que hace el robot en este momento, como `ROUTE_RUN` durante una patrulla o `NAVIGATE_TO_HOME` cuando va hacia la base de carga. Cada comando inicia una actividad, y el robot informa cada uno de sus pasos como un evento.

## Convenciones

**Los identificadores** son los mismos UUID de 22 caracteres en Base64 seguro para URL que en el resto de la API (`"AAAAAAAAAAAAAAAAAAAAAA"`). Un UUID de 36 caracteres se rechaza con `400`.

**Las poses** son dos arreglos en el sistema de coordenadas del mapa:

```json
{ "position": [12.4, -3.1, 0.0], "orientation": [0.0, 0.0, 0.7071068, 0.7071068] }
```

`position` es `[x, y, z]` en metros. `orientation` es un cuaternión unitario `[x, y, z, w]`; para un robot que se desplaza sobre el suelo solo importa el rumbo, un ángulo θ en sentido antihorario desde el eje x del mapa, que corresponde a `[0, 0, sin(θ/2), cos(θ/2)]`. Ambos arreglos deben estar completos: tres números y cuatro números.

```python Python
import math

def heading_to_orientation(theta):
    """Quaternion [x, y, z, w] for a heading in radians, counterclockwise from the map's x axis."""
    return [0.0, 0.0, math.sin(theta / 2), math.cos(theta / 2)]

def orientation_to_heading(q):
    """Heading in radians from a quaternion [x, y, z, w]."""
    x, y, z, w = q
    return math.atan2(2 * (w * z + x * y), 1 - 2 * (y * y + z * z))
```

**Los tiempos** son milisegundos de época. Los tiempos de espera son la excepción: las solicitudes usan `dwellTimeSecs` (segundos) y las respuestas devuelven `dwellTimeMs`.

**Las respuestas** incluyen `error`, `errorMsg` y `warningMsg`, como en el resto de la API ([El sobre de la respuesta](https://developer.rhombus.com/es/errors#el-sobre-de-la-respuesta)). La mayoría de los rechazos, como una ruta sin paradas, son `200` con `"error": true`, así que revisa `error` en cada respuesta. Un mapa, una ruta, una patrulla o un punto de ruta que la credencial no puede ver, incluido uno que no existe, se rechaza con `403`.

Los ejemplos de estas guías usan una [clave de API](https://developer.rhombus.com/es/authentication/api-keys) y esta función auxiliar:

```python Python
import os
import requests

API = "https://api2.rhombussystems.com/api/robot"
HEADERS = {"x-auth-scheme": "api-token", "x-auth-apikey": os.environ["RHOMBUS_API_KEY"]}

def robot_api(operation, body):
    response = requests.post(f"{API}/{operation}", headers=HEADERS, json=body, timeout=30)
    response.raise_for_status()
    data = response.json()
    if data.get("error"):
        raise RuntimeError(f"{operation}: {data.get('errorMsg') or 'refused'}")
    return data
```

Las organizaciones de la UE usan `api2.eu.rhombussystems.com` ([Regiones de API](https://developer.rhombus.com/es/api-regions)).

## Permisos

Las operaciones de robots revisan el rol de la credencial ([Permisos](https://developer.rhombus.com/es/authentication/permissions)) sobre el robot, o sobre la ubicación del mapa, la ruta o el punto de ruta:

| Para                                                                                                           | El rol necesita                                                                  |
| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| Leer el estado, los eventos, los mapas, los puntos de ruta, las rutas y las patrullas                          | Acceso de solo lectura al robot o a su ubicación                                 |
| Ver video en vivo y escuchar audio                                                                             | Acceso solo en vivo o superior; el video grabado necesita acceso de solo lectura |
| Crear, cambiar o eliminar puntos de ruta y rutas                                                               | Acceso de administrador a la ubicación del mapa                                  |
| Crear, cambiar o eliminar patrullas, enviar el robot, enviarlo a la base, cambiar sus datos o su configuración | Acceso de administrador al robot                                                 |
| Quitar el robot de la organización                                                                             | Acceso de administrador y el permiso para eliminar dispositivos                  |

Enviar un robot mueve una máquina física. Dale a la integración que envía los robots su propia clave de API, con acceso de administrador solo a las ubicaciones donde trabaja.

## Lista tus robots

[`getMinimalStateList`](https://developer.rhombus.com/api-reference/robot-webservice/get-minimal-robot-state-list) devuelve todos los robots que la credencial puede ver:

```python Python
for robot in robot_api("getMinimalStateList", {})["minimalStates"]:
    print(robot["name"], robot["uuid"], robot["connectionStatus"], robot.get("batteryPercent"), robot.get("activity"))
```

El `uuid` de cada robot es el `deviceUuid` que reciben las demás operaciones de robots. [Monitorear robots](https://developer.rhombus.com/es/robots/monitor) explica los campos del estado.

Las rutas y las patrullas están en el mapa asignado del robot. Antes de construir sobre un robot, confirma que tiene uno con [`getMapAssignment`](https://developer.rhombus.com/api-reference/robot-webservice/retrieve-the-robots-map-assignment-record); [Mapas y puntos de ruta](https://developer.rhombus.com/es/robots/maps-and-waypoints) empieza por ahí.
