Смоделируйте руку красильщика экскаватора как гибкое тело

Блок Reduced Order Flexible Solid моделирует деформируемое тело на основе модели уменьшаемого порядка, которая характеризует геометрические и механические свойства тела. Основные данные, импортированные из модели уменьшаемого порядка, включают:

  • Список координаты утраивается, которые задают положение всех интерфейсных систем координат относительно системы координат общей ссылки.

  • Симметричная матрица жесткости, которая описывает свойства упругости гибкого тела.

  • Симметричная большая матрица, которая описывает инерционные свойства гибкого тела.

Существует несколько способов сгенерировать данные уменьшаемого порядка, требуемые этим блоком. Как правило, вы генерируете подструктуру (или суперэлемент) при помощи инструментов анализа конечных элементов (FEA).

Этот пример использует Partial Differential Equation Toolbox™, чтобы создать модель уменьшаемого порядка для гибкой руки красильщика, такой как рука для экскаватора или экскаватора типа обратная лопата. Вы начинаете с геометрии CAD руки красильщика, генерируете mesh конечного элемента, применяете FEA Craig-Бамптона подструктурирование метода и генерируете модель уменьшаемого порядка. Модель sm_flexible_dipper_arm использует данные уменьшаемого порядка из этого примера. В модели рука красильщика смонтирована сверху вращающейся башни как часть тестовой буровой установки. Для получения дополнительной информации смотрите Гибкую Руку Красильщика.

Шаг 1: задайте геометрию и свойства материала руки красильщика

Файл 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

Шаг 2: задайте местоположения интерфейсных систем координат

Рука красильщика имеет три интерфейсных системы координат, где можно соединить другие элементы 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);

Шаг 3: создайте Mesh конечного элемента

Чтобы сгенерировать 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);

Шаг 4: Настройте Многоточечные Ограничения для Интерфейсных Систем координат

Каждая интерфейсная система координат на блоке соответствует граничному узлу, который вносит шесть степеней свободы в модель уменьшаемого порядка. Существует несколько способов гарантировать, что FEA подструктурирование метода сохраняет необходимые степени свободы. Например, можно создать твердое ограничение, чтобы соединить граничный узел с подмножеством узлов конечного элемента на теле. Можно также использовать структурные элементы, такие как луч или окружить элементы, чтобы начать узлы с шести степеней свободы.

Этот пример использует многоточечное ограничение (MPC), чтобы сохранить эти шесть степеней свободы в каждом граничном узле. Чтобы идентифицировать геометрические области (такие как поверхности, ребра, или вершины), чтобы сопоставить с каждым MPC, сначала строят геометрию руки при помощи функционального pdegplot (Partial Differential Equation Toolbox):

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 (Partial Differential Equation Toolbox), чтобы задать MPCs для граничных узлов в этих поверхностях:

for k = 1:numFrames
    structuralBC(feModel, ...
        'Face',faceIDs(k), ...
        'Constraint','multipoint', ...
        'Reference',origins(k,:));
end

Шаг 5: сгенерируйте модель уменьшаемого порядка

Функциональный reduce (Partial Differential Equation Toolbox) применяет метод сокращения порядка Craig-Бамптона и сохраняет все фиксировано-интерфейсные режимы до частоты 104 радианы в секунду.

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 отличается, чем порядок, заданный 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);

Шаг 6: импортируйте данные уменьшаемого порядка

Модель 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

Смотрите также

| | | (Partial Differential Equation Toolbox) | (Partial Differential Equation Toolbox) | (Partial Differential Equation Toolbox) | (Partial Differential Equation Toolbox) | (Partial Differential Equation Toolbox) | (Partial Differential Equation Toolbox) | (Partial Differential Equation Toolbox)

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте