이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
MATLAB에서 시스템 동특성 분석하기
이 예제는 Simscape Multibody의 MATLAB 클래스를 사용하여 4절 링크 시스템의 동특성을 분석하는 방법을 보여줍니다. 이 예제 시스템은 길이가 각각 5cm
, 8cm
, 10cm
, 12cm
인 4개의 링크를 가진 크랭크-로커 메커니즘입니다.
이 이미지는 시스템의 초기 구성을 보여주며, 여기서 크랭크 링크와 베이스 링크 사이의 각도는 60도입니다. 크랭크 링크는 초당 10도의 각속도로 시스템을 구동합니다. 또한, 5deg/s²
의 각가속도로 크랭크 링크가 추진되고, 50N
의 부하가 로커 링크의 말단부에 작용합니다. 이 힘은 월드 프레임의 x축 방향에 맞춰집니다.
4절 링크 시스템 만들기
4절 링크 멀티바디 시스템을 생성하려면, 예제를 열어서 다음과 같이 링크 길이를 지정하여 사용자 지정 함수 fourbar
를 사용합니다. MATLAB에서 4절 링크 시스템을 구축하는 자세한 지침은 MATLAB에서 멀티바디 시스템 모델링하기 항목을 참조하십시오.
import simscape.multibody.* simscape.Value simscape.op.* [fb,op] = fourBar(simscape.Value(12,"cm"), simscape.Value(10,"cm"), simscape.Value(5,"cm"), simscape.Value(8,"cm"));
이 4절 링크 시스템은 X-Y 평면 내에서 작동하며, 중력은 -y 방향으로 작용합니다.
멀티바디 시스템을 분석하기 전에, 연결된 멀티바디 객체를 컴파일합니다.
cfb = compile(fb);
초기 조인트 프리미티브 목표값을 설정하기 위해, 동작점 객체 jointOP
를 만듭니다.
jointOP = simscape.op.OperatingPoint; jointOP("Bottom_Left_Joint/Rz/q") = simscape.op.Target(60,"deg","High"); jointOP("Bottom_Right_Joint/Rz/q") = simscape.op.Target(90,"deg","Low"); jointOP("Bottom_Left_Joint/Rz/w") = simscape.op.Target(10,"deg/s","High");
4절 링크 시스템이 모든 지정된 목표값을 충족하는지 확인하기 위해, computeState
메서드를 사용하여 시스템의 상태를 계산합니다.
state = computeState(cfb,jointOP)
state = State: Status: Valid Assembly diagnostics: x Bottom_Left_Joint 'Bottom_Left_Joint' successfully assembled Rz High priority position target +60 (deg) achieved High priority velocity target +10 (deg/s) achieved Top_Left_Joint 'Top_Left_Joint' successfully assembled Rz Free position value: +38.485 (deg) Free velocity value: +12.7749 (deg/s) Bottom_Right_Joint 'Bottom_Right_Joint' successfully assembled Rz Low priority position target +90 (deg) not achieved; actual value: +91.4095 (deg) Free velocity value: +4.14183 (deg/s) Top_Right_Joint 'Top_Right_Joint' successfully assembled Rz Free position value: +69.8945 (deg) Free velocity value: +6.91669 (deg/s)
결과는 시스템이 지정된 모든 목표값을 충족함을 나타냅니다.
시스템을 시각화하려면 다음과 같이 visualize
메서드를 사용하십시오.
visualize(cfb,computeState(cfb,jointOP),"vizFourBar")
조인트 내부 메카닉스 지정하기
현실 사례에서는 기계 시스템의 조인트가 이상적이지 않기 때문에 종종 에너지 손실이 발생합니다. 이 현상을 시스템에 반영하려면 simscape.multibody.JointForceLaw
클래스의 서브클래스를 사용하여 스프링 속성과 감쇠 속성을 지정하십시오.
비틀림 스프링-댐퍼 법칙을 표현하기 위해, simscape.multibody.TorsionalSpringDamper
객체를 만듭니다.
tsd = simscape.multibody.TorsionalSpringDamper;
스프링의 평형 위치와 강성을 설정하기 위해, simscape.Value
객체를 사용합니다.
tsd.EquilibriumPosition = simscape.Value(90,"deg"); tsd.SpringStiffness = simscape.Value(0.5,"N*cm/deg")
tsd = TorsionalSpringDamper with properties: EquilibriumPosition: 90 (deg) SpringStiffness: 0.5000 (N*cm/deg) DampingCoefficient: 0 (N*m*s/deg)
댐퍼의 감쇠 계수를 지정하기 위해, simscape.Value
객체를 사용합니다.
tsd.DampingCoefficient = simscape.Value(0.1,"N*cm/(rev/s)")
tsd = TorsionalSpringDamper with properties: EquilibriumPosition: 90 (deg) SpringStiffness: 0.5000 (N*cm/deg) DampingCoefficient: 0.1000 (N*cm*s/rev)
단순화하기 위해, 모든 조인트 프리미티브에 동일한 스프링-댐퍼 법칙을 적용합니다.
Bottom_Left_Joint.Rz.ForceLaws = tsd; Top_Left_Joint.Rz.ForceLaws = tsd; Top_Right_Joint.Rz.ForceLaws = tsd; Bottom_Right_Joint.Rz.ForceLaws = tsd;
조인트 액추에이션과 외부 부하 모델링하기
시스템 다이어그램에 표시된 것처럼 크랭크 링크는 5deg/s^2
의 각가속도로 시스템을 구동하고, 로커 링크의 말단부에는 50N의 부하가 작용합니다. 시스템의 가속도와 부하를 생성하려면 simscape.multibody.JointAccelerationDictionary
클래스와 simscape.multibody.ExternalForceTorqueDictionary
클래스를 사용합니다.
조인트 가속도를 연결된 조인트 프리미티브와 쌍을 이루어 저장하기 위해, dict_accel
딕셔너리를 사용합니다.
dict_accel = simscape.multibody.JointAccelerationDictionary; accel_revolute = simscape.multibody.RevolutePrimitiveAcceleration(simscape.Value(5,"deg/s^2")); dict_accel("Bottom_Left_Joint/Rz") = accel_revolute;
기본적으로 시스템 내의 모든 조인트 프리미티브는 액추에이션 토크가 0입니다. 하지만 왼쪽 하단 조인트에서는 각가속도가 발생합니다. 동특성 계산 중에 균형을 유지하려면, 하나의 조인트 프리미티브를 지정하여 토크를 자동으로 계산하도록 해야 합니다. 예를 들어, simscape.multibody.JointActuationDictionary
클래스를 사용하여 커넥터 링크와 로커 링크 사이의 조인트 프리미티브를 자동으로 계산되도록 지정할 수 있습니다.
dict_t = simscape.multibody.JointActuationDictionary; torque = simscape.multibody.RevolutePrimitiveActuationTorque("Computed"); dict_t("Top_Right_Joint/Rz") = torque;
부하를 연결된 프레임 커넥터와 쌍을 이루어 저장하기 위해, dict_f
딕셔너리를 사용합니다. 부하는 월드 프레임의 x축 방향에 맞춰집니다.
dict_f = simscape.multibody.ExternalForceTorqueDictionary; force = simscape.multibody.ExternalForce(simscape.Value([50 0 0],"N"),"World"); dict_f("Right_Link/pos_end/f") = force;
동특성 계산하기
지정된 상태 입력값과 액추에이션 입력값을 사용하여 4절 링크 시스템의 동특성을 계산하기 위해, computeDynamics
메서드를 사용합니다.
dynamicsResult = computeDynamics(cfb,state,dict_accel,dict_t,dict_f);
이제 시스템 내 모든 조인트 프리미티브의 위치, 속도, 가속도를 쿼리할 수 있습니다. 예를 들어, 베이스 링크와 로커 링크 사이에 있는 조인트 프리미티브의 각속도와 각가속도를 구하려면 jointPrimitiveVelocity
메서드와 jointPrimitiveAcceleration
메서드를 사용합니다.
vel_bottom_right = jointPrimitiveVelocity(cfb,"Bottom_Right_Joint/Rz",state)
vel_bottom_right = 4.1418 (deg/s)
accel_bottom_right = jointPrimitiveAcceleration(cfb,"Bottom_Right_Joint/Rz",dynamicsResult)
accel_bottom_right = 3.0495 (deg/s^2)
참고 항목
simscape.multibody.Component
| simscape.multibody.CompiledMultibody