Блок Reduced Order Flexible Solid моделирует деформируемое тело на основе модели уменьшаемого порядка, которая характеризует геометрические и механические свойства тела. Основные данные, импортированные из модели уменьшаемого порядка, включают:
Список координаты утраивается, которые задают положение всех интерфейсных систем координат относительно системы координат общей ссылки.
Симметричная матрица жесткости, которая описывает свойства упругости гибкого тела.
Симметричная большая матрица, которая описывает инерционные свойства гибкого тела.
Существует несколько способов сгенерировать данные уменьшаемого порядка, требуемые этим блоком. Как правило, вы генерируете подструктуру (или суперэлемент) при помощи инструментов анализа конечных элементов (FEA).
Этот пример использует Partial Differential Equation Toolbox™, чтобы создать модель уменьшаемого порядка для гибкой руки красильщика, такой как рука для экскаватора или экскаватора типа обратная лопата. Вы запускаете с геометрии CAD руки красильщика, генерируете mesh конечного элемента, применяете FEA Craig-Бамптона подструктурирование метода и генерируете модель уменьшаемого порядка. Модель 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
функция, которая создает структурную модель для модального анализа твердой (3-D) проблемы. После импорта геометрии и свойств материала руки, generateMesh
функция создает 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
:
figure pdegplot(feModel,'FaceLabels','on','FaceAlpha',0.5)
Можно масштабировать, вращать и панорамировать это изображение, чтобы определить метки для поверхностей, соответствующих граничным узлам. Эти поверхности задают MPCs, сопоставленный с граничными узлами в руке красильщика:
Цилиндрическая точка контакта: столкнитесь 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
задавать MPCs для граничных узлов в этих поверхностях:
for k = 1:numFrames structuralBC(feModel, ... 'Face',faceIDs(k), ... 'Constraint','multipoint', ... 'Reference',origins(k,:)); end
Функциональный reduce
применяет метод сокращения порядка Craig-Бамптона и сохраняет все фиксировано-интерфейсные режимы до частоты радианы в секунду.
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
. Если порядок MPCs отличается, чем порядок specifed 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
настраивать параметры блока Reduced 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 | createpde
| generateMesh
| importGeometry
| pdegplot
| reduce
| stlread
| structuralBC
| structuralProperties
| trisurf