Я хотел написать этот пост год назад, но, как показала практика, тогда было еще рано. А вот сейчас — самое оно.

С самого появления LLM мне было любопытно: справятся ли они с какими-нибудь еще инженерными задачами, помимо генерации кода? Лет шесть назад я сделал DIY-роборуку, о чем написал свою первую статью на Хабре. Самым трудоемким этапом создания руки было конструирование URDF-модели для ROS: нужно было правильно поскейлить все STL-модельки, покрутить их в пространстве, описать степени свободы и соединения. И все это — в неудобном текстовом формате, без возможности накидать хотя бы черновик руками через UI.

В результате эта работа заняла у меня тогда несколько дней. И не потому, что ее настолько много, а потому что она довольно быстро изматывала.

И вот я решил испытать на этой задаче современные LLM. На входе имеем папку со STL-модельками и знание о том, что из них можно собрать аналог роборуки PhantomX Pincher Robot Arm Kit Mark II.

Вот какой промпт я прогнал год назад на Sonnet 4, Opus 4, Gemini 2.5 и GPT-4.1:

Представь, что ты опытный инженер-робототехник. В папке /Documents/ROS_projects/Robot Arm For AX-12A Dynamixel Actuators - 166430 лежат файлы STL для Robot Arm For AX-12A Dynamixel Actuators. Это макеты самодельной роборуки, которая копирует модель PhantomX Pincher Robot Arm Kit Mark II. Сделай из этих STL-файлов URDF для ROS2, чтобы можно было использовать его с пакетом MoveIt!

Не помню, кто из них справился лучше, но вот результат от тогдашнего чемпиона.

Роборука в сборе! Ну, почти
Роборука в сборе! Ну, почти

Случайные детали выстроены в случайном порядке. Но хотя бы в одну линию!

Сама LLM объяснила свою неудачу тем, что разбирать формат STL нативно она не может и использует python-скрипты, чтобы собрать информацию о соединяемых деталях. Видимо, информации из этих скриптов оказалось недостаточно.

Я тогда расстроился и забросил эту затею. Вернулся к ней только на днях — прошел ровно год.

Я задал точно такой же промпт, но теперь в качестве испытуемых у меня Opus 4.8 и Fable 5.

Начал я с Опуса. Он благополучно нашел информацию по PhantomX Pincher и проделал первую часть неприятной рутинной работы: поскейлил детальки.

Opus 4.8 понимает суть задачи
Opus 4.8 понимает суть задачи

После чего четко описал, какая деталька для чего нужна. Это уже победа — ведь год назад детальки были накиданы в случайном порядке.

Opus 4.8 разобрался с назначением деталек
Opus 4.8 разобрался с назначением деталек

Но дальше — самое главное. Опус понял, что детальки в STL-файлах повернуты так, чтобы их было удобно печатать, а не собирать. И да, их придется повращать и подвигать. Все это делалось, конечно же, тоже с помощью питонячьих скриптов. Читать STL нативно модель по-прежнему не умеет (да и не должна, наверное).

Ок. Попыхтев еще немного, Опус выдал финальный результат. Вот что получилось:

Уже сильно лучше, чем год назад, но:

- клешня сверху повернута криво и мимо направляющих, по которым она должна ездить;
- моторчики повернуты неправильно;
- все сочленения вращаются не по тем осям, по которым должны.

Ладно. Я включил вместо Опуса его старшего брата — Fable 5 — с запросом: «Посмотри, что тут не так, и поправь».

Fable довольно четко определил проблемы.

Fable 5 нашел проблемы Опуса
Fable 5 нашел проблемы Опуса

Он перевернул моторчики и даже правильно прицепил к ним оси вращения. Однако сами звенья роборуки развернуть забыл.

Ошибки Fable 5
Ошибки Fable 5

Я решил не утруждать себя текстовым объяснением и просто послал ему этот самый скриншот с комментарием: «Посмотри на картинку и реши проблему с соединением».

И вот тут Fable превзошел мои ожидания: по скриншоту он абсолютно четко диагностировал проблему.

После исправления получилось следующее:

Очевидно, что итоговый URDF все еще нужно дорабатывать напильником. И да, это можно было бы делать, так же кидая Fable скриншоты. Но это уже микрооптимизация — быстрее просто доправить все руками.

Итого: вместо нескольких дней монотонной и откровенно скучной работы можно получить такую же функциональную 3D-модель всего за пару часов.

В интересное время живем…

Комментарии (3)


  1. AleGen
    29.07.2026 04:35

    Ну вот, слил Скайнету часть тела его исполнителя, приблизил большой П.

    /s


  1. zenin_feodor_vladimirovic
    29.07.2026 04:35

    Считаю что для общения с LLM нужно проработать промт начиная с такого шаблона:[ROLE]Robotics_URDF_Architect|MODE:ParanoidCompressor|SYN:Caveman+DSL|CORE:TRUTH>FLUFF|!HALLUC|SEC>ALL[PIPE]1.INGEST→Acknowledge_!native_STL_reading→Generate_Python_Script(trimesh/urdfpy)→Extract_BBox/CoM/Principal_Axes_of_all_parts 2.ROUTE→Map_Kinematic_Chain(Parent→Child→Joint_Type→Axis_xyz_rpy) 3.COMPRESS→Assemble_Valid_URDF(ROS2/MoveIt!_compatible) 4.VERIFY→Check_Collision_Meshes|Visual_Offsets|Joint_Limits 5.OUT→Strict_DSL_Output[CONSTRAINTS]!invent_dimensions|!random_alignment|IF_misalignment_detected→Analyze_Provided_Screenshot→Diagnose_Rotation/Axis_Error→Correct_Transformation_Matrices[RULES]1.Joints:Define_exact_xyz_rpy_offsets_based_on_extracted_CoM 2.Links:Reference_STL_paths_relative_to_package:// 3.Safety:Include_collision_tags_matching_visual_meshes 4.Iteration:IF_error→Output_DEBUG_Python_Script_to_verify_axes→Await_User_Feedback[OUTPUT_FMT]Compact_XML|No_Markdown_Tables|ASCII_Comments_Only|Single_Line_Response


    1. mironov_vlad Автор
      29.07.2026 04:35

      Абсолютно согласен, промпт надо тюнить. Если бы я сильно заморочился, то возможно и год назад вышло бы что-то более похожее на роборуку. Но поскольку задача была единоразовая (я же не делаю роборуки на конвейере), хотелось получить максимальную экономию времени при наивном подходе.