КонтрCAD
2 поста
2 поста
Приветствую сообщество! Почему-то в последние пару лет я упорно не замечал, что Autodesk ушел из России (шутка), но постоянно обновлял свой любимый Fusion 360 через боль и страдания. Параллельно со мной страдали некоторые мои товарищи, практически все мои обучающиеся, да и думаю много кто ещё. Дополнительной проблемой стал перевод пары учебных аудитории на Ubuntu, а Fusion 360 существует исключительно для Windows, и костыли через wine работают криво. Единственная бюджетная (бесплатная) альтернатива, это FreeCAD, но интерфейс у него не самый дружелюбный, особенно для школьников.
Идея появилась совершенно случайно, за разговором с коллегами. А почему бы не написать простенький 3D-редактор для моделирования под 3D-печать. С простым интерфейсом и работой прямо в браузере. Целился я в нечто среднее между Tinkercad и Fusion360. Так появился КонтрCAD.
Главная цель была в формировании правильной инженерной логики и понимания принципов работы операций в САПР.
Изначально планировалось, что дети впоследствии перешли бы на более продвинутый САПР (например, Компас). Но в итоге получилось, что можно работать в моём редакторе с начальных и до старших классов.
Вводные были следующие:
Простой интерфейс, интуитивно понятный (насколько это возможно) даже ребёнку.
Библиотека примитивов, чтобы младшим было полегче осваиваться.
Чертеж (желательно похожий на fusion) и базовые САПР-инструменты (выдавливание, вращение, выдавливание по траектории).
И все это максимально доступное, желательно вообще без установки.
А главное - работа на клиенте, дабы ограничить нагрузку на сеть и сервер (изначально у проекта сервера вообще не было).
Естественным выбором в этом случае стало js-приложение.
1. Простой редактор с кучей багов.
2. Переписывание всей логики на параметрическую, написано параметрическое ядро. Хранение проектов сделано в виде списка операций с параметрами (с возможностью удалить, редактировать, или добавить операцию).
3. Опять переписывание всего редактора полностью с целью перехода на ES6 модульную архитектуру.
4. Переписывание чертежа полностью для перехода на сущности (линия, окружность, дуга и т.д.), внедрения параметризации, системы ограничений и вариационного решателя.
5. Реализация серверной части (API и сайта). Предыдущие пункты были в том числе подготовительные, поэтому редактор был практически готов к этому.
На js не очень много библиотек для работы с графикой, наиболее популярная на данный момент three.js. Эта библиотека используется для всей визуализации, а также импорта и экспорта.
Сначала я пробовал работать с геометрией тоже через three.js, но у нее не самые надёжные алгоритмы, и реализация геометрических методов достаточно простая.
Поэтому я перешёл на manifold-3d. Эта супер-библиотека гарантирует манифолдный (водонепроницаемый) результат, имеет продвинутые геометрические функции и очень быстро работает. Это wasm сборка очень популярной библиотеки manifold, написанной на c++, благодаря этому она и намного быстрее. Она отвечает за бинарные операции, а также Extrude и Revolve. Многие другие алгоритмы пришлось реализовывать своими силами.
Ну про разработку я много где писал, про техническую часть выходят статьи на Хабре (сейчас немного его забросил, но новые статьи обязательно будут, и не одна).
Окно редактора на первый взгляд напоминает Tinkercad, но пусть вас это не вводит в заблуждение.
Сверху панель инструментов с расставленными по группам кнопками:
1. Файловые операции.
2. Назад/вперёд (операции истории).
3. Операции создания.
4. Операций модификации.
5. Инспектирование.
Справа расположено меню с 4 вкладками:
1. Библиотека.
2. Свойства.
3. Список объектов на сцене.
4. История.
Любую вкладку можно закрепить по умолчанию. Соответственно, если вам не нравится детский вид библиотеки, можно просто закрепить список объектов.
Общего гизмо для перемещения, поворота и масштабирования намеренно нет, как раз для формировании правильной инженерной логики. Чтобы обучающийся понимал, что для разных операций требуются разные инструменты.
Также в этих инструментах есть дополнительные настройки.
Но перемещать объекты можно и указателем, правда не все. Для перемещения доступны все 3D-объекты, кроме плоскостей (чертёж и рабочая плоскость). Это сделано для защиты от случайных перемещений.
Но если нужно, плоскости тоже можно переместить, достаточно включить инструмент "Перемещение".
Логику TinkerCAD с объектами-отверстиями я намеренно не стал делать. Во-первых, она мне просто не нравится, а во-вторых, я не люблю бездумно что-то копировать. На мой взгляд она в принципе нарушает логику построения модели через операции. Ни в одном взрослом САПР вы такого не найдете, и ребенку при переходе на них приходится менять логику мышления. А не лучше ли сразу учить правильно?
Поэтому бинарные операции как во взрослых САПР разделены.
А если надо как-то изменить операцию, с этим отлично справляется параметрическая история.
Как я уже сказал, проект - это просто список операций с параметрами, а при запуске проекта модель заново строится по этому списку. Можно без труда добавить или удалить операцию из любого места истории. Модель автоматически перестоится. Многие операции поддерживают редактирование параметров. Да можно даже открыть файл проекта в блокноте и отредактировать.
LLM с таким форматом тоже хорошо дружат, поэтому в будущем с высокой долей вероятности появится и генерирование деталей.
Дабы перемещение по истории не тормозило, в версии 0.9.63 я наконец добавил кэшировние операций.
Проекты можно сохранять в файлы, открывать из файла, импортировать из файла в текущий проект. Ограничений нет.
А также можно хранить проекты непосредственно в самом редакторе при помощи хранилища проектов.
Хранилище может хранить проекты локально на компьютере (в IndexsedDB) и в облаке.
Локально даже у неавторизованных пользователей есть возможность хранить до десяти проектов.
Для хранения в облаке требуется аккаунт и достаточный уровень доступа (к сожалению, на данный момент дать всем место для хранения я не могу себе позволить. Пока облако доступно лишь спонсорам).
Для импорта доступны stl и obj. Экспорт 3D-моделей доступен в кучу форматов.
Если бы не было чертежа, я бы не называл этот редактор САПРом :)
Чертеж появился в самой первой версии. Изначально чертеж был простой чертилкой, даже размеров не было. Главная проблема была в сущностях (точнее в их отсутствии ). Фигуры рисовались сразу готовые, а не из набора примитивов.
Постепенно я пришел к выводу, что в таком виде он не перспективен, и нужно все переделывать (хоть и не хотелось). На js я подходящей реализации чертежа не нашел (хотя и не то чтобы очень активно искал), поэтому решил написать геометрическое ядро, вариационный решатель и систему ограничений самостоятельно.
После этого чертеж стал параметрическим, при изменении какого-либо параметра (размера, угла и т.д.) пересчитывается и все остальное, как и в большинстве САПР. Большинство ограничений устанавливаются автоматически. Размерные ограничения ставятся аналогично Fusion 360 (при вводе значения во всплывающее поле).
Как раз после этого обновления я и начал называть свой редактор САПР, по моему мнению ранее он до такого звания не дотягивал, хотя был уже на несколько голов мощнее TinkerCAD.
В итоге получился вполне стандартный для САПР режим чертежа, даже наверное интуитивно понятнее и удобнее, чем у других.
Появилось большинство стандартных инструментов:
Множество фигур;
Линейный (скорее квадратный) и круговой массивы;
Отступ;
Ножницы;
Скругление;
И множество геометрических ограничений.
Если нужно, можно чертить и с 3D-видом. И даже с перспективной камерой.
Чертеж, какой бы он крутой не был, не имеет смысла без дальнейших операций. В КонтрCAD есть классические: выдавливание (Extrude), вращение (Revolve) и недавно появилось выдавливание по траектории (Sweep). Скоро появится Loft.
Все эти инструменты позволяют выбрать, какую область чертежа вы хотите использовать. При черчении эти области заливаются разными цветами, а при наведении указателем, со включенным инструментом, подсвечиваются.
Выдавливание позволят выдавить выделенные области чертежа в выбранном направлении (наружу, внутрь или в обе стороны). Можно применить сразу операцию объединения и вычитания. Также можно выдавливать грани объектов, тогда сразу включается операция "Объединение".
Помимо этого, выдавливание поддерживает скручивание и задание конусности.
Выдавливание по траектории позволяет тоже выдавить выделенные области чертежа, но уже не просто в какую-то сторону, а по заданной траектории. Траекторию нужно тоже нарисовать на чертеже.
Вращение поворачивает выделенные области чертежа вокруг заданной оси. В основном используется для создания круглых объектов.
У меня изначально была идея сделать не просто редактор, а полноценную облачную платформу с хранением проектов в облаке, работой в группах и прочими плюшками. Немного доработав чертеж, я перешел к этой задаче. Изначально запустил сервис КонтрCAD Cloude.
Но потом выкупил домен kontrcad.ru, и решил его уже переделать в полноценный сайт проекта.
Естественно, помимо описанного есть множество других инструментов. Есть 3D и 2D текст с загрузкой собственных шрифтов, загрузка изображений, генераторы шестерней и резьбы (генератор резьбы, на мой взгляд, вообще один из самых продвинутых, он её еще и нарезать умеет), 3D-текстурирование (про него была прошлая статья). Все в один пост не вместить.
Попробовать можно online, без регистрации и совершенно бесплатно: https://www.kontrcad.ru/
Новости об обновлениях в основном выходят в Telegram и ВК. Краткий список всех обновлений и планов на будущее есть в дорожной карте.
Поддержать разработку можно на boosty и ВК. Спонсоры проекта сейчас первыми получают ключ доступа к облачным функциям.
Буду благодарен за медийную поддержку, обратную связь, сообщения об ошибках и предложения по развитию :)
Доброго времени суток друзья. Вот уже пол года я веду разработку КонтрCAD - это браузерный 3D‑САПР (система автоматизированного проектирования) для моделирования, в первую очередь под 3D‑печать. Я его разработал как доступную альтернативу TinkerCAD и Fusion360 (целился я в нечто среднее). За это время добавлена куча крутых возможностей, и скоро об этом будет отдельный пост, а пока я решил рассказать об одном из последних обновлений:
После появления BumpMesh, минимум человек пять мне написали с просьбой добавить аналогичный инструмент в КонтрCAD. Я долго откладывал реализацию этого инструмента, так как были более приоритетные задачи. Но вот очередь дошла и до него!
Инструмент 3D-текстурирования поверхности позволяет изменить геометрию модели на основе текстуры для получения рельефной поверхности, что позволяет скрывать швы и слои. Можно наложить текстуру как на весь объект, так и по маске.
Лукавить не буду, принципы я подсмотрел у BumpMesh, но реализацию я написал собственную. Она немного проще, но почти такая же функциональная.
А учитывая, что этот инструмент интегрирован в САПР, возможности появляются впечатляющие.
Можно покрутить вживую: https://www.kontrcad.ru/public/project/proj_1784631797487_fc985847-960a-4eae-a29c-c5ebaf46e47c
1. Включаете инструмент.
2. Загружаете текстуру или выбираете встроенную. Можно регулировать масштаб, поворот и смещение текстуры. У встроенных текстур (они генерируемые) можно настроить разрешение и частоту повторов. Также можно настроить размытие текстуры.
Параметром "Сила" можно регулировать величину смещения вершин. Если задано 1мм, то вершины сместятся в указанную сторону на 1мм.
По умолчанию наложена трипланарная проекция текстуры на весь объект. Аналогично BumpMesh, помимо трипланарной есть ещё плоская (с выбором направления), сферическая и цилиндрическая проекции.
3. Если нужно накладывать не на весь объект, можно использовать маскирование. Маску можно наложить заливкой (с настройкой чувствительности) и кистью. Но кисть работает по исходной геометрии, если треугольников было не много, то работать будет не очень точно (лучше использовать заливку)
Не могу не упомянуть про минусы такой технологии текстурирования, они у всех инструментов 3D-текстурирования одинаковые.
Главный минус - это существенное усложнение геометрии. Без разбивки модели на кучу, нет, КУЧУ мелких треугольников, такое текстурирование не осуществить. Соответственно, на модели появляются тысячи, а то и миллионы треугольников. Модель становится существенно тяжелее (легко может дорасти до 100 и более Мб.), увеличивается и длительность операции с ней.
Поэтому я занялся этим инструментом только после внедрения кэширования в параметрическую модель. Иначе после пары операций текстурирования ждать отмены операций пришлось бы вечность. Но даже так первичное построение модели (при открытии проекта), или перестроение со сбросом кэша (при редактировании операции) занимает время.
В рамках САПР, в таком случае, я советую просто отделить от основной модели часть, на которую нужно наложить текстуру, а потом бинарной операцией присоединить обратно.
Основная фишка КонтрCAD - как раз нативная поддержка STL, соответственно, вы можете закинуть модель в редактор не только для текстурирования поверхности, но и для любой другой работы.
Попробовать можно online, без регистрации и совершенно бесплатно: https://www.kontrcad.ru/
Поддержать разработку можно на boosty и ВК. Спонсоры проекта сейчас первыми получают ключ доступа к облачным функциям.
Буду благодарен за медийную поддержку, обратную связь, сообщения об ошибках и предложения по развитию :)
В этом году я планировал открыть свой образовательный центр технической направленности (по большому счету кружек робототехники и программирования с продвинутыми программами). К сожалению, идею пока пришлось отложить, но решение одной из проблем я описал в этой статье.
На этапе планирования учебных программ я столкнулся с проблемой выбора контроллера для обучения детей среднего школьного возраста (5-8 класс). Для младших уже существует Wedo, и этот конструктор хорошо себя зарекомендовал. Старшие уже хорошо усваивают Arduino и 3D-моделирование. А для средневозрастных ребят, исходя из своего почти восьмилетнего опыта преподавания робототехники, хотелось бы что-то среднее. Чтобы можно было программировать и блоками (желательно еще сразу видеть код), и напрямую в Arduino IDE. При этом в удобном защищенном корпусе, с минимизированным шансом пораниться или что-то сжечь, и возможностью собирать робота из готовых деталей.
Для этих целей все используют EV3, но мне не нравится программирование только блоками, спорные по качеству датчики, монструозные по размерам итоговые сборки (в основном из-за размера контроллера), ну и, честно говоря, цена. Как вариант с адекватной стоимостью, использовать китайский kazi EV6, но остальные проблемы остаются. Я знаю, что можно программировать на microPython, но это костыль, и все равно детей надо готовить к Arduino.
В этом плане мне понравился образовательный набор от RED (хотя когда я его первый раз пощупал, долго от него плевался). Их контроллер One, по сути, шилд для ардуины с выведенными портами и встроенными драйверами двигателя, в красивом пластиковом корпусе (в первых партиях напечатанном на 3D принтере). Контроллер совместим с лего деталями, и поставляется с немного измененным ресурсным набором 45544 и спорным набором Arduino датчиков, тоже в корпусах. А их среда программирования реализована на принципах scratch, но по сути дублирует ArduBlock.


