В этом примере показано, как анализировать ссылку плеча роботизированной руки легкого веса 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);
Выразите получившиеся частоты в Гц путем деления их на . Отобразите частоты в таблице.
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;
Решите модель с помощью модального решателя частотной характеристики путем указывания, что результаты модели возражают РФ как одним из входных параметров.
R = solve(fmodel,flist,'ModalResults',RF)
R = FrequencyStructuralResults with properties: Displacement: [1×1 FEStruct] Velocity: [1×1 FEStruct] Acceleration: [1×1 FEStruct] SolutionFrequencies: [1×200 double] Mesh: [1×1 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