Введение
Робототехника на ROS 2 (Robot Operating System 2) — это стандарт для автономных систем, от манипуляторов до мобильных платформ. Но написание кода для управления топиками, сервисами и действиями требует времени и экспертизы. AI-агент ASI Biont решает эту задачу: он подключается к вашему ROS 2-устройству через SSH, анализирует архитектуру и автоматически генерирует скрипты для управления. В этой статье — практическое руководство по интеграции ROS 2 с ASI Biont: архитектура, реальные сценарии (управление манипулятором, навигация, мониторинг), примеры кода и подводные камни.
Почему ROS 2 и AI-агент?
ROS 2 — это фреймворк для распределённых робототехнических систем. Он использует топики (pub/sub), сервисы (request/reply) и действия (action server/client). Типичная задача: робот с лидаром публикует данные в топик /scan, AI-агент подписывается на него, анализирует и отправляет команды в топик /cmd_vel. Вручную это требует написания Python-ноды, настройки QoS и отладки. ASI Biont делает это за секунды: вы описываете задачу в чате, AI пишет код, подключается по SSH к вашему Raspberry Pi или Jetson Nano и выполняет его.
Как работает интеграция: SSH + execute_python
Основной способ подключения к ROS 2 — через SSH. ASI Biont использует библиотеку paramiko (внутри execute_python), чтобы подключиться к одноплатнику (Raspberry Pi, Orange Pi, Jetson) или серверу, на котором запущен ROS 2. Вы передаёте IP, логин и пароль (или SSH-ключ) в чате. AI генерирует Python-скрипт, который выполняет: подключение по SSH, запуск ROS-команд (ros2 topic echo, ros2 service call), чтение топиков, публикацию команд. Скрипт выполняется в sandbox-окружении на сервере ASI Biont (Railway) и взаимодействует с вашим устройством через SSH-туннель.
Важно: execute_python не имеет доступа к локальным файлам вашего ПК — всё выполняется в облаке. Для работы с COM-портами или локальными ресурсами используйте Hardware Bridge (другая интеграция), но для ROS 2 достаточно SSH.
Сценарий 1: Мониторинг состояния манипулятора
Допустим, у вас есть манипулятор (например, Universal Robots или собранный на ROS 2), который публикует состояние в топик /joint_states. Вы хотите отслеживать позиции суставов и получать уведомление в Telegram при отклонении от нормы.
Шаги:
1. В чате ASI Biont вы пишете: «Подключись к моему Raspberry Pi по SSH (IP: 192.168.1.100, логин: pi, пароль: raspberry). Прочитай данные из топика /joint_states робота ROS 2. Если позиция любого сустава выходит за пределы [0, 3.14] радиан, отправь мне уведомление в Telegram».
2. AI генерирует Python-скрипт, который:
- Подключается по SSH к Raspberry Pi с помощью paramiko.
- Выполняет команду ros2 topic echo /joint_states --once для получения последнего сообщения.
- Парсит JSON-вывод (ROS 2 выводит в YAML, но AI преобразует в JSON).
- Проверяет позиции суставов.
- Если условие нарушено, отправляет сообщение через Telegram Bot API (requests.post к api.telegram.org).
3. AI выполняет скрипт в sandbox и возвращает результат.
Пример кода (упрощённый):
import paramiko
import json
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.100', username='pi', password='raspberry')
stdin, stdout, stderr = ssh.exec_command('ros2 topic echo /joint_states --once --field name --field position')
output = stdout.read().decode()
# парсим YAML-подобный вывод в словарь
# ...
if any(pos < 0 or pos > 3.14 for pos in positions):
# отправка в Telegram
import requests
requests.post(f'https://api.telegram.org/bot{TOKEN}/sendMessage', json={'chat_id': CHAT_ID, 'text': 'Joint out of range!'})
ssh.close()
Подводный камень: ROS 2 по умолчанию выводит данные в YAML, а не JSON. AI должен правильно распарсить вывод. Если формат сложный, AI может использовать ros2 topic echo --json (если установлен плагин) или написать простую ноду на Python внутри SSH.
Сценарий 2: Управление движением робота через сервис
Представьте, что у вас есть мобильная платформа с ROS 2 Navigation Stack. Вы хотите отправить целевую точку для навигации через сервис /navigate_to_pose.
Шаги:
1. В чате: «Подключись по SSH к 192.168.1.100, вызови сервис /navigate_to_pose с координатами x=2.0, y=1.5, theta=1.57. Дождись завершения и сообщи статус».
2. AI генерирует скрипт, который:
- Подключается по SSH.
- Выполняет ros2 service call /navigate_to_pose nav2_msgs/srv/NavigateToPose "{pose: {header: {frame_id: 'map'}, pose: {position: {x: 2.0, y: 1.5}, orientation: {z: 0.707, w: 0.707}}}}".
- Ждёт ответ и выводит его.
3. AI возвращает результат вызова сервиса.
Пример команды, которую AI генерирует:
ros2 service call /navigate_to_pose nav2_msgs/srv/NavigateToPose "{pose: {header: {frame_id: 'map'}, pose: {position: {x: 2.0, y: 1.5}, orientation: {z: 0.707, w: 0.707}}}}"
Совет: AI может автоматически конвертировать углы в кватернионы. Убедитесь, что вы указали frame_id (обычно map или odom).
Сценарий 3: Автономный сбор данных с лидара
Лидар публикует данные в топик /scan. Вы хотите собрать 100 скан-кадров, сохранить их в файл и проанализировать.
Шаги:
1. В чате: «Подключись по SSH, запусти команду ros2 topic echo /scan --once 100 раз с интервалом 0.5 секунды, сохрани данные в CSV-файл на Raspberry Pi и пришли мне ссылку на скачивание».
2. AI генерирует скрипт, который:
- Циклически выполняет ros2 topic echo /scan --once.
- Парсит расстояния из поля ranges.
- Сохраняет в CSV.
- Использует scp (через paramiko) или HTTP-сервер для передачи файла.
Важно: execute_python имеет таймаут 30 секунд, поэтому для долгих задач AI использует асинхронный подход или разбивает на несколько вызовов.
Почему это выгодно?
- Нет кода вручную: AI пишет интеграцию под вашу конкретную архитектуру ROS 2. Вы описываете задачу — AI делает.
- Мгновенное прототипирование: вместо часов написания ноды — минуты диалога с AI.
- Гибкость: подключайтесь к любому топику, сервису, действию. AI сам разбирается в структуре сообщений (sensor_msgs/LaserScan, geometry_msgs/Twist и т.д.).
- Мониторинг и оповещения: AI может проверять данные в реальном времени и отправлять уведомления в Telegram, Slack или email.
Таблица: библиотеки и протоколы для ROS 2
| Библиотека/Инструмент | Назначение | Пример команды |
|---|---|---|
| paramiko | SSH-подключение к одноплатнику | ssh.exec_command('ros2 topic list') |
| paho.mqtt (опционально) | Публикация данных из ROS 2 в MQTT | publish('robot/scan', ranges) |
| requests | Отправка уведомлений (Telegram, Slack) | requests.post(url, json=payload) |
| json | Парсинг вывода ROS 2 (если JSON) | json.loads(output) |
Примечание: ASI Biont не использует rclpy напрямую — он запускает ROS 2-команды через SSH. Это проще и не требует установки дополнительных библиотек на стороне AI.
Подводные камни и советы
- Таймауты:
execute_pythonограничен 30 секундами. Для длительных операций (например, сбор данных 10 минут) AI может запустить фоновый процесс на устройстве через SSH и периодически проверять его статус. - Формат вывода: ROS 2 выводит данные в YAML. AI должен правильно парсить. Если ваш топик сложный, AI может написать простую Python-ноду на устройстве, которая выводит JSON.
- QoS-профили: Некоторые топики используют Reliability QoS (Best Effort vs Reliable). AI может изменить команду
ros2 topic echoс флагом--qos-reliability best_effort. - Безопасность: Храните SSH-ключи и пароли только в диалоге. AI не сохраняет их после завершения сессии.
Как начать?
- Зарегистрируйтесь на asibiont.com.
- Убедитесь, что ваше ROS 2-устройство (Raspberry Pi, Jetson, ПК) доступно по SSH из интернета (или используйте VPN/туннель).
- В чате ASI Biont напишите: «Подключись к моему устройству по SSH: IP 192.168.1.100, логин pi, пароль raspberry. Прочитай топик
/scanи сообщи минимальное расстояние». - AI сам напишет код, выполнит его и вернёт результат.
Заключение
Интеграция ROS 2 с AI-агентом ASI Biont — это способ управлять роботом без написания кода. Мониторинг манипулятора, навигация, сбор данных с лидара — всё это можно автоматизировать через диалог в чате. Никаких панелей управления, кнопок «добавить устройство» — просто опишите задачу, и AI сделает остальное. Попробуйте интеграцию на asibiont.com и ускорьте разработку робототехнических систем в разы.
Комментарии