Параметрическое моделирование в САПР SolveSpace: Степени свободы и уравнения ограничений

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


    image


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


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


    Уравнения (Equations)


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


    POINTS_COINCIDENT


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


    image


    HORIZONTAL/VERTICAL


    Ограничения горизонтальность/вертикальность: здесь достаточно уравнять одну из координат точек. Ограничение снимает одну степень свободы.


    image


    PT_PT_DISTANCE


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


    image!


    PERPENDICULAR


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


    image


    ANGLE


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


    image


    PT_LINE_DISTANCE


    Ограничение расстояния от точки до линии записывается через псевдоскалярное (косое) произведение и используется его свойство:


    image
    где image и есть искомая высота.


    Ограничение снимает одну степень свободы.


    image


    PARALLEL


    Ограничение параллельности тоже основано на псевдоскалярном (косом) произведении. Здесь используется тот факт, что sin(0) = 0. По-честному, нужно было бы поделить левую часть уравнения на произведение модулей векторов, но исторически в SolveSpace уравнение записано именно так. Так как к нулевому результату косого произведения приводит и равенство нулю длин векторов, отрезки все время стремятся уменьшиться. Это не сильно мешает, если длину векторов ограничить.


    image


    Заключение


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


    Часть 1: Введение
    Часть 2: Эскиз
    Часть 3: Степени свободы и уравнения ограничений
    Часть 4: «Неисповедимы пути Решателя» или «Червоточины Ньютона»

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

    Подробнее
    Реклама
    Комментарии 20
    • 0

      Можно ли в SolveSpace реализовывать сложные трёхмерные фигуры, типа резьбы на винте?

      • +1

        К сожалению, винтовые поверхности в SolveSpace создать невозможно и это ограничение обусловлено использованием собственного геометрического ядра, которое не поддерживает такие операции. Скорее всего, SolveSpace должен перейти на стороннee OpenSource ядро, вроде OpenCASCADE, чтобы поддерживать такие операции.

        • 0

          А добавить винтовые поверхности в геометрическое ядро SolveSpace принципиально невозможно?

          • +1

            Возможно, но это очень трудозатратно. Проект сейчас стабильно развивается, но такие серьезные изменения требуют серьезных аргументов в их пользу. За прошедший год мы сделали очень много: интернационализацию, поддержку чертежных видов скрытых линий, экспорт/импорт dxf и многое другое. Но чтобы начинать такие существенные движения, проекту нужно быть чуть более популярным. Лично я уже давно готов погрузиться в глубины NURBS моделирования и сделать с ядром SolveSpace что-то хорошее, но целесообразность траты на это огромного количества творческой энергии под вопросом. В любом случае, для реализации таких проектов нужна команда.

      • 0
        На сколько эта программа может подойти для архитектурного, инженерно-строительного проектирования? Или только машиностроение?
        • +1

          Эта программа как швейцарский нож: маленькая и удобная, но если приноровиться — можно делать практически все. Я думаю, что если нет сверхтребований, то очень хорошо подойдет на место SketchUP в плане арихитектурного проектирования. В данном случае, наличие решателя решает. Для архитектурных конструкций появились такие улучшения и такие.

          • 0
            Хм, это очень интересно. Тогда буду пробовать SolveSpace… Много лет работаю в SketchUp и как раз ему ищу замену на Linux. Сейчас FreeCAD осваиваю, но теперь и SolveSpace пригляделся. Спасибо! Надеюсь на дальнейшее развитие фич для строительного проектирования ;)
            • 0

              Попробуйте, и обязательно пишите о недочетах и пожеланиях вот здесь https://github.com/solvespace/solvespace/issues

              • 0
                Попробовал Solvespace 2.3 на Win 7 машине. Начал проходить первый туториал. После добавления ограничения на параллельность (оно там одно такое) при попытке подвигать один из параллельных отрезков солвер не может разрешить систему уравнений. Та же самая ситуация в версии 2.0 просчитывается нормально. Это считается за issue?
                • 0

                  Да, выглядит как проблема. Хорошо было, если бы вы создали issue и приложили файл с проблемой.

                  • 0
                    Второй раз не воспроизвелось к сожалению.
        • 0
          Пытаюсь собрать на Debian 8, но gtkmm-3.16 не бывает (во всяком случае на их родном сайте):

          — Checking for modules 'gtkmm-3.0>=3.16;pangomm-1.4;x11'

          CMake Error at /usr/local/share/cmake-3.7/Modules/FindPkgConfig.cmake:415 (message):
          A required package was not found
          Call Stack (most recent call first):
          /usr/local/share/cmake-3.7/Modules/FindPkgConfig.cmake:588 (_pkg_check_modules_internal)
          CMakeLists.txt:194 (pkg_check_modules)

          — Configuring incomplete, errors occurred!


          В репозитории варианта ни под версию gtkmm-2.4 ни под 3.0 нет.
        • 0
          Было бы круто скрестить SolveSpace c MoI 3D.
          • 0
            А что насчет замкнутой системы? Я вот всё пытаюсь повторить https://drive.google.com/file/d/0B36uBX3gRq2lYVZoUmp0RUxYQ28/view?usp=sharing Jansen отсюда http://solvespace.com/linkage.pl Но решатель — не решает, когда замыкаешь систему четвертой деталью по point constrain на отверстии. Мне вот непонятно, что там за хаки используются для замыкания системы в оригинальном примере?
            • 0

              SolveSpace, к сожалению, решает сборки последовательно, а не параллельно. Для того, чтобы решать замкнутые системы, нужна доработка SolveSpace. Решатель — это всего лишь инструмент — какие уравнения ему закинул, такие и решает. Так что в решателе нет каких-либо ограничений.

              • 0
                Новичков это ставит в тупик, начинаешь думать что используешь очень сырое приложение. Впрочем, стоило бы об этом отдельно написать и показать людям workaround, ведь он существует — https://www.linux.org.ru/forum/science/12756903/page2?lastmod=1500758328986#comment-13562135 В Jansen конечно показана деталь, но она усложнена и мне (как новичку в CAD и SolveSpace в частности) было тяжело понять используемые там хаки, а на простой детали всё более-менее понятно.

                В целом, SolveSpace очень удобна для новичков, я вначале использовал Tinkercad, а теперь буду всем советовать SolveSpace — значительно удобнее. Может в будущем, если сложатся звёзды, я помогу её перенести в веб и сделать в виде веб-приложения на подобии Tinkercad.
                • 0

                  Планы по переносу в веб уже есть. workaround — это не очень хорошо, надо делать параллельное решение сборок.

                  • 0
                    >workaround — это не очень хорошо, надо делать параллельное решение сборок
                    Да это понятно, но когда нужно здесь и сейчас, то лучше обходной путь, чем лезть на торенты за солидворксом

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