[38ba34]: / Application / Examples / AirlinePassenger / Model / Environment.any

Download this file

538 lines (460 with data), 16.1 kB

//---------------------------------------------------------------
// Chair package
//---------------------------------------------------------------

// AnyFolder &RefPP = Main.PackageParameters;

//------------------------------------------------------
// Global Reference Frame
//------------------------------------------------------ 



AnyFixedRefFrame GlobalRef = {
  
  AnyFolder &Dim = .Seg.ChairDimensions;
  
  AnyRefNode GroundNode = {
    sRel = {1/2*.Dim.SeatLength, -.Dim.BackRestHeight, 0};
  };  
  
  
  /*
  AnyRefNode CoMNode = {
  sRel = {0.069568, -0.589986, -0.000000};
  AnyDrawRefFrame DrwRef = {
  RGB = {0, 1, 0};
  ScaleXYZ = {0.3, 0.3, 0.3};
  };  
  };
  */
  
};  // Global reference frame

//-----------------------------------------------------
// Segments
//-----------------------------------------------------

AnyFolder Seg = {
  
  AnyFolder ChairDimensions = {
    
    AnyVar FootRestLength = 0.50;
    AnyVar FootRestWidth = 0.40;
    AnyVar FootRestThickness = 0.05;
    AnyVar BackRestHeight = 0.90;
    AnyVar BackRestWidth = 0.40;
    AnyVar BackRestThickness = 0.05;
    AnyVar SeatLength = 0.50;
    AnyVar SeatWidth = 0.40;
    AnyVar SeatThickness = 0.05;
    AnyVar HeadRestHeight = 0.2;
    AnyVar HeadRestWidth = 0.2;
    AnyVar HeadRestThickness = 0.05;
    AnyVar LegRestLength = 0.6;
    AnyVar LegRestWidth = 0.3;
    AnyVar LegRestThickness = 0.05;
    AnyVar ArmRestX = 0.30;
    AnyVar ArmRestY = 0.3;
    AnyVar ArmRestZ = 0.05;      
    AnyVar ArmRestHeight = 0.32;    
  }; // ChairDimensions  
  
  //--------------------------------------------------------
  // BackRest
  //--------------------------------------------------------
  
  AnySeg BackRest = {
    
    AnyFolder &Dim = .ChairDimensions;
    Mass = 0.0;
    AnyVar Ixx = 1/12*(Dim.BackRestHeight^2+Dim.BackRestWidth^2);
    AnyVar Iyy = 1/12*(Dim.BackRestThickness^2+Dim.BackRestWidth^2);
    AnyVar Izz = 1/12*(Dim.BackRestHeight^2+Dim.BackRestThickness^2);
    Jii = {Ixx, Iyy, Izz};

    AnyRefNode BackRestSeatJntNode = {
      sRel = {0, -1/2*.Dim.BackRestHeight, 0};
    };
    
    AnyRefNode BackRestHeadRestJntNode = {
      sRel = {0, 1/2*.Dim.BackRestHeight, 0};
    };
     AnyRefNode BackRestSupportNode = {
      sRel = {-0.2, -0.2, 0};
    };
    
    AnyRefNode BackArmRestRightJntNode = {
      sRel = {0, .Dim.ArmRestHeight-1/2*.Dim.BackRestHeight, 1/2*.Dim.BackRestWidth};
    };
    
    AnyRefNode BackArmRestLeftJntNode = {
      sRel = {0, .Dim.ArmRestHeight-1/2*.Dim.BackRestHeight, -1/2*.Dim.BackRestWidth};
    };
        
    AnyDrawSTL BackRest = {
      FileName = "../Input/BackRest.stl";
      RGB = {0, 0, 1};
      Opacity = 0.2;
        AnyStyleDrawMaterial1 style = 
        {
          EnableCreasing = On;
          CreasingAngle = 0.524;
          SpecularRGB = 0.05*{1,1,1};
        };      
    };
  }; // BackRest        
  
  //--------------------------------------------------------
  // Seat
  //--------------------------------------------------------
  
  AnySeg Seat = {
    
    AnyFolder &Dim = .ChairDimensions;
    Mass = 0.0;
    AnyVar Ixx = 1/12*(Dim.SeatWidth^2+Dim.SeatThickness^2);
    AnyVar Iyy = 1/12*(Dim.SeatLength^2+Dim.SeatWidth^2);
    AnyVar Izz = 1/12*(Dim.SeatLength^2+Dim.SeatThickness^2);
    Jii = {Ixx, Iyy, Izz};
    AnyRefNode SeatNode = {
      sRel = {0, 0, 0};
      ARel = {{0, 1, 0}, {-1, 0, 0}, {0, 0, 1}};
      
      AnyDrawSTL Seat = {
        FileName = "../Input/Seat.stl";
        RGB = {0, 0, 1};
        Opacity = 0.2;
        AnyStyleDrawMaterial1 style = 
        {
          EnableCreasing = On;
          CreasingAngle = 0.524;
          SpecularRGB = 0.05*{1,1,1};
        };
      };
      
    };
    
    AnyRefNode SeatBackRestJntNode = {
      sRel = {0, 1/2*.Dim.SeatLength, 0};
    };
    
    AnyRefNode SeatAdjNode = {
      sRel = {0, 0, 0};
    };
    
    AnyRefNode SeatLegRestJntNode = {
      sRel = {0, -1/2*.Dim.SeatLength, 0};
    };    
  }; // Seat 
  
  //-----------------------------------------------------
  // HeadRest
  //-----------------------------------------------------
  
  AnySeg HeadRest = {
    
    AnyFolder &Dim = .ChairDimensions;
    Mass = 0.0;
    AnyVar Ixx = 1/12*(Dim.HeadRestHeight^2+Dim.HeadRestWidth^2);
    AnyVar Iyy = 1/12*(Dim.HeadRestWidth^2+Dim.HeadRestThickness^2);
    AnyVar Izz = 1/12*(Dim.HeadRestHeight^2+Dim.HeadRestThickness^2);
    Jii = {Ixx, Iyy, Izz};
    
    AnyRefNode HeadRestBackRestJntNode = {
      sRel = {0, -1/2*.Dim.HeadRestHeight, 0};
      // AnyDrawNode DrwNode = {};
    };
    
    // AnyDrawSeg HeadRest = {};
    /*
    AnyDrawSTL HeadRest = {
    FileName = "../Input/HeadRest.stl";
    RGB = {0, 0, 1};
    Opacity = 0.4;      
    };
    */
  }; // HeadRest
  
  //-------------------------------------------------------
  // LegRest
  //-------------------------------------------------------
  
  AnySeg LegRest = {
    AnyFolder &Dim = .ChairDimensions;
    Mass = 0.0;
    AnyVar Ixx = 1/12*(Dim.LegRestLength^2+Dim.LegRestWidth^2);
    AnyVar Iyy = 1/12*(Dim.LegRestWidth^2+Dim.LegRestThickness^2);
    AnyVar Izz = 1/12*(Dim.LegRestLength^2+Dim.LegRestThickness^2);
    Jii = {Ixx, Iyy, Izz};
    
    AnyRefNode LegRestSeatJntNode = {
      sRel = {0, 1/2*.Dim.LegRestLength, 0};
    };
          
    AnyRefNode LegRestFootRestJntNode = {
      sRel = {0, -1/2*.Dim.LegRestLength, 0};
    };    
    
    AnyDrawSTL LegRest = {
      FileName = "../Input/LegRest.stl";       
      RGB = {0, 0, 1};
      Opacity = 0.2;
        AnyStyleDrawMaterial1 style = 
        {
          EnableCreasing = On;
          CreasingAngle = 0.524;
          SpecularRGB = 0.05*{1,1,1};
        };      
    };
    
  }; // LegRest 
  
  //---------------------------------------------------
  // FootRest
  //---------------------------------------------------
  
  AnySeg FootRest = {
    
    AnyFolder &Dim = .ChairDimensions;
    Mass = 5.0;
    AnyVar Ixx = 1/12*(Dim.FootRestThickness^2+Dim.FootRestWidth^2);
    AnyVar Iyy = 1/12*(Dim.FootRestLength^2+Dim.FootRestWidth^2);
    AnyVar Izz = 1/12*(Dim.FootRestLength^2+Dim.FootRestThickness^2);
    Jii = {Ixx, Iyy, Izz};     
    
    AnyRefNode FootRestLegRestJntNode = {
      sRel = {0, 1/2*.Dim.FootRestLength, 0};
      ARel = {{0, 1, 0}, {-1, 0, 0}, {0, 0, 1}};
      /*
      AnyDrawRefFrame DrwRefFrame = {
      RGB = {1, 1, 0};
      ScaleXYZ = {0.3, 0.3, 0.3};
      };
      */
    };
    // AnyDrawSeg DrwSeg = {};
    
    AnyDrawSTL DrwSTL = {
      FileName = "../Input/FootRest2.stl";
      RGB = {0,0, 1};
      Opacity = 0.2;
        AnyStyleDrawMaterial1 style = 
        {
          EnableCreasing = On;
          CreasingAngle = 0.524;
          SpecularRGB = 0.05*{1,1,1};
        };      
    };
    
  }; // FootRest    
  
//  //---------------------------------------------------
//  // ArmRestRight
//  //---------------------------------------------------
//  
//  AnyFolder Right = {
//    
//    AnySeg ArmRest = {
//      
//      AnyFolder &Dim = ..ChairDimensions;
//      Mass = 1.0;
//      AnyVar Ixx = 1/12*(Dim.ArmRestZ^2+Dim.ArmRestX^2);
//      AnyVar Iyy = 1/12*(Dim.ArmRestY^2+Dim.ArmRestX^2);
//      AnyVar Izz = 1/12*(Dim.ArmRestY^2+Dim.ArmRestZ^2);
//      Jii = {Ixx, Iyy, Izz};     
//      
//      AnyRefNode BackArmRestJntNode = {
//        sRel = {0, .Dim.ArmRestX, -1/2*.Dim.ArmRestZ};       
//      };
//
//      AnyRefNode ArmRestUlnaJntNodeFront = {
//        sRel = {0, -1/2*.Dim.ArmRestY, 0};//-1/2*.Dim.ArmRestZ};
//      };
//
//      AnyRefNode ArmRestUlnaJntNodeBack = {
//        sRel = {0, 1/2*.Dim.ArmRestY, 0};//-1/2*.Dim.ArmRestZ};
//      };
//
////      AnyDrawSeg DrwSeg = {};
//      
//      AnyRefNode STLholder = {
//        sRel = {-0.45, 0, 0};
//        AnyDrawSTL DrwSTL = {
//          FileName = "../Input/ArmRest3.stl";
//          RGB = {0, 0, 1};
//          Opacity = 0.2;
//        };
//      };     
//    }; // ArmRest    
//    
//  }; // Right
//  
//  AnyFolder Left = {
//    
//    AnySeg ArmRest = {
//      
//      AnyFolder &Dim = ..ChairDimensions;
//      Mass = 1.0;
//      AnyVar Ixx = 1/12*(Dim.ArmRestZ^2+Dim.ArmRestX^2);
//      AnyVar Iyy = 1/12*(Dim.ArmRestY^2+Dim.ArmRestX^2);
//      AnyVar Izz = 1/12*(Dim.ArmRestY^2+Dim.ArmRestZ^2);
//      Jii = {Ixx, Iyy, Izz};     
//      
//      AnyRefNode BackArmRestJntNode = {
//        sRel = {0, .Dim.ArmRestX, -1/2*.Dim.ArmRestZ};       
//      };
//
//      AnyRefNode ArmRestUlnaJntNodeFront = {
//        sRel = {0, -1/2*.Dim.ArmRestY, 0};//-1/2*.Dim.ArmRestZ};
//      };
//
//      AnyRefNode ArmRestUlnaJntNodeBack = {
//        sRel = {0, 1/2*.Dim.ArmRestY, 0};//-1/2*.Dim.ArmRestZ};
//      };
//
////      AnyDrawSeg DrwSeg = {};
//      
//      AnyRefNode STLholder = {
//        sRel = {-0.45, 0, 0};
//        AnyDrawSTL DrwSTL = {
//          FileName = "../Input/ArmRest3.stl";
//          RGB = {0, 0, 1};
//          Opacity = 0.2;
//        };
//      };     
//    }; // ArmRest    
//    
//  }; // Left
  
}; // Seg