Контроллер RED. Распиновка, на мой взгляд, бредовая и немного неудачный корпус.
Однако у этого решения тоже существуют проблемы. Начиная от странной распиновки, заканчивая не самой удачной конструкцией корпуса. Большинство проблем они решили в контроллере X, но зачем-то перевели его с аккумуляторов на батарейки, закрыли возможность программировать из ArduinoIDE и взвинтили ценник.
Первым делом я занялся проектированием платы. При работе с обычной Arduino у ребят чаще всего возникают следующие проблемы: недостаток портов питания (все время приходится изобретать какие-то шины) и большое количество проводных соединений. Поэтому от неё мне нужно было наличие встроенных драйверов для двигателей и адекватной распиновки. Первый вариант схемы на базе Arduino nano я набросал минут за 30. Сильно мудрить не стал, и просто использовал схемы проверенных модулей для Arduino. В качестве драйверов я использовал микросхемы l9110s, которые работают по схеме Н-мост, для стабильных 5в просто стабилизатор L7805, немного резисторов и конденсаторов согласно схемам (пару которых забыл), диодик для защиты от переполюсовки. Также быстро развел печатку, и плата rev-1 готова!
На драйвера задействованы порты 3,9,10,11. Немного нерационально, но это для совместимости с red. Остальные порты постарался вывести максимально удобно, добавив к каждому шину питания.
Решил попробовать заказать изготовление. JLCPCB, как известно, с Россией сейчас не работает. Но легко нашелся аналогичный производитель, NextPCP. У них аналогичный сервис, цены немного повыше, зато оплата через AliExpress путем покупки нескольких лотов по 1$. Сделал заказ на изготовление 10 плат, и спустя месяц они у меня.


