Введение
Робототехника на базе ROS2 (Robot Operating System 2) стала стандартом для разработки автономных систем — от мобильных платформ и манипуляторов до беспилотных аппаратов. Однако управление роботом, мониторинг его сенсоров и выполнение сложных сценариев часто требуют написания кода, настройки панелей управления и постоянного присутствия разработчика. AI-агент ASI Biont меняет эту парадигму: он подключается к ROS2-роботу через SSH, анализирует данные сенсоров в реальном времени и позволяет управлять роботом через обычный чат. В этой статье мы разберём, как AI-агент ASI Biont интегрируется с ROS2-роботом, какие механизмы использует и какие сценарии автоматизации становятся возможными — без сложного программирования, за счёт готовых блоков интеграций платформы.
Что такое ROS2 и зачем подключать к нему AI-агента?
ROS2 — это фреймворк для построения распределённых робототехнических систем. Он использует publish-subscribe архитектуру через DDS (Data Distribution Service), что позволяет узлам (nodes) обмениваться сообщениями — топиками (topics) — о состоянии сенсоров, командах движения, данных лидара, изображениях с камер и т.д. Основные компоненты ROS2:
- Топики — каналы для обмена данными (например,
/odom,/cmd_vel,/camera/image_raw). - Сервисы — синхронные вызовы для действий (например,
nav_msgs/GetPlan). - Action — асинхронные длительные задачи (например, перемещение в точку).
Подключение AI-агента к ROS2 даёт возможность:
- Удалённо мониторить состояние робота: скорость, положение, напряжение батареи, данные с лидара.
- Отправлять команды движения, захвата объектов, включения/выключения периферии.
- Автоматизировать задачи: робот может самостоятельно выполнять миссии по голосовой или текстовой команде.
- Интегрировать AI-анализ: например, детекция объектов на видео с камеры робота с использованием нейросетей.
Как ASI Biont подключается к ROS2-роботу?
ASI Biont использует SSH (Secure Shell) через execute_python для подключения к одноплатным компьютерам, на которых работает ROS2 — Raspberry Pi, NVIDIA Jetson, Intel NUC и другие. Это наиболее прямой и универсальный способ: AI-агент пишет Python-скрипт с библиотекой paramiko, который выполняется в sandbox-окружении ASI Biont, подключается к устройству по SSH и взаимодействует с ROS2 через его стандартные инструменты.
Почему именно SSH?
- ROS2-роботы обычно работают на полноценном Linux (Ubuntu, ROS2 Humble), имеют SSH-сервер.
- SSH даёт доступ к командной оболочке, ROS2 CLI (ros2 topic, ros2 service, ros2 action) и файловой системе.
- Не требуется установка дополнительного ПО на робота — только SSH-ключ или пароль.
- AI может запускать скрипты на Python с rclpy (ROS2 Python client library) для подписки на топики и публикации команд.
Процесс подключения выглядит так:
1. Пользователь описывает в чате с AI-агентом: «Подключись к моему ROS2-роботу по SSH на IP 192.168.1.100, порт 22, логин ubuntu, пароль ros2pass».
2. AI-агент пишет Python-скрипт с paramiko, который выполняет подключение и, например, запускает ros2 topic list для проверки.
3. AI возвращает результат: «Робот подключён. Доступны топики: /odom, /cmd_vel, /battery_state».
4. Далее пользователь может в чате давать команды: «Опубликуй в /cmd_vel скорость 0.2 м/с вперёд» или «Прочитай последние 10 сообщений из /odom».
Конкретный сценарий: мониторинг и управление мобильным роботом TurtleBot3 через чат
Рассмотрим пример с популярным образовательным роботом TurtleBot3 на ROS2 Humble. TurtleBot3 имеет топики:
- /odom — одометрия (положение, скорость).
- /cmd_vel — управление движением (линейная и угловая скорость).
- /battery_state — состояние батареи.
- /scan — данные лидара.
Шаг 1. Подключение через SSH
Пользователь пишет в чате ASI Biont:
«Подключись по SSH к моему TurtleBot3. IP: 192.168.1.50, пользователь: ubuntu, пароль: turtlebot. Выведи список всех ROS2 топиков».
AI-агент выполняет Python-скрипт:
import paramiko
host = "192.168.1.50"
username = "ubuntu"
password = "turtlebot"
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, username=username, password=password)
stdin, stdout, stderr = client.exec_command("source /opt/ros/humble/setup.bash && ros2 topic list")
print(stdout.read().decode())
client.close()
AI выводит:
Подключение установлено. Доступные топики:
/odom
/cmd_vel
/battery_state
/scan
/imu
Шаг 2. Мониторинг одометрии в реальном времени
Пользователь:
«Подпишись на /odom и покажи последние 5 сообщений с позицией и ориентацией».
AI пишет скрипт, который использует rclpy для подписки на топик:
import paramiko
import json
host = "192.168.1.50"
username = "ubuntu"
password = "turtlebot"
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, username=username, password=password)
# Создаём временный Python-скрипт на роботе
code = '''
import rclpy
from nav_msgs.msg import Odometry
from geometry_msgs.msg import Pose
msgs = []
def callback(msg):
msgs.append({
"x": msg.pose.pose.position.x,
"y": msg.pose.pose.position.y,
"orientation_z": msg.pose.pose.orientation.z
})
if len(msgs) > 5:
msgs.pop(0)
rclpy.init()
node = rclpy.create_node("listener")
sub = node.create_subscription(Odometry, "/odom", callback, 10)
import time
time.sleep(2) # Ждём 2 секунды для сбора данных
rclpy.shutdown()
import json
print(json.dumps(msgs))
'''
stdin, stdout, stderr = client.exec_command(f"python3 -c '{code}'")
result = stdout.read().decode()
print(result)
client.close()
AI выводит:
[
{"x": 0.12, "y": 0.05, "orientation_z": 0.01},
{"x": 0.15, "y": 0.08, "orientation_z": 0.02},
...
]
Шаг 3. Отправка команды движения
Пользователь:
«Опубликуй в /cmd_vel скорость 0.3 м/с вперёд и угловую 0.5 рад/с влево».
AI пишет скрипт с использованием rclpy:
import paramiko
host = "192.168.1.50"
username = "ubuntu"
password = "turtlebot"
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, username=username, password=password)
code = '''
import rclpy
from geometry_msgs.msg import Twist
rclpy.init()
node = rclpy.create_node("commander")
pub = node.create_publisher(Twist, "/cmd_vel", 10)
msg = Twist()
msg.linear.x = 0.3
msg.angular.z = 0.5
import time
for _ in range(10):
pub.publish(msg)
time.sleep(0.1)
rclpy.shutdown()
print("Команда отправлена")
'''
stdin, stdout, stderr = client.exec_command(f"python3 -c '{code}'")
print(stdout.read().decode())
client.close()
AI подтверждает: «Робот начал движение вперёд с поворотом влево».
Шаг 4. Автоматизация: проверить заряд батареи и вернуться на базу
Пользователь:
«Проверь уровень батареи через /battery_state. Если он меньше 20%, отправь робота на базу по координатам (0, 0) через action /navigate_to_pose».
AI выполняет скрипт, который читает батарею и, если нужно, вызывает action:
import paramiko
host = "192.168.1.50"
username = "ubuntu"
password = "turtlebot"
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, username=username, password=password)
code = '''
import rclpy
from sensor_msgs.msg import BatteryState
rclpy.init()
node = rclpy.create_node("battery_checker")
def check():
# Получаем последнее сообщение из /battery_state
from rclpy.qos import QoSProfile
sub = node.create_subscription(BatteryState, "/battery_state", lambda msg: None, 10)
# Ждём сообщение
import time
future = sub.wait_for_message()
# Упрощённо: используем утилиту ros2 topic echo
pass
# Используем bash-команду для простоты
import subprocess
result = subprocess.run(["bash", "-c", "source /opt/ros/humble/setup.bash && ros2 topic echo /battery_state --once"], capture_output=True, text=True)
print(result.stdout)
'''
stdin, stdout, stderr = client.exec_command(f"python3 -c '{code}'")
output = stdout.read().decode()
print(output)
client.close()
AI анализирует: «Батарея 15%. Запускаю возврат на базу через navigate_to_pose.» и отправляет соответствующую команду.
Почему это выгодно?
- Нет необходимости писать код вручную — AI генерирует скрипты интеграции за секунды на основе описания задачи.
- Не требует настройки сложных панелей управления — всё делается через естественный диалог в чате.
- Универсальность — ASI Biont подключается к любому ROS2-роботу, не требуя установки дополнительных агентов (только SSH-доступ).
- Масштабируемость — можно управлять несколькими роботами одновременно, каждый через свой SSH-канал.
- Безопасность — все скрипты выполняются в изолированном sandbox-окружении на стороне ASI Biont, а на робота передаются только команды.
Другие способы подключения к ROS2
Хотя SSH — основной способ, ASI Biont может подключаться к ROS2-устройствам и через другие протоколы, если робот их поддерживает:
| Протокол | Когда использовать | Пример команды AI |
|---|---|---|
| SSH (paramiko) | Стандартный способ для Linux-роботов с ROS2 | industrial_command(protocol='ssh', command='execute', params={'host': '192.168.1.50', 'username': 'ubuntu', 'password': '...', 'cmd': 'ros2 topic list'}) |
| MQTT | Если ROS2-робот публикует данные в MQTT-брокер (например, через ros2_mqtt_bridge) | AI пишет скрипт с paho-mqtt |
| HTTP API | Если робот предоставляет REST API для управления | AI пишет скрипт с aiohttp |
| WebSocket | Для потоковой передачи данных (например, видео с камеры) | AI пишет скрипт с websockets |
Заключение
Интеграция ROS2-робота с AI-агентом ASI Biont открывает новые возможности для робототехники и автоматизации. Вы можете удалённо управлять роботом, мониторить его сенсоры и автоматизировать задачи — просто описывая их в чате. AI-агент сам пишет код на Python, подключается по SSH и взаимодействует с ROS2 через стандартные топики и сервисы. Не нужно быть экспертом в программировании — достаточно описать, что вы хотите сделать.
Попробуйте интеграцию вашего ROS2-робота с ASI Biont уже сегодня на asibiont.com. Просто напишите в чат: «Подключи моего TurtleBot3 по SSH» — и начните управлять роботом с помощью AI.
Комментарии