Справочник API

Справочник публичного интерфейса SDK artex-robot версии 0.1.1.

Класс Robot

from artex_robot import Robot
robot = Robot(conf: dict = {})

Создаёт робота, загружает конфигурацию из params.json и словаря conf (приоритет у conf), инициализирует журнал и Vault. Соединение с сервером не устанавливается — для этого вызовите init_connector(). Параметры — на странице Конфигурация.

Декораторы

@robot.com_handler

Регистрирует обработчик команд. Обязателен — должен быть объявлен до вызова init_connector().

@robot.com_handler
def on_command(type_command: str, command, author=None):
    ...
Аргумент Описание
type_command Тип команды: com, force_com, sys_com и др. (см. Обработка команд)
command Сама команда — строка или структура, которую отправил оператор/модель
author Идентификатор автора команды (оператор или модель ИИ)

Обработчик вызывается в потоке Socket.IO-клиента, а не в основном цикле. Долгие действия выполняйте асинхронно (см. пример колёсного робота на странице Примеры роботов).

@robot.telemetry(key)

Помечает функцию как источник телеметрии. При каждом вызове функции её результат записывается в Vault под ключом key.

@robot.telemetry("battery")
def read_battery():
    return adc.read_voltage()

@robot.video(cam_id)

Помечает функцию как источник видео для камеры cam_id. Результат функции — кадр OpenCV (numpy-массив BGR) — сжимается в JPEG (качество 80) и записывается в Vault.

@robot.video("front")
def send_front(frame):
    return frame

@robot.mainloop

Регистрирует функцию основного цикла. Обязателен.

@robot.mainloop
def main_loop(context: dict):
    ...

Функция вызывается бесконечно с паузой max_main_freq секунд. Аргумент context — словарь контекста робота (см. ниже). Исключения внутри функции не перехватываются SDK и завершают программу — обрабатывайте их сами.

Методы

Метод Описание
robot.init_connector() Подключается к серверу server:port, namespace /robot, передаёт паспорт устройства. Включено авто-переподключение: 5 попыток, задержка 1–5 с. Если сервер недоступен при первом подключении — выбрасывает исключение socketio.exceptions.ConnectionError
robot.start() Запускает основной цикл. Блокирует выполнение. По Ctrl+C корректно останавливает потоки и отключается
robot.stop() Останавливает отправку телеметрии и видео и отключается от сервера
robot.set_context(key, value) Кладёт объект в контекст робота
robot[key] = value, robot[key], del robot[key], key in robot То же через синтаксис словаря

Контекст

Контекст — словарь для объектов, которые нужны основному циклу и обработчикам: камеры, драйверы моторов, последние команды, состояние автомата.

robot["cam"] = cv2.VideoCapture(0)
robot["motors"] = MotorDriver()

@robot.mainloop
def loop(ctx):
    ok, frame = ctx["cam"].read()

Журнал robot.log

robot.log("INFO", "Моторы инициализированы")
robot.log("WARN", "Низкий заряд")
robot.log("ERROR", "Нет ответа от контроллера")
robot.log.set_level("skip_TODO")   # скрыть служебные TODO-сообщения
robot.log.set_type("file")         # писать в all.log / error.log
Уровень Использование
INFO Штатные события
WARN Предупреждения
ERROR Ошибки — при logger_type = file дублируются в error.log
TODO Служебные сообщения SDK (выводятся на каждой итерации цикла, скрываются уровнем skip_TODO)

Файлы журнала создаются в текущем рабочем каталоге. Сервер может запросить их удалённо (см. Протокол обмена с сервером).

Внутренние объекты (для продвинутого использования)

Атрибут Назначение
robot.vault Хранилище: set_telem(key, val), set_video(cam_id, frame), get_smeta(), get_dmeta(key)
robot.sio Коннектор; robot.sio.sio — клиент socketio.Client, robot.sio.emit(event, data) — отправка произвольного события в namespace /robot

Пример прямой записи телеметрии без декоратора: robot.vault.set_telem("temp", 36.6).


Revision #3
Created 2026-09-23 09:32:15 UTC by Маслов Алексей
Updated 2026-09-23 09:35:03 UTC by Маслов Алексей