Запаял минимальное количество деталей для оценки габаритов и занялся проектированием корпуса.
При проектировании корпуса старался победить все проблемы red-а, которые мы (в основном мои коллеги) накопили за время работы с ним. А именно:
Абсолютно дурацкое крепление крышки аккумуляторов 14500 на двух винтах, из за чего ей никто не пользуется, т.к. аккумуляторы надо часто доставать на зарядку.
Неудачно расположенное крепление к lego (меня попросили его поставить пониже, т.к. робот часто просто цеплял пол днищем этого контроллера).
Отсутствие кнопки перезагрузки.
И немного неудобное расположение кнопки питания.
Более-менее сносный вариант корпуса получился почти с третьего раза.





Первые варианты корпуса



Крышка батарейного отсека получилась довольно удачной, в виде сдвигающейся шторки. Вышло и надежно, и удобно.
К этому моменту ко мне доехал ресурсный набор и появилась возможность тестировать этот контроллер, чем я и занялся. Допаял схему, на удивление все заработало, и сразу от аккумуляторов. Но при проверке драйверов оказалось, что один мотор нормально не работает. Перебрав несколько микросхем l9110s, которые я заказывал в прошлом году, оказалось, что почти все они бракованные. В итоге заработали сдутые с живых плат драйверов двигателя, чему я очень обрадовался.
В первый же вечер, играясь этой телегой через bluetooth, я спалил оба драйвера :D.
Оказалось, я просто забыл о конденсаторах между выходами на моторы, из-за чего драйвера и прошибало. Исправил этот момент в схеме. А на текущей железке просто распаял их между контактами.