//--------------------------------------
// Joints
//--------------------------------------

AnyFolder Jnt = {
  
  AnyKinLinear SeatGlobalLinMeasure = {
    AnyRefNode &SegNode = ..Seg.Seat.SeatAdjNode;
    AnyRefNode &GroundNode = ..GlobalRef.GroundNode;
  };        
  
  AnyKinRotational SeatGlobalRotMeasure = {
    AnyRefNode &SegNode = ..Seg.Seat.SeatAdjNode;
    AnyRefNode &GroundNode = ..GlobalRef.GroundNode;
    Type = RotVector;
  };        
  
  AnyKinEq SeatGlobalConst = {
    AnyKinLinear &LinMeasure = .SeatGlobalLinMeasure;
    AnyKinRotational &RotMeasure = .SeatGlobalRotMeasure;
    MeasureOrganizer = {0, 2, 3, 4};
    Reaction.Type = {Off, Off, Off, Off};
  };
  
  // Create reaction forces between the seat and the environment
  AnyReacForce SeatSupport = {
    AnyKinLinear SeatGlobalLinMeasure = {
      AnyRefFrame &Seat = ...Seg.Seat;
      AnyRefFrame &Ground = ...GlobalRef;
      Ref = 0;  // In the seat reference frame
    };
    AnyKinRotational &Rot = .SeatGlobalRotMeasure;
  };
  
  
  AnyRevoluteJoint SeatBackRestJnt = {
    Axis = z;
    AnyRefNode &Seatnode = ..Seg.Seat.SeatBackRestJntNode;  
    AnyRefNode &BackRestNode = ..Seg.BackRest.BackRestSeatJntNode;
    Constraints.Reaction.Type = {Off, Off, Off, Off, Off};
  }; // SeatBackRestLink
  
  AnyRevoluteJoint BackRestHeadRestJnt = {
    Axis = z;
    AnyRefNode &BackRestNode = ..Seg.BackRest.BackRestHeadRestJntNode;
    AnyRefNode &HeadRestNode = ..Seg.HeadRest.HeadRestBackRestJntNode;
  }; // BackRestHeadRestLink
  
  AnyRevoluteJoint SeatLegRestJnt = {
    Axis = z; 
    AnyRefNode &LegRestNode = ..Seg.LegRest.LegRestSeatJntNode;
    AnyRefNode &SeatNode = ..Seg.Seat.SeatLegRestJntNode;
    Constraints.Reaction.Type = {Off, Off, Off, Off, Off};    
  }; // SeatLegRestLink
  
  AnyPrismaticJoint LegRestFootRestJnt = {
    Axis = y;
    Ref = 1;
    AnyRefNode &LegRestNode = ..Seg.LegRest.LegRestFootRestJntNode;
    AnyRefNode &FootRestNode = ..Seg.FootRest.FootRestLegRestJntNode;
  };
  
  // Additional reactions to tie the backrest and legrest to ground
  AnyReacForce BackRestGrounding = {
    AnyKinLinear Lin = {
      AnyRefFrame &Ground = ...GlobalRef;
      AnyRefFrame &BackRest = ...Seg.BackRest;
    };
    AnyKinRotational Rot = {
      AnyRefFrame &Ground = ...GlobalRef;
      AnyRefFrame &BackRest = ...Seg.BackRest;
      Type = RotAxesAngles;
    };
  };

  AnyReacForce LegRestGrounding = {
    AnyKinLinear Lin = {
      AnyRefFrame &Ground = ...GlobalRef;
      AnyRefFrame &LegRest = ...Seg.LegRest;
    };
    AnyKinRotational Rot = {
      AnyRefFrame &Ground = ...GlobalRef;
      AnyRefFrame &LegRest = ...Seg.LegRest;
      Type = RotAxesAngles;
    };
  };
  
  // Arm rests  
//  AnyFolder Right = {
//    
//    AnyRevoluteJoint BackArmRestJoint = {
//      AnyRefNode &BackNode = ...Seg.BackRest.BackArmRestRightJntNode;
//      AnyRefNode &ArmRestNode = ...Seg.Right.ArmRest.BackArmRestJntNode;
//      Ref = 1;
//    };        
//    
//    AnyKinRotational GlobalArmRestRotMeasure = {
//      AnyRefFrame &Global = Main.Model.EnvironmentModel.GlobalRef;
//      AnyRefNode &ArmRestNode = ...Seg.Right.ArmRest.BackArmRestJntNode;
//      Type = RotVector;
//    };        
//    
//    AnyKinEqSimpleDriver GlobalArmRestAngle = {
//      AnyKinRotational &RotMeasure = .GlobalArmRestRotMeasure;
//      MeasureOrganizer = {2};
//      DriverPos = {90*pi/180};
//      DriverVel = {0};
//    };
//            
//  }; // Right
//  
//  AnyFolder Left = {
//    
//    AnyRevoluteJoint BackArmRestJoint = {
//      AnyRefNode &BackNode = ...Seg.BackRest.BackArmRestLeftJntNode;
//      AnyRefNode &ArmRestNode = ...Seg.Left.ArmRest.BackArmRestJntNode;
//      Ref = 1;
//    };        
//    
//    AnyKinRotational GlobalArmRestRotMeasure = {
//      AnyRefFrame &Global = Main.Model.EnvironmentModel.GlobalRef;
//      AnyRefNode &ArmRestNode = ...Seg.Left.ArmRest.BackArmRestJntNode;
//      Type = RotVector;
//    };        
//    
//    AnyKinEqSimpleDriver GlobalArmRestAngle = {
//      AnyKinRotational &RotMeasure = .GlobalArmRestRotMeasure;
//      MeasureOrganizer = {2};
//      DriverPos = {90*pi/180};
//      DriverVel = {0};
//    };
//  }; // Left    
  
}; // Joints


