Анализ модальной и частотной характеристики для одной части роботизированной руки Kinova® Gen3

В этом примере показано, как анализировать ссылку плеча роботизированной руки легкого веса Kinova® Gen3 Ultra для возможной деформации под давлением.

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

Загрузки в советах роботизированной руки вызывают давление на соединения каждой ссылки. Направление давления зависит от направления загрузки.

Этот пример вычисляет деформации ссылки плеча под поданным давлением путем выполнения модального анализа и аналитической симуляции частотной характеристики. Можно найти функцию помощника animateSixLinkModes.m и файл геометрии Gen3Shoulder.stl под matlab/R20XXx/examples/pde/main.

Модальный анализ

При предположении, что один конец роботизированной руки фиксируется, найдите формы режима и собственные частоты.

Создайте структурную модель для модального анализа.

model = createpde('structural','modal-solid');

Чтобы выполнить неограниченный модальный анализ структуры, необходимо задать геометрию, mesh и свойства материала. Во-первых, импортируйте геометрию части плеча роботизированной руки.

importGeometry(model,'Gen3Shoulder.stl');

Сгенерируйте mesh.

generateMesh(model);
pdemesh(model)

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

E = 1.5E11;          
nu = 0.3;           
rho = 2000;            
structuralProperties(model,'YoungsModulus',E, ...
                           'PoissonsRatio',nu, ...
                           'MassDensity',rho);

Идентифицируйте поверхности для применения граничных ограничений и загрузок путем графического вывода геометрии с метками поверхности.

figure
pdegplot(model,'FaceLabels','on')
view([-1 2])
title('Shoulder Link Geometry with Face Labels')

Ссылка плеча закрепляется на одном конце (столкнитесь 3), и соединенный с движущейся ссылкой на другой конец (стоят 4). Примените закрепленное граничное условие на поверхность 3.

structuralBC(model,'Face',3,'Constraint','fixed');

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

RF = solve(model,'FrequencyRange',[-1,10000]*2*pi);

По умолчанию решатель возвращает круговые частоты.

modeID = 1:numel(RF.NaturalFrequencies);

Опишите получившиеся частоты в Гц путем деления их на 2π. Отобразите частоты в таблице.

