MGCableLengthsToKeepAircraftHorizontalFBD.html (MotionGenesis input/output).
(1) % MotionGenesis file: MGCableLengthsToKeepAircraftHorizontalFBD.txt
(2) % Copyright (c) 2018 Motion Genesis LLC.
(3) %--------------------------------------------------------------------
(4) NewtonianFrame N % Earth / aircraft hanger, Nz> down.
(5) RigidBody C % Aircraft.
(6) Point N1(N), N2(N), N3(N) % Cable end-points on N.
(7) Point C1(C), C2(C), C3(C) % Cable end-points on C.
(8) %--------------------------------------------------------------------
(9) Constant L1 = 20 m % Cable length: N1 to C1.
(10) Constant dN = 30 m % Distance between No and N1.
(11) Constant wN = 40 m % Distance between No and N2.
(12) Constant dC = 30 m % Distance between Co and C1
(13) Constant wC = 40 m % Distance between Co and C2.
(14) Constant dcm = 8 m % Distance between Co and Ccm.
(15) Constant g = 9.8 m/s^2 % Earth's gravitational acceleration.
(16) C.SetMass( m = 9000 kg ) % Affects cable tension, not position/orientation.
(17) Variable x, y, z % Locates C1 from N1.
(18) Variable q % Aircraft rotation about Nz>
(19) Variable T1, T2, T3 % Tension in cables.
(20) %--------------------------------------------------------------------
(21) % Rotational and translational kinematics.
(22) C.SetRotationMatrixZ( N, q )
-> (23) C_N = [cos(q), sin(q), 0; -sin(q), cos(q), 0; 0, 0, 1]
(24) C1.SetPosition( N1, x*Nx> + y*Ny> + z*Nz> )
-> (25) p_N1_C1> = x*Nx> + y*Ny> + z*Nz>
(26) Co.SetPosition( C1, -dC*Cx> )
-> (27) p_C1_Co> = -dC*Cx>
(28) C2.SetPosition( Co, -0.5*wC*Cy> )
-> (29) p_Co_C2> = -0.5*wC*Cy>
(30) C3.SetPosition( Co, 0.5*wC*Cy> )
-> (31) p_Co_C3> = 0.5*wC*Cy>
(32) N1.SetPosition( N2, dN*Nx> )
-> (33) p_N2_N1> = dN*Nx>
(34) N3.SetPosition( N2, wN*Ny> )
-> (35) p_N2_N3> = wN*Ny>
(36) CCm.SetPosition( Co, dcm*Cx> )
-> (37) p_Co_Ccm> = dcm*Cx>
(38) %--------------------------------------------------------------------
(39) % Symbolic expressions for cable lengths L2 and L3.
(40) L2 = C2.GetDistance( N2 ) % Cable length N2 to C2.
-> (41) L2 = 0.5*sqrt(wC^2+4*dC^2+4*y^2+4*z^2+4*(dN+x)^2+4*wC*sin(q)*(dN+x)-8*
dC*y*sin(q)-4*wC*y*cos(q)-8*dC*cos(q)*(dN+x))
(42) L3 = C3.GetDistance( N3 ) % Cable length N3 to C3.
-> (43) L3 = 0.5*sqrt(wC^2+4*dC^2+4*z^2+4*(dN+x)^2+4*(wN-y)^2+8*dC*sin(q)*(wN-y)
-8*dC*cos(q)*(dN+x)-4*wC*sin(q)*(dN+x)-4*wC*cos(q)*(wN-y))
(44) %--------------------------------------------------------------------
(45) % Constraint: Cable length N1 to C1 gives x^2 + y^2 + z^2 = L1^2
(46) CableConstraint = C1.GetDistanceSquared( N1 ) - L1^2
-> (47) CableConstraint = x^2 + y^2 + z^2 - L1^2
(48) %--------------------------------------------------------------------
(49) % Add forces from gravity and tension.
(50) Ccm.AddForce( m*g*Nz> )
-> (51) Force_Ccm> = m*g*Nz>
(52) unitVectorToN1FromC1> = N1.GetPosition(C1) / L1
-> (53) unitVectorToN1FromC1> = -x/L1*Nx> - y/L1*Ny> - z/L1*Nz>
(54) unitVectorToN2FromC2> = N2.GetPosition(C2) / L2
-> (55) unitVectorToN2FromC2> = dC/L2*Cx> + 0.5*wC/L2*Cy> - (dN+x)/L2*Nx>
- y/L2*Ny> - z/L2*Nz>
(56) unitVectorToN3FromC3> = N3.GetPosition(C3) / L3
-> (57) unitVectorToN3FromC3> = dC/L3*Cx> - 0.5*wC/L3*Cy> - (dN+x)/L3*Nx>
+ (wN-y)/L3*Ny> - z/L3*Nz>
(58) C1.AddForce( N1, T1 * unitVectorToN1FromC1> )
-> (59) Force_C1_N1> = -T1*x/L1*Nx> - T1*y/L1*Ny> - T1*z/L1*Nz>
(60) C2.AddForce( N2, T2 * unitVectorToN2FromC2> )
-> (61) Force_C2_N2> = dC*T2/L2*Cx> + 0.5*wC*T2/L2*Cy> - T2*(dN+x)/L2*Nx>
- T2*y/L2*Ny> - T2*z/L2*Nz>
(62) C3.AddForce( N3, T3 * unitVectorToN3FromC3> )
-> (63) Force_C3_N3> = dC*T3/L3*Cx> - 0.5*wC*T3/L3*Cy> - T3*(dN+x)/L3*Nx>
+ T3*(wN-y)/L3*Ny> - T3*z/L3*Nz>
(64) %--------------------------------------------------------------------
(65) % Form Nx>, Ny>, Nz> measures of resultant (net) force on C.
(66) ResultantForce> = C.GetResultantForce()
-> (67) ResultantForce> = dC*(T2/L2+T3/L3)*Cx> + 0.5*wC*(T2/L2-T3/L3)*Cy>
+ (-T1*x/L1-T2*(dN+x)/L2-T3*(dN+x)/L3)*Nx> + (T3*(wN-y)/L3-T1*y/L1-T2*y
/L2)*Ny> + (m*g-T1*z/L1-T2*z/L2-T3*z/L3)*Nz>
(68) Fx = Dot( ResultantForce>, Nx> )
-> (69) Fx = dC*cos(q)*(T2/L2+T3/L3) - T1*x/L1 - T2*(dN+x)/L2 - T3*(dN+x)/L3
- 0.5*wC*sin(q)*(T2/L2-T3/L3)
(70) Fy = Dot( ResultantForce>, Ny> )
-> (71) Fy = T3*(wN-y)/L3 + dC*sin(q)*(T2/L2+T3/L3) + 0.5*wC*cos(q)*(T2/L2-T3/L3)
- T1*y/L1 - T2*y/L2
(72) Fz = Dot( ResultantForce>, Nz> )
-> (73) Fz = m*g - T1*z/L1 - T2*z/L2 - T3*z/L3
(74) %--------------------------------------------------------------------
(75) % Form Cx>, Cy>, Cz> measures of resultant (net) moment on C about Co.
(76) ResultantMoment> = C.GetMomentOfForces(Co)
-> (77) ResultantMoment> = 0.5*wC*z*(T2/L2-T3/L3)*Cx> + (dC*T1*z/L1-m*dcm*g)*Cy>
+ 0.5*dC*wC*(T2/L2-T3/L3)*Cz> + (dC*T1*(x*sin(q)-y*cos(q))/L1+0.5*wC*
T3*(cos(q)*(dN+x)-sin(q)*(wN-y))/L3-0.5*wC*T2*(y*sin(q)+cos(q)*(dN+x))/L2)*Nz>
(78) Mx = Dot( ResultantMoment>, Cx> )
-> (79) Mx = 0.5*wC*z*(T2/L2-T3/L3)
(80) My = Dot( ResultantMoment>, Cy> )
-> (81) My = dC*T1*z/L1 - m*dcm*g
(82) Mz = Dot( ResultantMoment>, Cz> )
-> (83) Mz = dC*T1*(x*sin(q)-y*cos(q))/L1 + 0.5*dC*wC*(T2/L2-T3/L3) + 0.5*wC*
T3*(cos(q)*(dN+x)-sin(q)*(wN-y))/L3 - 0.5*wC*T2*(y*sin(q)+cos(q)*(dN+x))
/L2
(84) %--------------------------------------------------------------------
(85) % For statics: Resultant force and moment on aircraft is zero.
(86) StaticsWithConstraints = [Fx, Fy, Fz, Mx, My, Mz, CableConstraint]
-> (87) StaticsWithConstraints = [Fx, Fy, Fz, Mx, My, Mz, CableConstraint]
(88) %--------------------------------------------------------------------
(89) % Static analysis: Since equations are nonlinear, solution requires a guess.
(90) Solve( StaticsWithConstraints = 0, q=0 deg, x = dN/2 m, y=0 m, z = L1 m, &
T1 = m*g/2 N, T2 = m*g/4 N, T3 = m*g/4 N )
-> (91) q = -0.2449787 % or q = -14.03624 deg.
-> (92) x = -0.656865
-> (93) y = 9.330883
-> (94) z = 17.67776
-> (95) T1 = 26609.71
-> (96) T2 = 33811.54
-> (97) T3 = 34436.25
(98) %--------------------------------------------------------------------
(99) % Numerical values for cable lengths L2 and L3.
(100) L2value = EvaluateToNumber( L2 )
-> (101) L2value = 18.48214
(102) L3value = EvaluateToNumber( L3 )
-> (103) L3value = 18.82362
(104) %--------------------------------------------------------------------
Saved by Motion Genesis LLC. Command names and syntax: Copyright (c) 2009-2021 Motion Genesis LLC. All rights reserved.