Блок гибкого тела с уменьшенным порядком моделирует деформируемое тело на основе модели с уменьшенным порядком, которая характеризует геометрические и механические свойства тела. Основные данные, импортированные из модели сокращенного заказа, включают:
Список троек координат, задающих положение всех исходных точек кадра интерфейса относительно общего опорного кадра.
Симметричная матрица жесткости, описывающая упругие свойства гибкого тела.
Матрица симметричной массы, описывающая инерционные свойства гибкого тела.
Существует несколько способов создания данных сокращенного порядка, необходимых для этого блока. Как правило, подструктуру (или вираж) генерируют с помощью инструментов анализа конечных элементов (КЭА).
В этом примере используется Toolbox™ Дифференциальное уравнение в частных производных (Partial Differential Equation) для создания модели с уменьшенным порядком для гибкого манипулятора, такого как манипулятор экскаватора или задний лап. Начните с CAD-геометрии манипулятора, создайте конечноэлементную сетку, примените метод субструктурирования КЭА Крейга-Бэмптона и создайте модель с уменьшенным порядком. Модель sm_flexible_dipper_arm использует данные сокращенного порядка из этого примера. В модели рычаг погружения монтируется поверх вращающейся башни как часть испытательной установки. Дополнительные сведения см. в разделе Гибкий манипулятор.

Файл sm_flexible_dipper_arm.STL содержит триангуляцию, определяющую геометрию САПР манипулятора. Для просмотра геометрии, сохраненной в этом файле, используйте функции 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™, такие как соединения, зависимости, силы и датчики:
Точка соединения цилиндра, в которой рычаг соединяется с гидравлическим цилиндром, приводящим рычаг в действие вертикально.
Точка соединения ковша, где рычаг соединяется с ковшем экскаватора.
Точка опоры, где рычаг соединяется со стрелой экскаватора.
Положения всех источников рамок интерфейса задаются в метрах относительно одной и той же общей опорной рамки, используемой геометрией САПР.
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);
Чтобы создать сетку для манипулятора, сначала вызовите createpde(Панель инструментов дифференциальных уравнений в частных производных), которая создает структурную модель для модального анализа твердотельной (3-D) задачи. После импорта геометрии и свойств материала рычага, generateMesh(Панель инструментов дифференциальных уравнений в частных производных) создает сетку.
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);
Каждый кадр интерфейса в блоке соответствует граничному узлу, который вносит шесть степеней свободы в модель с уменьшенным порядком. Существует несколько способов обеспечения сохранения требуемых степеней свободы методом субструктурирования МКЭ. Например, можно создать жесткую зависимость для соединения граничного узла с подмножеством конечноэлементных узлов на теле. Можно также использовать структурные элементы, такие как балка или оболочечные элементы, для введения узлов с шестью степенями свободы.
В этом примере используется многоточечное ограничение (MPC) для сохранения шести степеней свободы в каждом граничном узле. Чтобы определить геометрические области (такие как грани, ребра или вершины) для связи с каждым MPC, сначала постройте график геометрии плеча с помощью функции pdegplot(Панель инструментов дифференциального уравнения в частных производных):
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Чтобы проверить эти значения, постройте график сетки и выделите выбранные грани:
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(Панель инструментов дифференциальных уравнений в частных производных) для определения MPC для граничных узлов в этих гранях:
for k = 1:numFrames structuralBC(feModel, ... 'Face',faceIDs(k), ... 'Constraint','multipoint', ... 'Reference',origins(k,:)); end
Функция reduce(Панель инструментов дифференциальных уравнений в частных производных) применяет метод уменьшения порядка Крейга-Бэмптона и сохраняет все режимы фиксированного интерфейса до частоты радиана в секунду.
rom = reduce(feModel,'FrequencyRange',[0 1e4]);сохранять результаты сокращения в структуре данных; arm. Транспонировать ReferenceLocations для учета различных соглашений о компоновке, используемых панелью инструментов дифференциальных уравнений в частных производных и 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 для настройки параметров блока «Гибкое твердое тело с уменьшенным порядком». В блоке эти параметры импортируют данные уменьшенного порядка:
Истоки: arm.P
Матрица жесткости: arm.K(1:24,1:24)
Массовая матрица: arm.M(1:24,1:24)
Демпфирующая матрица: arm.C(1:24,1:24)
Дополнительные сведения см. в разделе Гибкий манипулятор.
Эта функция вычисляет модальную демпфирующую матрицу, связанную с матрицей жесткости. K и матрица массы M. Эта функция применяет один коэффициент скалярного демпфирования ко всем гибким (нежестким) нормальным режимам, связанным с 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
Сокращенный заказ гибкого твердого тела | stlread | trisurf | createpde (Панель инструментов дифференциального уравнения в частных производных) | generateMesh(Панель инструментов дифференциальных уравнений в частных производных) | importGeometry(Панель инструментов дифференциальных уравнений в частных производных) | pdegplot(Панель инструментов дифференциальных уравнений в частных производных) | reduce(Панель инструментов дифференциальных уравнений в частных производных) | structuralBC(Панель инструментов дифференциальных уравнений в частных производных) | structuralProperties(Панель инструментов дифференциальных уравнений в частных производных)