В предыдущей публикации, первой по счету, мы рассказали кратенько о себе, чем занимаемся и про наши планы. Получили такое количество обратной связи (и по щам тоже – все за дело, заслужили) и за все благодарны (особенно за неразрушающийся контроль).

Во-первых, была поднята тема ответственности. Эта темы и без AI тяжела, а с ним то – и подавно. Дело даже не с технологии, AI или ML, или что угодно – это просто добавление еще одного звена, который еще больше усложняет всю систему. Тема ответственности за технологию – тема особая, требующая отдельного поста или даже серии постов. Мы пока не готовы к этому, но мысли есть на тему.

У одного из членов нашей команды есть научрук, доктор технических наук Ясницкий Л.Н., автор нашумевшей в свое время статьи «По ком звонит Ansys» как раз про ответственность технологии, включая гибель людей в Трансвааль‑парке в 2004 г. Всем советуем почитать, статья больше задает вопросы, чем отвечает, но мысль такая же как и в комментах к нашей первой публикации — надо создавать методологию ответственности.

Еще страшней тема в продолжении: алгоритм минимальности числа жертв при их неизбежности и степень его повсеместного применения или внедрения. Тут впору вспомнить «не убий» в Азимовском варианте. Уточним, Айзек Азимов в своем рассказе «Хоровод» ввел четыре правила робототехники, ну их правда изначально три было, потом добавился четвертый. Если же учесть, что в некоторые немецкие автомобили встроен AI, который работает не по принципу «минимальности жертв» при неизбежном ДТП, а по «мой хозяин должен остаться в живых, так как он меня за этим и купил», то поле для рассуждения становится просто необъятным. Вернемся к нашим тросам‑канатам.

Напомним, задача была — детекция тросов на повреждения. Решать мы ее собрались разными путями и бежим, а иногда и ползем так:

  • где-то взять наборы данных повреждений и на них обучить;

  • создать наборы данных, ну и понятно, что дальше.

Ближайшие публикации – про второй путь. Как мы создавали тросы, анимировали их и симулировали повреждения.

Часть 1: Создание highpoly модели стального троса

У всех вещей в мире существует свой стандарт изготовления, принятый тем или иным государством, стальные тросы не исключение. В нашей стране данный стандарт называется ГОСТ. Для создания точной и реалистичной модели троса, мы будет опираться на ГОСТ. Для примера возьмем ГОСТ 3079-80.

Рис. 1 ГОСТ 3079-80.
Рис. 1 ГОСТ 3079-80.

Для создания модели подойдет любое ПО для трехмерной графики, но мы будем использовать Blender, вот несколько причин почему:

  • Blender бесплатный;

  • Для Blender’а существуют бесплатные аддоны, которые помогу в работе над тросом;

  • В Blender’е удобно работать с модификаторами.

Используемые аддоны и модификаторы:

  • Images as a Planes –  данное дополнение позволяет импортировать изображения и автоматически создавать плоскости с текстурами на их основе. Оно упрощает процесс создания плоскости, автоматического изменения ее размеров в соответствии с размерами изображения и создания материала с текстурой, основанной на импортированном изображении.

  • Array – модификатор создает копии базового объекта, смещенные относительно предыдущей копии на разные способы. Соседние копии могут объединяться, если их вершины находятся рядом, что позволяет создавать гладкие каркасы Subdivision Surface. Этот модификатор полезен для быстрой разработки больших сцен с использованием плиточных сеток и для создания сложных повторяющихся форм.

  • Screw –  Инструмент "Screw" комбинирует повторяющееся вращение, чтобы создать объект в форме винта или спирали.

  • Simple Deform –  Модификатор Simple Deform позволяет просто искажать объект. Он поддерживает сетки, решетки, кривые, поверхности и тексты. Искажение может быть в форме поворота (Twist, Bend) или масштабирования (Taper, Stretch). Величина искажения контролируется углом (при повороте) или коэффициентом (при масштабировании) искажения.

Работа в Blender