tmodalResults = table(modeID.',RF.NaturalFrequencies/2/pi);
tmodalResults.Properties.VariableNames = {'Mode','Frequency'};
disp(tmodalResults);
    Mode    Frequency
    ____    _________

     1       1947.2  
     2         2662  
     3       4982.3  
     4       5112.6  
     5       7819.5  
     6       8037.1  
     7         9361  

Лучший способ визуализировать формы режима состоит в том, чтобы анимировать гармоническое движение на их соответствующих частотах. animateSixLinkModes функция анимирует первые шесть режимов. Получившийся график показывает области доминирующей деформации при загрузке.

figure
frames  = animateSixLinkModes(RF);

Чтобы проигрывать анимацию, используйте следующую команду:

movie(figure('units','normalized','outerposition',[0 0 1 1]),frames,5,30)

Анализ частотной характеристики

Симулируйте динамику плеча, под давлением загружающего на поверхности, приняв, что присоединенная ссылка применяет равное и противоположное количество давления на половины поверхности. Анализируйте частотную характеристику и деформацию точки в поверхности.

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

fmodel = createpde('structural','frequency-solid');

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

importGeometry(fmodel,'Gen3Shoulder.stl');

Сгенерируйте mesh.

mesh = generateMesh(fmodel);

Задайте модуль Молодежи, отношение Пуассона и массовую плотность.

structuralProperties(fmodel,'YoungsModulus',E, ...
                            'PoissonsRatio',nu, ...
                            'MassDensity',rho);

Ссылка плеча закрепляется на одном конце (столкнитесь 3), и соединенный с движущейся ссылкой на другой конец (стоят 4). Примените закрепленное граничное условие на поверхность 3.

structuralBC(fmodel,'Face',3,'Constraint','fixed');

Оцените давление, которое движущаяся ссылка подает на поверхности 4, когда рука несет загрузку. Этот рисунок показывает две половины поверхности 4 разделенных в центре вдоль y-координаты.

Используйте pressFcnFR функция, чтобы применить граничную нагрузку на поверхность 4. Эта функция применяет нажатие, и давление скручивания сигнализирует. Компонент давления нажатия универсален. Компонент скручивания подает положительное давление на левой стороне и отрицательное давление на правую сторону поверхности. Для определения pressFcnFR функционируйте, смотрите раздел Pressure Function в нижней части этой страницы. Эта функция не имеет явной зависимости от частоты. Поэтому в частотном диапазоне, эта загрузка давления действует через все частоты решения.

structuralBoundaryLoad(fmodel,'Face',4,'Pressure',@(region,state) pressFcnFR(region, state),'Vectorized','on');

Задайте список частот для решения как от 0 до 3 500 Гц с 200 шагами.

flist = linspace(0,3500,200)*2*pi;

Решите модель с помощью модального решателя частотной характеристики путем определения объекта RF результатов модели как одних из входных параметров.

R = solve(fmodel,flist,'ModalResults',RF)
R = 
  FrequencyStructuralResults with properties:

           Displacement: [1x1 FEStruct]
               Velocity: [1x1 FEStruct]
           Acceleration: [1x1 FEStruct]
    SolutionFrequencies: [1x200 double]
                   Mesh: [1x1 FEMesh]

Постройте частотную характеристику в точке на загруженной поверхности. Точкой на поверхности 4 расположенных при максимальной отрицательной загрузке давления является (0.003; 0.0436; 0.1307). Интерполируйте смещение к этой точке и постройте результат.

queryPoint  = [0.003; 0.0436; 0.1307];
queryPointDisp = R.interpolateDisplacement(queryPoint); 

figure
plot(R.SolutionFrequencies/2/pi,abs(queryPointDisp.uy))
title('Transverse Displacement at Point on Loaded Face')
xlabel('Frequency (Hz)')
ylabel('Y-Displacement')
xlim([0.0000 3500])

Пик ответа происходит около 2 662 Гц, который является близко к второму режиму вибрации. Меньший ответ также происходит в первом режиме близко к 1 947 Гц.

Найдите индекс частоты максимальной чувствительности при помощи max функция с двумя выходными аргументами. Второй выходной аргумент обеспечивает индекс пиковой частоты.

[M, I] = max(abs(queryPointDisp.uy))
M = 1.1256e-04
I = 152

Постройте деформацию на частоте максимальной чувствительности. Прикладная загрузка такова, что преимущественно волнует вводный режим и изгибающийся режим плеча.

RD = struct();
RD.ux = R.Displacement.ux(:,I);
RD.uy = R.Displacement.uy(:,I);
RD.uz = R.Displacement.uz(:,I);

figure('units','normalized','outerposition',[0 0 1 1]);

subplot(2,2,1)
pdeplot3D(fmodel,'ColorMapData',R.Displacement.ux(:,I), ...
                 'Deformation',RD,'DeformationScaleFactor',1);
title('X-Displacement')

subplot(2,2,2)
pdeplot3D(fmodel,'ColorMapData',R.Displacement.uy(:,I), ...
                 'Deformation',RD,'DeformationScaleFactor',1);
title('Y-Displacement')

subplot(2,2,3)
pdeplot3D(fmodel,'ColorMapData',R.Displacement.uz(:,I), ...
                 'Deformation',RD,'DeformationScaleFactor',1);
title('Z-Displacement')

subplot(2,2,4)
pdeplot3D(fmodel,'ColorMapData',R.Displacement.Magnitude(:,I), ...
                 'Deformation',RD,'DeformationScaleFactor',1);
title('Magnitude')

Функция давления

Задайте функцию давления, pressFcnFR, вычислить нажатие и давление скручивания сигнализирует. Компонент давления нажатия универсален. Компонент давления скручивания подает положительное давление на левой стороне и отрицательное давление на правую сторону поверхности. Значение загрузки давления скручивания увеличивает в параболическом распределении с минимума в точке C к положительному пику в L и к отрицательному пику в R. Фактор давления скручивания для параболического распределения получен в pressFcnFR умножается с синусоидальной функцией с величиной 0,1 МПа. Универсальное значение давления нажатия составляет 10 кПа.

function p = pressFcnFR(region,~)

meanY = mean(region.y);
absMaxY = max(abs(region.y));
scaleFactor = zeros(size(region.y));

% Find IDs of the points on the left and right halves of the face
% using y-coordinate values.
leftHalfIdx = region.y <= meanY;
rightHalfIdx = region.y >= meanY;

% Define a parabolic scale factor for each half of the face.
scaleFactor(leftHalfIdx) = ((region.y(leftHalfIdx) - meanY)/absMaxY).^2;
scaleFactor(rightHalfIdx) = -((region.y(rightHalfIdx) - meanY)/absMaxY).^2;

p = 10E3 + 0.1E6*scaleFactor;

end