MGAircraftTrifilarPendulumConstraints.html   (MotionGenesis input/output).
   (1) % MotionGenesis file:  MGAircraftTrifilarPendulumConstraints.txt
   (2) % Copyright (c) 2016-18 Motion Genesis LLC.
   (3) %--------------------------------------------------------------------
   (4) NewtonianFrame  N                    % Earth / aircraft hanger.
   (5) RigidBody       C                    % Aircraft.
   (6) Point           N1(N), N2(N), N3(N)  % End-points of cable on N.
   (7) Point           C1(C), C2(C), C3(C)  % End-points of cable on C.
   (8) %--------------------------------------------------------------------
   (9) Constant  L1 = 30 m                  % Length of cable between N1 and C1.
   (10) Constant  L2 = 30 m                  % Length of cable between N2 and C2.
   (11) Constant  L3 = 30 m                  % Length of cable between N3 and C3.
   (12) Constant  dN = 30 m                  % Distance between No and N1.
   (13) Constant  dC = 30 m                  % Distance between Co and C1.
   (14) Constant  wN = 20 m                  % Distance between No and N2.
   (15) Constant  wC = 20 m                  % Distance between Co and C2.
   (16) Constant dcm =  8 m                  % Distance between Co and Ccm.
   (17) Variable  x,   y,   z                % Locates Ccm from No.
   (18) Variable  q1,  q2,  q3               % BodyZYX Euler angles.
   (19) %--------------------------------------------------------------------
   (20) %   Rotational and translational kinematics.
   (21) C.SetRotationMatrix( N, BodyZYX, q1, q2, q3 )
-> (22) C_N[1,1] = cos(q1)*cos(q2)
-> (23) C_N[1,2] = sin(q1)*cos(q2)
-> (24) C_N[1,3] = -sin(q2)
-> (25) C_N[2,1] = sin(q2)*sin(q3)*cos(q1) - sin(q1)*cos(q3)
-> (26) C_N[2,2] = cos(q1)*cos(q3) + sin(q1)*sin(q2)*sin(q3)
-> (27) C_N[2,3] = sin(q3)*cos(q2)
-> (28) C_N[3,1] = sin(q1)*sin(q3) + sin(q2)*cos(q1)*cos(q3)
-> (29) C_N[3,2] = sin(q1)*sin(q2)*cos(q3) - sin(q3)*cos(q1)
-> (30) C_N[3,3] = cos(q2)*cos(q3)

   (31) CCm.SetPosition( No, x*Nx> + y*Ny> + z*Nz> )
-> (32) p_No_Ccm> = x*Nx> + y*Ny> + z*Nz>

   (33) Co.SetPosition( CCm, -dcm*Cx> )
-> (34) p_Ccm_Co> = -dcm*Cx>

   (35) C1.SetPosition( Co,    dC*Cx> )
-> (36) p_Co_C1> = dC*Cx>

   (37) C2.SetPosition( Co,   -wC*Cy> )
-> (38) p_Co_C2> = -wC*Cy>

   (39) C3.SetPosition( Co,    wC*Cy> )
-> (40) p_Co_C3> = wC*Cy>

   (41) N1.SetPosition( No,    dN*Nx> )
-> (42) p_No_N1> = dN*Nx>

   (43) N2.SetPosition( No,   -wN*Ny> )
-> (44) p_No_N2> = -wN*Ny>

   (45) N3.SetPosition( No,    wN*Ny> )
-> (46) p_No_N3> = wN*Ny>

   (47) %--------------------------------------------------------------------
   (48) %   Configuration constraints: Length of cables.
   (49) CableConstraint[1] = C1.GetDistanceSquared( N1 ) - L1^2
-> (50) CableConstraint[1] = (dC-dcm)^2 + y^2 + z^2 + (dN-x)^2 + 2*(dC-dcm)*y*
        sin(q1)*cos(q2) - L1^2 - 2*(dC-dcm)*z*sin(q2) - 2*(dC-dcm)*cos(q1)*cos(
        q2)*(dN-x)

   (51) CableConstraint[2] = C2.GetDistanceSquared( N2 ) - L2^2
-> (52) CableConstraint[2] = dcm^2 + wC^2 + x^2 + z^2 + (wN+y)^2 + 2*dcm*z*sin(q2)
        + 2*wC*x*(sin(q1)*cos(q3)-sin(q2)*sin(q3)*cos(q1)) - L2^2 - 2*dcm*x*cos
        (q1)*cos(q2) - 2*wC*z*sin(q3)*cos(q2) - 2*dcm*sin(q1)*cos(q2)*(wN+y)
        - 2*wC*(wN+y)*(cos(q1)*cos(q3)+sin(q1)*sin(q2)*sin(q3))

   (53) CableConstraint[3] = C3.GetDistanceSquared( N3 ) - L3^2
-> (54) CableConstraint[3] = dcm^2 + wC^2 + x^2 + z^2 + (wN-y)^2 + 2*dcm*z*sin(q2)
        + 2*wC*z*sin(q3)*cos(q2) + 2*dcm*sin(q1)*cos(q2)*(wN-y) - L3^2 - 2*dcm*
        x*cos(q1)*cos(q2) - 2*wC*x*(sin(q1)*cos(q3)-sin(q2)*sin(q3)*cos(q1))
        - 2*wC*(wN-y)*(cos(q1)*cos(q3)+sin(q1)*sin(q2)*sin(q3))

   (55) %--------------------------------------------------------------------
   (56) %   Calculate yaw, pitch and roll angles in terms of q1, q2, q3.
   (57) Yaw   = GetAngleBetweenUnitVectors( Nx>, Cy> )  -  pi/2
-> (58) Yaw = -1.570796 + acos(sin(q2)*sin(q3)*cos(q1)-sin(q1)*cos(q3))

   (59) Pitch = GetAngleBetweenUnitVectors( Nz>, Cx> )  -  pi/2
-> (60) Pitch = 1.570796 - acos(sin(q2))

   (61) Roll  = pi/2  -  GetAngleBetweenUnitVectors( Nz>, Cy> )
-> (62) Roll = 1.570796 - acos(sin(q3)*cos(q2))

   (63) %--------------------------------------------------------------------
   (64) %   Solve for values of q1, q2, q3 via yaw, pitch, roll angles.
   (65) Constant  Yaw0 = 0 deg,  Pitch0 = 5 deg,  Roll0 = 5 deg
   (66) Solve( [Yaw; Pitch; Roll] = [Yaw0; Pitch0; Roll0],  q1 = 0 deg, q2 = 5 deg, q3 = 5 deg )
-> (67) q1 = 0.007654341       %  or  q1 = 0.4385614 deg.
-> (68) q2 = 0.08726646       %  or  q2 = 5 deg.
-> (69) q3 = 0.08760066       %  or  q3 = 5.019148 deg.

   (70) %--------------------------------------------------------------------
   (71) %   Solve for values of x, y, z using the CableConstraint (and the values of q1, q2, q3).
   (72) Solve( CableConstraint = 0,  x = Input(dN)/2 m,  y=0 m,  z = 0.2*Input(L1) m )
-> (73) x = 35.7853
-> (74) y = 11.1512
-> (75) z = -0.2130373

   (76) %--------------------------------------------------------------------
   (77) %   Calculate the distance between No and Ccm.
   (78) distance = EvaluateToNumber( Ccm.GetDistance( No ) )
-> (79) distance = 37.4831

   (80) %--------------------------------------------------------------------
Saved by Motion Genesis LLC.   Command names and syntax: Copyright (c) 2009-2021 Motion Genesis LLC. All rights reserved.