Download this file

513 lines (413 with data), 15.0 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 L5force = {
    sRel = {-0.4, -0.9, 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;
          AnyStyleDrawMaterial1 style = 
          {
            EnableCreasing = On;
            CreasingAngle = 0.524;
            SpecularRGB = 0.05*{1,1,1};
          };
        };
      };     
    }; // 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;
          AnyStyleDrawMaterial1 style = 
          {
            EnableCreasing = On;
            CreasingAngle = 0.524;
            SpecularRGB = 0.05*{1,1,1};
          };
        };
      };     
    }; // 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};
  };        
  
  AnyRevoluteJoint SeatBackRestJnt = {
    Axis = z;
    AnyRefNode &Seatnode = ..Seg.Seat.SeatBackRestJntNode;  
    AnyRefNode &BackRestNode = ..Seg.BackRest.BackRestSeatJntNode;
  }; // 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;
  }; // SeatLegRestLink
  
  AnyPrismaticJoint LegRestFootRestJnt = {
    Axis = y;
    Ref = 1;
    AnyRefNode &LegRestNode = ..Seg.LegRest.LegRestFootRestJntNode;
    AnyRefNode &FootRestNode = ..Seg.FootRest.FootRestLegRestJntNode;
  };  
  
  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 = {On};
  };  
  
  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 = {On,On};
  };
  
  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 = {On};
  };
  
  AnyKinEqSimpleDriver LegRestFootRestDrv = {
    AnyPrismaticJoint &Jnt = ..Jnt.LegRestFootRestJnt;
    DriverPos = {.DrvPos.LegRestFootRestLinYPos};
    DriverVel = {.DrvVel.LegRestFootRestLinYVel};
    Reaction.Type = {On};
  };
};