Разрыв в моделировании механизма: механизм заклинило или мой анализ неверен?


5

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

Я пробежал математику (подробно показано ниже) и написал код для симуляции. Я хочу знать, как связаны сила привода и длина рычага, и как сила изменяется в зависимости от угла. введите описание изображения здесь

Однако, когда я запускаю код, я получаю огромные пики в силе (см. Ниже, я ограничил силу до 10 ^ 6, чтобы лучше увидеть шаблон), но, например, я не понимаю, почему механизм заклинивает между 40 и 80 °. По какой-то причине перекрестное произведение HP с OP (то, что я называю рычагом со знаком F) проходит через ноль, но я не вижу причин, почему бы оно дало текущие размеры и установленный диапазон углов. Как я могу это исправить?

Оригинал:

введите описание изображения здесь

С усилием, ограниченным в 200N: введите описание изображения здесь

И знаменатель F:

введите описание изображения здесь

Приложение

Код:

close all
clear all

%See diagram for description of variables, units are metres
a = (2+10)*10^-3;
b = a;
c = 165*10^-3;
d = 70*10^-3;
h = 180*10^-3;

m = 8; %Mass of the mast in kg
g = 9.81; %Acceleration of gravity in m/s²

%Range of the input variables
thetaMin = 0*pi/180;
thetaMax = 100*pi/180;
tMin = 10*10^-3;
tMax = 100*10^-3;

%Vectors
theta = thetaMin:(thetaMax-thetaMin)/100:thetaMax;
t = tMin:(tMax-tMin)/100:tMax;

%Solve for F
F = zeros(length(t), length(theta)); %Actuator force
L = F; %Length of linear actuator
denominator = F; %Denominator of F, or "signed lever arm"
for i = 1:length(t)
    for j = 1:length(theta)
        M = [cos(theta(j)) sin(theta(j)) 0;
             -sin(theta(j)) cos(theta(j)) 0;
             0 0 1];

        HP = M*[-t(i);
                a;
                0];

       OP = [-b;
              h;
              0]+HP;

       L(j,i) = norm(OP);

        HG = M*[c;
                -d;
                0];

        W = [0;
             -m*g;
             0];

        weightMoment = HG(1)*W(2)-HG(2)*W(1); %cross(HG,W)
        forceLever = 1/norm(OP)*(HP(1)*OP(2)-HP(2)*OP(1)); %1/norm(OP)*cross(HP,OP)

        denominator(j,i) = forceLever;

        F(j,i) = -weightMoment/forceLever;
    end
end

%Plot results
[T,THETA] = meshgrid(t,theta);

figure(1)
surface(T*1000,THETA*180/pi,F)
ylabel('Angle (deg)')
xlabel('Slide length (mm)')
zlabel('Force (N)')
title('Actuator force')

figure(2)
surface(T*1000,THETA*180/pi,L*1000)
ylabel('Angle (deg)')
xlabel('Slide length (mm)')
zlabel('Actuator length (mm)')

figure(3)
surface(T*1000,THETA*180/pi,denominator*1000)
ylabel('Angle (deg)')
xlabel('Slide length (mm)')
zlabel('Signed lever arm')

moment(H)=HP×F+HG×W=0
F=OPOPF
HP=[cos(θ)sin(θ)sin(θ)cos(θ)](ta)
HG=[cos(θ)sin(θ)sin(θ)cos(θ)](cd)
OP=OH+HP
W=(0mg)
OH=(bh)

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

Спасибо - извините, я забыл указать диапазоны. Тета должна изменяться от 0 до того, какое бы значение линейный привод не выровнял с осью вращения - это предел устойчивости. Скажем, 100 °. Длина слайдера, скажем, от 10 мм до 100 мм. О, на самом деле, это можно увидеть на сюжете, который я разместил.
Мистер Мистер

1
Я не смотрел слишком внимательно, но я бы предположил, что это та точка, где в строке, где вы вычисляете F, вы делите на ноль. По крайней мере, я не вижу другого способа, чтобы вы могли легко получить бесконечность в своем коде.
Ниваг

Я тоже это видел, но знаменатель никогда не должен быть нулевым в этих местах ...
Мистер Мистер

Ну, похоже, у тебя определенно есть какая-то странная цифра. Вы выделили несколько точек тестовых данных, где вы получили огромные всплески, и пошагово пошагово просмотрели код, чтобы убедиться, что вы получаете подходящие значения переменных?
rfdave

Ответы:


3

Если вы построите значения x OP и HP, они пересекают ноль, что кажется нефизическим.

Если присмотреться поближе, вы делаете свои вращения в обратном направлении, то есть вы делаете наши вращения в + тета, тогда как вы хотите войти в -тета.

Это то, что я часто делаю тоже. Чтобы исправить, просто замените theta на -theta в M.

Вот фигура F, когда вы делаете это, которая выглядит гораздо более разумной.

введите описание изображения здесь


Большое спасибо, у меня наконец есть разумные F-сюжеты! Я тщательно использовал -tata в своей матрице вращения, потому что матрица вращения передается от системы отсчета 1 к системе отсчета 2 при повороте от 1 до 2 ... Это очень странно, но результаты говорят сами за себя; Я посмотрю на это позже.
Мистер Мистер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.