С помощью аддона Images as a Planes, импортируем двумерное изображение стального троса (см. рис. 1), далее открываем ГОСТ и смотрим на регламент, а именно на диаметр проволоки. В самом начале нас интересует диаметр центральной проволоки

Рис. 2 таблица размеров деталей стального троса.
Рис. 2 таблица размеров деталей стального троса.

В Blender мы создаем окружность и задаем ему параметры аналогичные табличным. После создания центральной окружности, аналогичные действия проделываем с остальными деталями троса, все так же ориентируясь на таблицу. С данным тросом выходит такая картина:

Рис. 3 Двумерное изображение троса, с созданными окружностями
Рис. 3 Двумерное изображение троса, с созданными окружностями

Далее создаем объект Empty. Затем берем самую первую окружность к центральной согласно схеме и вещаем на нее модификатор «Array». В данном случаи «Empty» и «Array» нужен для тонкой настройки вращения наших окружностей и точного выставления позиции.

Далее создаем объект Empty. Затем берем самую первую окружность к центральной согласно схеме и вещаем на нее модификатор «Array». В данном случаи «Empty» и «Array» нужен для тонкой настройки вращения наших окружностей и точного выставления позиции.

Рис. 4 Результат использования объекта «Empty» и модификатора «Array»
Рис. 4 Результат использования объекта «Empty» и модификатора «Array»

Повторяя все действия с окружностями, мы приходим к следующему результату:

Рис. 5 Результат, после повторения операций
Рис. 5 Результат, после повторения операций

Затем мы приступаем к использованию модификатора «Screw». В данной модели он нужен для создания эффекта закручивания прутьев троса, как у реального троса и для создания объема для модели.

Рис. 6 Результат, после использования модификатора «Screw»
Рис. 6 Результат, после использования модификатора «Screw»

Вновь используем модификатор «Array», «Empty», на этот раз чтобы из одного троса, у нас получилось 6. Также добавляем модификатор «Simple Deform». В данном случаи «Simple Deform» заменяет нам модификатор «Screw», так как «Screw» не умеет работать с несколькими объектами одновременно и дает странные результаты.

Рис. 7 Результат, использования модификаторов «Array», «Empty» и «Simple Deform».
Рис. 7 Результат, использования модификаторов «Array», «Empty» и «Simple Deform».

Часть 2: Создание lowpoly модели стального троса

После создания highpoly модели, у нас есть два пути:

  • Повторить все те же действия, но уже для создания lowpoly

  • Повторить метод описанный ниже.

Метод можно выбрать любой, но я рекомендую выбрать последний, так как в конечном результате все значения и положения в модели будут совпадать, как у highpoly так и lowpoly, а так же мы сократим затрачиваемое время на создание модели троса.

Все что нам нужно для создания lowpoly модели, это откатиться назад, удалив все лишние вершины и убрать не нужные модификаторы. Выполним все эти действия мы получаем такой результат:

Рис. 8 Результат, удаления ненужных вершин и отключения ненужных модификаторов
Рис. 8 Результат, удаления ненужных вершин и отключения ненужных модификаторов

Чтобы создать lowpoly из получившейся модели, нам нужно удалить половину вершин на каждой окружности, но, чтобы не делать это вручную, мы воспользуемся инструментом «Checker Deselect». Данный инструмент снимает выделение с каждой N’ой вершины и экономит нам кучу времени. После использования «Checker Deselect», нам остается только удалить выделенные вершины с объекта. Аналогичные действия повторяем с остальными окружностями и должно получиться вот так:

Рис. 9 Результат, удаления вершин с использованием инструмента «Checker Deselect»
Рис. 9 Результат, удаления вершин с использованием инструмента «Checker Deselect»

После получения такого результата, нам остается лишь повторить все вышеописанные действия и получим вот такой результат:

Рис. 10 Lowpoly модель стального троса
Рис. 10 Lowpoly модель стального троса

Итог создания троса

На этом все, после выполнения всех действий, мы получаем две модели highpoly и lowpoly. В дальнейшем highpoly мы будем использовать для различных интерфейсов или материалов, а lowpoly будет использоваться для анимации.

Часть 3: Создание анимации с использованием lowpoly модели троса

Для создания анимации мы будем использовать кривую Безье. Кривая Безье в данном проекте выбрана не случайно, она позволяет гибко и просто создавать анимацию движения и повреждения троса в сцене. А для большего контроля, к кривой Безье добавляются «Empty», они позволяют еще тоньше настраивать конкретное поведение модели при анимации. Все анимации создаются заранее в отдельном проекте и в дальнейшем просто импортируются к готовым тросам. Опять же, все это существенно сокращает время на создание повреждений для троса.

Рис. 11 Кривая Безье с «Empty» в качестве точечного инструмента управления кривой.
Рис. 11 Кривая Безье с «Empty» в качестве точечного инструмента управления кривой.

После выполнения всех действий, нам остается только проверить как ведется себя трос при использовании кривой и сохранить проект, для дальнейшего рендера.

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


  1. plFlok
    27.07.2023 11:46
    +1

    1. Этап с анимацией выглядит как мем про рисование совы.

    2. А точно ли нужны все внутренние провода, которых никто с внешней стороны не увидит? Их полигоны тратят ресурсы видеокарты, и в зависимости от движка рендера могут приводить к значительным тратам времени. Или тут вопрос времени не стоит, его хватает с запасом?


    1. AlterEgoAI Автор
      27.07.2023 11:46

      Это ж стадия а-ля НИОКР, создаем технологию, до оптимизации еще далеко.


  1. Grey83
    27.07.2023 11:46
    +4

    Это всё конечно хорошо, но вроде навивка стаек идёт в другом направлении: визуально выступающие наружу проволочки стаек направлены вдоль каната, а не поперёк, в отличие от замоделеных примеров.
    Это сделано, чтобы трос меньше изнашивался при трении. Ну и меньше перетирал то, о что трётся.
    Может ещё какие причины имеются.


    1. Stalker_RED
      27.07.2023 11:46

      Чтобы меньше был пружиной, и больше тросом. Ну и главное - чтобы не расплетался. Верёвки, кстати, тоже так вьют, на каждом шаге увеличения направление скручивания меняют.


    1. Serge78rus
      27.07.2023 11:46

      Бывают и такие, и такие. Описанное Вами направление свивки обеспечивает большую прочность, такие тросы меньше закручиваются под нагрузкой и гораздо больше распространены. Тросы с направлением свивки, как на картинках в статье, более гибкие, но менее прочные и встречаются гораздо реже.


      1. Grey83
        27.07.2023 11:46

        Тогда понятно почему я ни разу не видел на работе таких как в статье.
        А они у нас используются разного диаметра (примерно от 5мм до 5см).


        1. Serge78rus
          27.07.2023 11:46
          +1

          Как в статье я тоже в руках ни разу не держал а видел только на картинках в книжках. А посплетать стальные тросы в свое время пришлось изрядно.


  1. mec88
    27.07.2023 11:46
    +2

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

    А вот поперечное сечение в виде окружности будет в сечении, представляющем собой нормаль к винтовой линии каждой из проволочек


    1. AlterEgoAI Автор
      27.07.2023 11:46

      Понимаем. У нас пока задача другая - нет датасетов, нет реальных повреждений троса. Симуляция повреждений и формирование датасетов с гипотезой: увидят ли нейронки повреждения реальные на симулированных данных. Как увидят, что увидят, как это можно будет интерпретировать.


      1. plFlok
        27.07.2023 11:46

        то есть верно понимаю, что гипотеза ещё не проверена, и цикл статей может завершиться выводом "всё написанное не работает"?


        1. AlterEgoAI Автор
          27.07.2023 11:46

          Эдакий вы пессимист. Байку про Эдисона и лампочку знаете ж. Если о гипотезе - видит/не видит, то большую часть повреждений видит. Заказчику же чаще надо не такую логику, а процент наступления того или иного повреждения. И если уменьшение диаметра можно померить, то как оценить например 32% повреждения "эффект бурунда". Создаем систему, которая не просто видит/не видит, а в процентом соотношении показывает степень повреждения.