Интеграция ROS2-робота с AI-агентом ASI Biont: удалённое управление, мониторинг и автоматизация без сложного программирования

Введение

Робототехника на базе 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.

← Все статьи

Комментарии