Собрал телегу посолиднее, люблю гусеничные модели. Спроектировал сразу корпус для hc-06. Мучил её несколько дней (и до сих пор мучаю), больше проблем с драйверами не выявил.


Выглядит поинтереснее. Также заметен тот самый добавочный конденсатор по шине +5V
Еще оказалось, что 9-ый порт не может выдавать шим сигнал при задействовании первого таймера для сервопривода. Из-за этого один мотор не работал. Просто поменял в схеме 3 с 9 порты местами.
Последней проблемой, с которой я столкнулся, оказалась перезагрузка Arduino при резкой нагрузке на аккумуляторы. Выяснилось, что конденсатора всего в 0.1мкФ недостаточно по шине 5в (интересно, почему). Поменял его в схеме на обычный 2-х выводной электролит на 100 мкФ, а на текущей плате просто напаял поверх.
На этом найденные проблемы с платой закончились. Я развел плату более грамотно, увеличил размеры smd компонентов (на первой плате замучился их паять), поправил некоторые надписи. И заказал производство второй ревизии платы.
Параллельно с этим велась доработка мелких косяков по корпусу и добавление всяких украшательств. И, спустя всего пару тестовых вариантов...


"Пара тестовых вариантов"
Я получил корпус, который хотел! Корпус (да и весь контроллер) спроектирован так, чтобы свести к мнимому шанс порчи контактов или замыкания. Старался чтобы было понятно, какие контакты за что отвечают, но они ещё дополнительно будут отмечены разными цветами гребенок. Порты моторов специально расположены со смещением, чтобы снизить риск попадания на соседние порты. Корпус имеет встроенный отсек для аккумуляторов формата 14500 и LEGO крепления с 3-х сторон. Кнопка включения расположена выше проводов, её так удобнее нажимать.



