Единица 2 / 9

Искусственный интеллект в робототехнике и управлении движением

Прибыль:

  • Способность ставить и решать задачи прямой/обратной кинематики и планирования траектории с помощью ИИ.
  • Способность создавать безопасную орбиту, указывая пределы суставов робота, ограничения по скорости и ускорению в качестве контекста подсказки.
  • Способность численно и физически проверять кинематические и траекторные выходные данные, создаваемые ИИ.

Перемещение захвата на конце руки робота в определенную точку пространства в определенной ориентации; Звучит просто, но за этим стоят кинематические уравнения, совместные пределы, особенности и планирование траектории. Здесь инженер-мехатроник совместно использует тригонометрию, линейную алгебру и теорию управления. Искусственный интеллект является мощной помощью в этом процессе: он может создавать уравнения прямой кинематики, предлагать подходы к решению обратной кинематики, параметризовать траекторию в соответствии с ограничениями скорости/ускорения. Однако робототехника — одна из областей мехатроники с наибольшим физическим риском; Если последовательность углов, сгенерированная ИИ, будет отправлена ​​роботу без проверки, рука может ударить себя, окружающую среду или оператора. В этом разделе мы увидим, как настроить и проверить кинематику и планирование траектории с помощью ИИ.

Прямая и обратная кинематика

Прямая кинематика (FK): определение положения и ориентации рабочего органа, если известны углы суставов. Есть только одно решение, оно прямое.

Обратная кинематика (IK): если известно желаемое положение конечной функции, нахождение углов соединения, которые это обеспечат. Обычно оно имеет более одного решения (например, локоть вверх/вниз), иногда не имеет решений (недостижимая точка), иногда имеет бесконечное количество решений (сингулярность).

концепция

ввод

вывод

Количество решений

Передняя кинематика

углы суставов

Крайнее положение/ориентация

одинокий

Обратная кинематика

Крайнее положение/ориентация

углы суставов

Множественный/нет/бесконечный

Для двухшарнирного плоского рычага инверсную кинематику можно настроить в AI и проверить вручную следующим образом:

import numpy as npdef inverse_kinematik_2r(x, y, L1, L2): """IK для плоского рычага с двумя суставами. Возвращает углы в радианах (решение с локтем вниз).""" r2 = x**2 + y**2 # Проверка доступности: находится ли точка в рабочей области? if np.sqrt(r2) > (L1 + L2) или np.sqrt(r2) < abs(L1 - L2): поднять ValueError("Точка находится за пределами доступного рабочего пространства") cos_t2 = (r2 - L1**2 - L2**2) / (2 * L1 * L2) cos_t2 = np.clip(cos_t2, -1.0, 1.0) # numericsecurity t2 = np.arccos(cos_t2) # локоть вниз t1 = np.arctan2(y, x) - np.arctan2(L2*np.sin(t2), L1 + L2*np.cos(t2)) return np.grades(t1), np.grades(t2)# Проверка: L1=L2=1, target (1,1) -> ожидаемый t2=90 градусовпринт(inverse_kinematik_2r(1.0, 1.0, 1.0, 1.0)) # ~ (0.0, 90.0)

Здесь ИИ часто пропускает критические строки: проверка достижимости (это точка в рабочей области) и `np.clip` (предотвращает выход входных данных arccos за пределы ±1 из-за ошибки округления). Без этих двух защит код выдаст NaN или произойдет сбой в недопустимой точке.

Совет: запрашивая IK-разрешение, четко скажите ИИ «добавить контроль доступности и ограничить ввод arccos клипом». Эти две строки предотвращают неявные ошибки, которые вызывают больше всего головной боли в полевых условиях.

Совместные ограничения, сингулярность и множественные решения

Каждое сочленение реального робота имеет диапазон углов (например, от -170° до +170°), ограничение скорости и ограничение ускорения. Даже если IK дает математически допустимый угол, его нельзя использовать, если этот угол находится за пределами физического диапазона сустава. Кроме того, в некоторых конфигурациях робот попадает в сингулярность: две оси совмещены, теряется одна степень свободы, а скорости суставов пытаются уйти в бесконечность при небольшом движении кончика.

Вот почему одного HR-решения недостаточно; Каждое решение должно пройти фильтр приемлемости:

def Solution_gecerli_mi(acilar_deg, limit_deg): """ боли: [t1,t2,...], пределы: [(min,max),...]""" для боли, (amin, amax) в zip(acilar_deg, Limits_deg): если нет (amine <= Pain <= amax): return False, f"Превышен лимит сустава: {pain:.1f} градус ({amine},{amax}) кроме" return True, "OK"limits = [(-170, 170), (-120, 120)]print(cozum_valid_mi([0.0, 90.0], пределы)) # (True, 'OK')print(cozum_valid_mi([0.0, 150.0], пределы)) # (False, 'Joint limit) превысил...')

ИИ может дать «математическое» решение ИК; но совместные ограничения и предотвращение сингулярностей специфичны для вашей системы и должны быть указаны в контексте подсказки.

Планирование орбиты

Чтобы доставить робота из точки А в точку Б, нужно не провести прямую линию между двумя углами. Резкое изменение скорости вызывает механические удары и вибрацию. Вместо этого используются мягкие профили: трапециевидный профиль скорости (постоянное ускорение – постоянная скорость – постоянное замедление) или S-образная кривая (более плавная, где ускорение также ограничено). Заставляя ИИ генерировать траекторию, вы должны указать цель, продолжительность и ограничения.

import numpy as npdeftrapez_yorunge(q0, q1, v_max, a_max, dt=0.01): """Профиль трапецеидальной скорости для одного сустава. Возвращается массив позиций.""" distance_speed > distance: # треугольный профиль (v_max недостижим) t_speed = np.sqrt(distance / a_max) t_constant = 0,0 v_peak = a_max * t_speed else: t_constant = (distance - 2 * distance_speed) / v_max v_peak = v_max T = 2 * t_accelerate + t_constant t = np.arange(0, T, dt) # ... расчет позиции для каждого t (на основе фаз ускорения/постоянного/замедления) return t, T, v_peak, длительность, vz = трапециевидная_траектория(0.0, 90.0, v_max=60.0, a_max=120.0)print(f"Общая длительность: {duration:.3f} с, пиковая скорость: {vz:.1f} град/с")

Логическая проверка здесь такая: если расстояние небольшое, мотор никогда не достигнет v_max и профиль из трапециевидного превратится в треугольный. Если ИИ пропустит это условие, для коротких движений будет рассчитана неверная длительность. В этом можно убедиться, протестировав код с известным значением (например, очень коротким расстоянием).

Слабая подсказка/Сильная подсказка

СЛАБЫЙ: «Напишите траекторию, которая доставит руку робота из A в B». (Нет ограничений: ограничение скорости? ускорение? расстояние между суставами? Слепой вывод.) СИЛЬНЫЙ: «Создайте двухточечную траекторию в пространстве суставов для 6-осевого робота. Предел скорости для каждого сустава — 90 град/с, предел ускорения — 180 град/с^2, диапазон углов указан в таблице. Используйте трапецеидальную скорость. профиль, если расстояние небольшое, попадает в треугольный профиль. Выходные данные каждого соединения также напишите функцию проверки, которая проверяет, что оно не превышает пределы соединения: {{table}}"

Верификация: от моделирования к роботу

Траектория, сгенерированная ИИ, перед отправкой к роботу проверяется в следующем порядке:

  1. Числовой: находятся ли угол сустава, скорость и ускорение каждого шага в допустимых пределах?
  2. Столкновение: сталкивается ли рука по траектории с самой собой или с окружающей средой (визуализируйте/смоделируйте, если возможно)?
  3. Сингулярность: проходит ли орбита через область сингулярности (приближается ли определитель Якоби к нулю)?
  4. Медленный тест оборудования: управляйте роботом на низкой скорости (например, 10%) и контролируйте его визуально.
  5. Постепенное увеличение скорости: после того, как все проверено, скорость постепенно увеличивается до номинального значения.
Внимание: при первом запуске робота по новой траектории скорость всегда должна быть низкой, а аварийный останов должен быть доступен. Даже если выходные данные AI «математически верны», смещение, обратная ось или зацепка кабеля в физической настройке будут выявлены только при медленном тестировании.

Мини-кейс

Инженер по автоматизации Эдже запрашивает у ИИ код траектории в совместном пространстве для приложения захвата и размещения. ИИ создает трапециевидный профиль, но когда Ece тестирует перемещение на короткое расстояние, она видит, что время отрицательное: код не обработал случай треугольного профиля, когда v_max не может быть достигнут. Эдже исправляет это, сообщая подсказку: «Если расстояние небольшое, попадите в треугольный профиль». Затем он проверяет углы сочленения, заданные ИИ, через свою функцию проверки на соответствие своей собственной таблице пределов и обнаруживает, что сочленение 5 в одной точке требовало +125°, тогда как предел составлял +120°. Он перепланирует траекторию и контролирует ее, на этот раз управляя роботом со скоростью 10%. В первом раунде он видит, что захватчик приближается к столу слишком близко, и корректирует смещение по оси Z. ИИ вернул рабочий контур за считанные минуты; но три отдельные проверки (треугольный профиль, ограничение соединения, медленный тест) выявили три отдельные реальные проблемы.

Распространенные ошибки

  • Использование решения ИК без совместных ограничений и контроля доступа.
  • Не обрезать записи arccos/arcsin, а выдавать NaN в случае ошибки округления.
  • Вывод на орбиту без ограничения скорости/ускорения и создания механического удара.
  • Игнорирование зон сингулярности и резкое увеличение совместных скоростей.
  • Пропуск перехода трапециевидно-треугольного профиля на короткой дистанции и неверный расчет времени.
  • Проведение первого орбитального испытания на полной скорости и без доступа к аварийному останову.

В заключение

  • Прямая кинематика имеет единственное решение; обратная кинематика может давать множественные, несуществующие или бесконечные решения.
  • Решения ИК обязательно фильтруются с точки зрения совместных ограничений, доступности и уникальности.
  • Планирование траектории; Он использует мягкие, совместимые с ограничениями профили, такие как трапециевидная или S-образная кривая.
  • На небольшом расстоянии профиль меняется с трапециевидного на треугольный; это должно быть обработано в коде.
  • ИИ ускоряет математические вычисления; В подсказке должны быть указаны ограничения и контекст физической установки.
  • Новая траектория всегда выполняется впервые с низким передаточным числом и доступным аварийным остановом.

Задача приложения

Выберите двух- или трехсуставную модель руки (с реальной или мнимой длиной звеньев и ограничениями на суставы). Попросите ИИ сгенерировать обратную функцию кинематики и планировщик траектории с этим контекстом. Затем: (1) вручную сверьте выходной сигнал ИК с известной целью (вы возвращаете углы и возвращаетесь в ту же точку, что и ФК), (2) проверьте, что код захватывает их, указав хотя бы одну недоступную точку и один предел соединения, превышающий цель, (3) проверьте, что на коротком расстоянии орбитальное время оказывается разумным. Запишите, сколько проблем с проверкой вы обнаружили в первой версии кода и на каком уровне была обнаружена каждая из них.