Прибыль:
- Способность ставить и решать задачи прямой/обратной кинематики и планирования траектории с помощью ИИ.
- Способность создавать безопасную орбиту, указывая пределы суставов робота, ограничения по скорости и ускорению в качестве контекста подсказки.
- Способность численно и физически проверять кинематические и траекторные выходные данные, создаваемые ИИ.
Перемещение захвата на конце руки робота в определенную точку пространства в определенной ориентации; Звучит просто, но за этим стоят кинематические уравнения, совместные пределы, особенности и планирование траектории. Здесь инженер-мехатроник совместно использует тригонометрию, линейную алгебру и теорию управления. Искусственный интеллект является мощной помощью в этом процессе: он может создавать уравнения прямой кинематики, предлагать подходы к решению обратной кинематики, параметризовать траекторию в соответствии с ограничениями скорости/ускорения. Однако робототехника — одна из областей мехатроники с наибольшим физическим риском; Если последовательность углов, сгенерированная ИИ, будет отправлена роботу без проверки, рука может ударить себя, окружающую среду или оператора. В этом разделе мы увидим, как настроить и проверить кинематику и планирование траектории с помощью ИИ.
Прямая и обратная кинематика
Прямая кинематика (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}}"
Верификация: от моделирования к роботу
Траектория, сгенерированная ИИ, перед отправкой к роботу проверяется в следующем порядке:
- Числовой: находятся ли угол сустава, скорость и ускорение каждого шага в допустимых пределах?
- Столкновение: сталкивается ли рука по траектории с самой собой или с окружающей средой (визуализируйте/смоделируйте, если возможно)?
- Сингулярность: проходит ли орбита через область сингулярности (приближается ли определитель Якоби к нулю)?
- Медленный тест оборудования: управляйте роботом на низкой скорости (например, 10%) и контролируйте его визуально.
- Постепенное увеличение скорости: после того, как все проверено, скорость постепенно увеличивается до номинального значения.
Внимание: при первом запуске робота по новой траектории скорость всегда должна быть низкой, а аварийный останов должен быть доступен. Даже если выходные данные AI «математически верны», смещение, обратная ось или зацепка кабеля в физической настройке будут выявлены только при медленном тестировании.
Мини-кейс
Инженер по автоматизации Эдже запрашивает у ИИ код траектории в совместном пространстве для приложения захвата и размещения. ИИ создает трапециевидный профиль, но когда Ece тестирует перемещение на короткое расстояние, она видит, что время отрицательное: код не обработал случай треугольного профиля, когда v_max не может быть достигнут. Эдже исправляет это, сообщая подсказку: «Если расстояние небольшое, попадите в треугольный профиль». Затем он проверяет углы сочленения, заданные ИИ, через свою функцию проверки на соответствие своей собственной таблице пределов и обнаруживает, что сочленение 5 в одной точке требовало +125°, тогда как предел составлял +120°. Он перепланирует траекторию и контролирует ее, на этот раз управляя роботом со скоростью 10%. В первом раунде он видит, что захватчик приближается к столу слишком близко, и корректирует смещение по оси Z. ИИ вернул рабочий контур за считанные минуты; но три отдельные проверки (треугольный профиль, ограничение соединения, медленный тест) выявили три отдельные реальные проблемы.
Распространенные ошибки
- Использование решения ИК без совместных ограничений и контроля доступа.
- Не обрезать записи arccos/arcsin, а выдавать NaN в случае ошибки округления.
- Вывод на орбиту без ограничения скорости/ускорения и создания механического удара.
- Игнорирование зон сингулярности и резкое увеличение совместных скоростей.
- Пропуск перехода трапециевидно-треугольного профиля на короткой дистанции и неверный расчет времени.
- Проведение первого орбитального испытания на полной скорости и без доступа к аварийному останову.
В заключение
- Прямая кинематика имеет единственное решение; обратная кинематика может давать множественные, несуществующие или бесконечные решения.
- Решения ИК обязательно фильтруются с точки зрения совместных ограничений, доступности и уникальности.
- Планирование траектории; Он использует мягкие, совместимые с ограничениями профили, такие как трапециевидная или S-образная кривая.
- На небольшом расстоянии профиль меняется с трапециевидного на треугольный; это должно быть обработано в коде.
- ИИ ускоряет математические вычисления; В подсказке должны быть указаны ограничения и контекст физической установки.
- Новая траектория всегда выполняется впервые с низким передаточным числом и доступным аварийным остановом.
Задача приложения
Выберите двух- или трехсуставную модель руки (с реальной или мнимой длиной звеньев и ограничениями на суставы). Попросите ИИ сгенерировать обратную функцию кинематики и планировщик траектории с этим контекстом. Затем: (1) вручную сверьте выходной сигнал ИК с известной целью (вы возвращаете углы и возвращаетесь в ту же точку, что и ФК), (2) проверьте, что код захватывает их, указав хотя бы одну недоступную точку и один предел соединения, превышающий цель, (3) проверьте, что на коротком расстоянии орбитальное время оказывается разумным. Запишите, сколько проблем с проверкой вы обнаружили в первой версии кода и на каком уровне была обнаружена каждая из них.