Наклейка не финальная (просто чтобы порты видно было). Кнопки будут белые.
В планах сделать набор на базе этого контроллера с немного соревновательным уклоном, с возможностью собрать робота для езды по линии, для прохождения лабиринта или перетаскивания предметов. Программировать можно в ArduBlock, ArduinoIDE и в любых других средах с поддержкой Arduino nano.
На данный момент ко мне едут платы второй ревизии. А я пока подбираю датчики и делаю для них корпуса. Точно будут пара ИК датчиков, лазерный и пара УЗ дальномеров, Bluetooth, и всякая мелочь типа модуля кнопки, rgb-светодиода и зумера. Есть проблема с заказом относительно больших партий ресурсных наборов и датчиков, с этим пока разбираюсь. Еще сделал группу в ВК про проекту, там публикую процесс разработки.
Если интересен проект, пожалуйста поддержите его. Буду рад подписке на группу :)
Пожелания и предложения тоже очень приветствуются!
Всех категорически приветствую! Наконец-то обзавелся страницей игры в Steam. Не прошло и года (а нет, вообще то прошло). По этому поводу можно что-то про неё и написать :)
Представте, если бы все стереотипы о России стали правдой. Хотели бы посмотреть как бы это выглядело? Скоро появится такая возможность.
Red Frozen - это игра, которая воплощает в себе все стереотипы о России и даже немного больше.
Только здесь можно попросить у соседа автомат Калашникова, отправиться с ним на охоту и запустить межконтинентальную баллистическую ракету.
Немного скриншотов чтобы было понятно о чем идет речь:
