본문 바로가기
근골격동역학/ANYBODY_연습문제

[에니바디 연습문제] 단일 링크 회전하고 속도 구하기

by bigpicture 2022. 6. 15.
반응형

문제

길이가 1인 링크의 한쪽 끝을 ground 에 고정하고, 다른 쪽 끝을 각속도 pi/2 (rad/s) 로 1초간 회전시키시오. 이때 링그 끝부분의 선속도를 계산하고 에니바디 결과와 비교하시오. 

 

 

풀이

1. 모델링

1) 링크생성 및 노드 생성

링크를 생성하고, 링크 안에 노드 두개를 생성합니다. 하나는 (0,0,0) 이고, 다른 하나는 (1,0,0) 입니다. 

GlobalRef 안에도 노드를 하나 생성합니다. (0,0,0) 입니다. 

 

2) 조인트 생성

링크 안에 있는 (0,0,0) 노드와 GlobalRef 안에 있는 (0,0,0) 노드를 조인트로 묶어줍니다. 회전축은 z축으로 설정합니다. 

 

3) 드라이버 생성

드라이버를 생성하고 2에서 생성한 조인트에 각속도를 부여합니다. 

 

2. 코드

코드는 아래와 같습니다. 

 

 // Todo: Write a small description of your model here

Main = {
  
  // The actual body model goes in this folder
  AnyFolder MyModel = {
    
    AnySeg Link1 = 
    {
      r0 = {0.5, 0.5, 0.0};
      //rDot0 = {0.0, 0.0, 0.0};
      //Axes0 = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}};
      //omega0 = {0.0, 0.0, 0.0};
      Mass = 0.0;
      Jii = {0.0, 0.0, 0.0};
      //Jij = {0.0, 0.0, 0.0};
      //sCoM = {0.0, 0.0, 0.0};
      //JaboutCoMOnOff = Off;
      
      viewRefFrame.Visible = On;
      viewNodes.Visible =On ;
      viewNodes.InertiaScale =0.5;
      
      AnyRefNode node1L = 
      {
        sRel = {0.0, 0.0, 0.0};
        //ARel = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}};
        //viewRefFrame.Visible = On;
        
      };
      
      AnyRefNode node2L = 
      {
        sRel = {1.0, 0.0, 0.0};
        //ARel = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}};
        //viewRefFrame.Visible = On;
      };     
    };
    
    // Global Reference Frame
    AnyFixedRefFrame GlobalRef = {
      
      viewRefFrame.Visible = On;
      
      AnyRefNode node1G = 
      {
        sRel = {0.0, 0.0, 0.0};
        //ARel = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}};
      };
      
      
    };  // Global reference frame
    
    
    AnyRevoluteJoint Joint1 = 
    {
      //RefFrames = ;
      //Surfaces = ;
      //KinMeasureArr = ;
      //KinMeasureIndexArr = ;
      Axis = z;
      //Ref = 0;
      AnyRefFrame &node1G = Main.MyModel.Link1.node1L;
      AnyRefFrame &node1L = Main.MyModel.GlobalRef.node1G;
    };
    
    AnyKinEqSimpleDriver Driver1 = 
    {
      //RefFrames = ;
      //Surfaces = ;
      //KinMeasureArr = ;
      //KinMeasureIndexArr = ;
      //MeasureOrganizer = ;
      //CType = ;
      //WeightFun = ;
      //DriverPos = ;
      DriverVel = {90*pi/180};
      //DriverAcc = ;
      AnyKinMeasure &Joint1 = Main.MyModel.Joint1;
    }; 
    
  }; // MyModel
  
  // The study: Operations to be performed on the model
  AnyBodyStudy MyStudy = {
    AnyFolder &Model = .MyModel;
    Gravity = {0.0, -9.81, 0.0};
    tStart = 0.0;
    tEnd = 3.0;
    nStep = 101;
  };
  
};  // Main

 

3. 결과

선속도는 아래와 같이 계산됩니다. 

 

$\frac{dl}{dt}=r\frac{d\theta}{dt}=r\omega =\frac{\pi}{2}=1.57$


해석 결과와 비교해봅시다. 

 

끝부분이 회전하기 시작할 때, 속도는 y방향 성분만 있고 크기는 1.57 입니다. 계산 결과와 동일합니다. 

반응형

댓글