Блок Reduced Order Flexible Solid моделирует деформируемое тело на основе модели пониженного порядка, которая характеризует геометрические и механические свойства тела. Основные данные, импортированные из модели пониженного порядка, включают:
Список тройных координат, которые определяют положение всех исходных систем координат интерфейса относительно общей системы отсчета.
Симметричная матрица жесткости, которая описывает свойства упругости гибкого тела.
Симметричная большая матрица, которая описывает инерционные свойства гибкого тела.
Существует несколько способов сгенерировать данные пониженного порядка, требуемые этим блоком. Как правило, вы генерируете подструктуру (или суперэлемент) с помощью инструментов конечноэлементного анализа (FEA).
Этот пример использует Partial Differential Equation Toolbox™ производными, чтобы создать модель пониженного порядка для гибкого рычага диппера, такого как рычаг для экскаватора или заднего прохода. Вы начинаете с CAD-геометрии руки диппера, генерируете конечноэлементный mesh, применяете метод подструктуризации Craig-Bampton FEA и генерируете модель пониженного порядка. Модель sm_flexible_dipper_arm
использует данные пониженного порядка из этого примера. В модели рычаг диппера установлен на верхнюю часть вращающейся башни как часть испытательной установки. Для получения дополнительной информации смотрите Гибкую Руку Диппера.
Файл sm_flexible_dipper_arm.STL
содержит триангуляцию, которая задает геометрию CAD руки диппера. Чтобы просмотреть геометрию, хранящуюся в этом файле, используйте функции MATLAB ® stlread
и trisurf
:
stlFile = 'sm_flexible_dipper_arm.STL'; figure trisurf(stlread(stlFile)) axis equal
Рычаг диппера выполнен из стали. Чтобы представлять его материальные свойства, установите эти значения для модуля Юнга, отношения Пуассона и плотности массы:
E = 200e9; % Young's modulus in Pa nu = 0.26; % Poisson's ratio (nondimensional) rho = 7800; % Mass density in kg/m^3
Рука диппера имеет три системы координат, где можно соединить другие элементы Simscape™ Multibody™, такие как соединения, ограничения, силы и датчики:
Точка соединения цилиндра, где рычаг соединяется с гидравлическим цилиндром, который вращает рычаг вертикально.
Точка соединения блока, где рычаг соединяется с блоком экскаватора.
Точка опоры, где рычаг соединяется со стрелой экскаватора.
Положения всех исходных систем координат интерфейса заданы в метрах относительно той же общей системы координат, которая используется геометрией CAD.
origins = [-0.500 0 0 % Frame 1: Cylinder connection point 1.500 0 0 % Frame 2: Bucket connection point 0 -0.130 0]; % Frame 3: Fulcrum point numFrames = size(origins,1);
Чтобы сгенерировать mesh для руки диппера, сначала вызовите createpde
(Partial Differential Equation Toolbox) функция, которая создает структурную модель для модального анализа твердой (3-D) задачи. После импорта геометрии и свойств материала руки, generateMesh
(Partial Differential Equation Toolbox) функция создает mesh.
feModel = createpde('structural','modal-solid'); importGeometry(feModel,stlFile); structuralProperties(feModel, ... 'YoungsModulus',E, ... 'PoissonsRatio',nu, ... 'MassDensity',rho); generateMesh(feModel, ... 'GeometricOrder','quadratic', ... 'Hmax',0.2, ... 'Hmin',0.02);
Каждая система координат интерфейса в блоке соответствует пограничному узлу, который вносит шесть степеней свободы в модель пониженного порядка. Существует несколько способов гарантировать, что метод подструктуризации FEA сохраняет необходимые степени свободы. Например, можно создать жесткое ограничение, чтобы соединить граничный узел с подмножеством конечноэлементных узлов тела. Можно также использовать несущие элементы, такие как балка или элементы оболочки, для ввода узлов с шестью степенями свободы.
Этот пример использует многоточечное ограничение (MPC), чтобы сохранить шесть степеней свободы в каждом пограничном узле. Чтобы идентифицировать геометрические области (такие как грани, ребра или вершины) для связи с каждым MPC, сначала постройте график геометрии рычага с помощью функции pdegplot
(Набор Partial Differential Equation Toolbox):
figure pdegplot(feModel,'FaceLabels','on','FaceAlpha',0.5)
Можно масштабировать, поворачивать и панорамировать это изображение, чтобы определить метки для граней, соответствующих граничным узлам. Эти грани определяют MPC, сопоставленные с граничными узлами в руке диппера:
Точка соединения гидроцилиндра: грань 1
Точка соединения ведра: грань 27
Точка опоры: грань 23
faceIDs = [1,27,23]; % List in the same order as the interface frame origins
Чтобы проверить эти значения, постройте mesh и подсветите выбранные грани:
figure pdemesh(feModel,'FaceAlpha',0.5) hold on colors = ['rgb' repmat('k',1,numFrames-3)]; assert(numel(faceIDs) == numFrames); for k = 1:numFrames nodeIdxs = findNodes(feModel.Mesh,'region','Face',faceIDs(k)); scatter3( ... feModel.Mesh.Nodes(1,nodeIdxs), ... feModel.Mesh.Nodes(2,nodeIdxs), ... feModel.Mesh.Nodes(3,nodeIdxs), ... 'ok','MarkerFaceColor',colors(k)) scatter3( ... origins(k,1), ... origins(k,2), ... origins(k,3), ... 80,colors(k),'filled','s') end hold off
Вызовите функцию structuralBC
(Partial Differential Equation Toolbox) для определения MPC для граничных узлов в этих гранях:
for k = 1:numFrames structuralBC(feModel, ... 'Face',faceIDs(k), ... 'Constraint','multipoint', ... 'Reference',origins(k,:)); end
Функция reduce
(Partial Differential Equation Toolbox) применяет метод сокращения порядка Крейга-Бэмптона и сохраняет все режимы фиксированного интерфейса до частоты радианы в секунду.
rom = reduce(feModel,'FrequencyRange',[0 1e4]);
Сохраните результаты сокращения в структуре данных arm
. Транспонируйте ReferenceLocations
матрица для расчета различных условий размещения, используемых Partial Differential Equation Toolbox и Simscape Multibody.
arm.P = rom.ReferenceLocations'; % Interface frame locations (n x 3 matrix) arm.K = rom.K; % Reduced stiffness matrix arm.M = rom.M; % Reduced mass matrix
Функция computeModalDampingMatrix
, который задан в нижней части этой страницы, вычисляет уменьшенную матрицу модального демпфирования с коэффициентом затухания 0,05:
dampingRatio = 0.05; arm.C = computeModalDampingMatrix(dampingRatio,rom.K,rom.M);
Граничные узлы в модели пониженного порядка должны быть заданы в том же порядке, как соответствующие системы координат интерфейса на блоке. Этот порядок задается строками массива origins
. Если порядок MPC отличается от порядка, заданного origins
, транспозиция строк и столбцов различных матриц так, чтобы они совпадали с исходным порядком.
frmPerm = zeros(numFrames,1); % Frame permutation vector dofPerm = 1:size(arm.K,1); % DOF permutation vector assert(size(arm.P,1) == numFrames); for i = 1:numFrames for j = 1:numFrames if isequal(arm.P(j,:),origins(i,:)) frmPerm(i) = j; dofPerm(6*(i-1)+(1:6)) = 6*(j-1)+(1:6); continue; end end end assert(numel(frmPerm) == numFrames); assert(numel(dofPerm) == size(arm.K,1)); arm.P = arm.P(frmPerm,:); arm.K = arm.K(dofPerm,:); arm.K = arm.K(:,dofPerm); arm.M = arm.M(dofPerm,:); arm.M = arm.M(:,dofPerm); arm.C = arm.C(dofPerm,:); arm.C = arm.C(:,dofPerm);
Модель sm_flexible_dipper_arm
использует структуру данных arm
для настройки параметров блока Reduction Order Flexible Solid. В блоке эти параметры импортируют данные пониженного порядка:
Источники: arm.P
Матрица жесткости: arm.K(1:24,1:24)
Большая матрица: arm.M(1:24,1:24)
Матрица демпфирования: arm.C(1:24,1:24)
Для получения дополнительной информации смотрите Гибкую Руку Диппера.
Эта функция вычисляет модальную демпфирующую матрицу, связанную с матрицей жесткости K
и большая матрица M
. Эта функция применяет один скалярный коэффициент затухания ко всем гибким (нежестким) режимам normal mode, связанным с K
и M
.
function C = computeModalDampingMatrix(dampingRatio,K,M) % To avoid numerical issues (such as complex eigenvalues with very small % imaginary parts), make the matrices exactly symmetric. K = (K+K')/2; % Stiffness matrix M = (M+M')/2; % Mass matrix % Compute the eigen-decomposition associated with the mass and stiffness % matrices, sorting the eigenvalues in ascending order and permuting % the corresponding eigenvectors. [V,D] = eig(K,M); [d,sortIdxs] = sort(diag(D)); V = V(:,sortIdxs); % Due to small numerical errors, the six eigenvalues associated with the % rigid-body modes may not be exactly zero. To avoid numerical issues, % check that the first six eigenvalues are close enough to zero. Then % replace them with exact 0 values. assert(all(abs(d(1:6))/abs(d(7)) < 1e-9),'Error due to "zero" eigenvalues.'); d(1:6) = 0; % Vectors of generalized masses and natural frequencies MV = M*V; generalizedMasses = diag(V'*MV); naturalFrequencies = sqrt(d); % Compute the modal damping matrix associated with K and M C = MV * diag(2*dampingRatio*naturalFrequencies./generalizedMasses) * MV'; end
Reduced Order Flexible Solid | stlread
| trisurf
| createpde
(Partial Differential Equation Toolbox) | generateMesh
(Набор Partial Differential Equation Toolbox производными) | importGeometry
(Набор Partial Differential Equation Toolbox производными) | pdegplot
(Набор Partial Differential Equation Toolbox производными) | reduce
(Набор Partial Differential Equation Toolbox производными) | structuralBC
(Набор Partial Differential Equation Toolbox производными) | structuralProperties
(Набор Partial Differential Equation Toolbox)