AnyFolder Drivers={
 

  AnyFolder &DrvPos = Main.DrvPos;
  AnyFolder &DrvVel = Main.DrvVel;
  
  
//--------------------------------------------------------
  // Drivers - Chair adjustments
  //--------------------------------------------------------
  
//  AnyKinEqSimpleDriver SeatBackRestDrv = {
//    AnyRevoluteJoint &Jnt = ..Jnt.SeatBackRestJnt;
//    DriverPos = {.DrvPos.SeatBackRestRotZPos};
//    DriverVel = {.DrvVel.SeatBackRestRotZVel};
//    Reaction.Type = {On};
//  };
  
  AnyKinEqSimpleDriver GlobalBackRestDrv = {
    AnyKinRotational rot = {
      AnyRefFrame &Back = Main.Model.EnvironmentModel.Seg.BackRest;
      Type = RotAxesAngles;
    };
    MeasureOrganizer = {0};
    DriverPos = {.DrvPos.GlobalBackRestRotZPos*pi/180};
    DriverVel = {.DrvVel.GlobalBackRestRotZVel*pi/180};
    Reaction.Type = {Off};
  };  
  
  AnyKinEqSimpleDriver SeatGlobalDrv = {
    AnyKinLinear &LinMeasure = ..Jnt.SeatGlobalLinMeasure;
    AnyKinRotational &RotMeasure = ..Jnt.SeatGlobalRotMeasure;
    MeasureOrganizer = {1,5};
    DriverPos = {.DrvPos.SeatGlobalLinYPos,(-90+.DrvPos.SeatGlobalRotZPos)*pi/180};
    DriverVel = {.DrvVel.SeatGlobalLinYVel,.DrvVel.SeatGlobalRotZVel*pi/180};
    Reaction.Type = {Off,Off};
  };
  
  AnyKinEqSimpleDriver BackRestHeadRestDrv = {
    AnyRevoluteJoint &Jnt = ..Jnt.BackRestHeadRestJnt;
    DriverPos = {.DrvPos.BackRestHeadResRotZPos*pi/180};
    DriverVel = {0};
    Reaction.Type = {On};
  };  
  
//  AnyKinEqSimpleDriver SeatLegRestDrv = {
//    AnyRevoluteJoint &Jnt = ..Jnt.SeatLegRestJnt;
//    DriverPos = {.DrvPos.SeatLegRestRotZPos};
//    DriverVel = {.DrvVel.SeatLegRestRotZVel};
//    Reaction.Type = {On};
//  };

  AnyKinEqSimpleDriver GlobalLegRestDrv = {
    AnyKinRotational rot = {
      AnyRefFrame &LegRest = Main.Model.EnvironmentModel.Seg.LegRest;
      Type = RotAxesAngles;
    };
    MeasureOrganizer = {0};
    DriverPos = {.DrvPos.GlobalLegRestRotZPos*pi/180};
    DriverVel = {.DrvVel.GlobalLegRestRotZVel*pi/180};
    Reaction.Type = {Off};
  };
  
  AnyKinEqSimpleDriver LegRestFootRestDrv = {
    AnyPrismaticJoint &Jnt = ..Jnt.LegRestFootRestJnt;
    DriverPos = {.DrvPos.LegRestFootRestLinYPos};
    DriverVel = {.DrvVel.LegRestFootRestLinYVel};
    Reaction.Type = {On};
  };
};