Введение
Робототехника на базе ROS 2 (Robot Operating System 2) стала стандартом для промышленных и сервисных роботов: от автономных мобильных платформ до манипуляторов. Однако настройка навигации (Nav2), планирования траекторий (MoveIt 2) и сбора телеметрии требует глубоких знаний C++ и Python. AI-агент ASI Biont меняет это: он подключается к ROS 2 через execute_python, используя библиотеки вроде rclpy, и позволяет управлять роботом с помощью текстовых команд в чате. В этой статье мы разберём реальные сценарии: интеграцию с Nav2 для движения по точкам, с MoveIt 2 для захвата объектов и сбор телеметрии для мониторинга состояния робота.
Что такое ROS 2 и зачем подключать его к AI-агенту
ROS 2 — это middleware для распределённых робототехнических систем. Он предоставляет механизмы обмена сообщениями (topics), удалённого вызова процедур (services) и действий (actions). Например, для управления навигацией используется action /navigate_to_pose, а для манипулятора — action /move_group. ASI Biont подключается к ROS 2 через execute_python: пользователь описывает в чате задачу (например, «отправь робота в точку X=2.0, Y=3.0, угол 0.5 радиан»), а AI-агент генерирует Python-скрипт с использованием rclpy, который подключается к ROS 2 master по адресу (например, 192.168.1.100:11311) и отправляет goal action. Это избавляет от ручного написания узлов и файлов конфигурации.
Способы подключения ROS 2 к ASI Biont
ASI Biont поддерживает интеграцию с ROS 2 через execute_python — универсальный механизм, где AI пишет Python-скрипт, запускаемый в sandbox-окружении. В sandbox доступна библиотека rclpy (если она предустановлена в окружении) или, как альтернатива, используется прямое взаимодействие через socket с ROS 2 master по протоколу XMLRPC. На практике AI использует библиотеку rclpy для создания узла, подписки на топики и отправки action-запросов. Пользователь указывает IP и порт ROS 2 master (обычно 11311) в чате, и AI генерирует код.
Сценарий 1: Управление навигацией через Nav2
Nav2 — это стек навигации для ROS 2, который использует action /navigate_to_pose для движения робота. AI-агент может отправить goal action с координатами цели (x, y, yaw). Пример кода, который AI генерирует для отправки робота в точку:
import rclpy
from rclpy.action import ActionClient
from geometry_msgs.msg import PoseStamped
from nav2_msgs.action import NavigateToPose
rclpy.init()
node = rclpy.create_node('navigate_client')
client = ActionClient(node, NavigateToPose, '/navigate_to_pose')
goal_msg = NavigateToPose.Goal()
goal_msg.pose.pose.position.x = 2.0
goal_msg.pose.pose.position.y = 3.0
goal_msg.pose.pose.orientation.z = 0.382683 # угол 0.5 рад
client.wait_for_server()
client.send_goal_async(goal_msg)
rclpy.spin_once(node, timeout_sec=1.0)
node.destroy_node()
rclpy.shutdown()
Этот код выполняется в sandbox, подключается к ROS 2 master по адресу, который указал пользователь, и отправляет команду. AI также может добавить проверку статуса выполнения action.
Сценарий 2: Управление манипулятором через MoveIt 2
MoveIt 2 предоставляет action /move_group для планирования движения манипулятора. AI может отправить goal с целевой позицией суставов или конечного эффектора. Пример для перемещения манипулятора в заданную конфигурацию:
import rclpy
from rclpy.action import ActionClient
from moveit_msgs.action import MoveGroup
from trajectory_msgs.msg import JointTrajectoryPoint
rclpy.init()
node = rclpy.create_node('moveit_client')
client = ActionClient(node, MoveGroup, '/move_group')
goal_msg = MoveGroup.Goal()
point = JointTrajectoryPoint()
point.positions = [0.5, -0.3, 0.1, 0.0, 0.0, 0.0] # 6 суставов
goal_msg.request.workspace_parameters.header.frame_id = 'base_link'
client.wait_for_server()
client.send_goal_async(goal_msg)
rclpy.spin_once(node, timeout_sec=1.0)
node.destroy_node()
rclpy.shutdown()
AI адаптирует количество суставов под конкретную модель манипулятора (например, UR5, KUKA), получая информацию из описания пользователя.
Сценарий 3: Сбор телеметрии с ROS 2 топиков
Для мониторинга состояния робота AI подписывается на топики, такие как /odom (одометрия), /battery_state или /joint_states. Пример сбора данных о положении робота:
import rclpy
from nav_msgs.msg import Odometry
def callback(msg):
print(f'Position: x={msg.pose.pose.position.x:.2f}, y={msg.pose.pose.position.y:.2f}')
rclpy.init()
node = rclpy.create_node('odom_subscriber')
sub = node.create_subscription(Odometry, '/odom', callback, 10)
rclpy.spin_once(node, timeout_sec=2.0)
node.destroy_node()
rclpy.shutdown()
AI может сохранить данные в CSV или отправить в Telegram через requests.post к api.telegram.org.
Реальные сценарии применения
- Складская логистика: AI управляет автономным мобильным роботом (на базе ROS 2 + Nav2), отправляя его на стеллажи для подбора товаров. Пользователь пишет: «Отправь робота на склад A, зона 3», AI генерирует goal action с координатами.
- Инспекция трубопроводов: AI подключается к ROS 2 на роботе-инспекторе, подписывается на топик камеры (например,
/camera/image_raw), анализирует изображение с помощью OpenCV (доступен в sandbox) и выявляет дефекты. - Обучение манипулятора: AI отправляет последовательность goal-запросов в MoveIt 2 для отработки траектории захвата деталей, записывая логи для анализа.
Почему это выгодно
Вам не нужно писать код вручную: AI-агент генерирует скрипты за секунды, адаптируясь под конкретное устройство. Не требуется ждать обновлений платформы — execute_python позволяет подключать любые системы через диалог. Это сокращает время интеграции с недель до минут и снижает порог входа для инженеров, не знакомых с ROS 2.
Заключение
Интеграция ROS 2 с ASI Biont открывает возможности для быстрого прототипирования и автоматизации роботов. AI-агент управляет навигацией, манипуляторами и сбором данных через текстовые команды, используя execute_python с библиотеками rclpy и socket. Попробуйте интеграцию на asibiont.com — опишите своё устройство в чате, и AI подключит его за минуту.
Комментарии