[Isaac Sim Tutorial #3] Ch.3 로봇 움직이기: Joint, Drive, ActionGraph 연결

반응형

[Isaac Sim Tutorial #3] Ch.3 로봇 움직이기: Joint, Drive, ActionGraph 연결

3장 썸네일

 

안녕하세요! Isaac Sim 정복기 세 번째 시간입니다. 지난 Ch.2에서 우리는 로봇의 몸통과 바퀴를 만들고 물리 속성(Rigid Body)까지 입혔습니다. 하지만 플레이를 눌러도 로봇이 바닥으로 툭 떨어지기만 할 뿐, 움직이지는 않았죠?

오늘은 이 로봇에 **관절(Joint)**을 달고, **모터(Drive)**를 심어서 실제로 주행하도록 만들어 보겠습니다. 드디어 우리 로봇이 살아 움직이는 날입니다! 🚀

🛑 잠깐! 로봇 모델링은 하셨나요?

이번 실습은 Ch.2에서 만든 로봇이 반드시 필요합니다. 아직 로봇을 만들지 않으셨다면, 아래 글을 보고 10분 만에 로봇을 뚝딱 만들고 오세요!

👉 [Isaac Sim Tutorial #2] Ch.2 나만의 첫 로봇 만들기: 기본 도형 & 물리 적용

 

[Isaac Sim Tutorial #2] Ch.2 간단한 로봇 만들기 (기본 도형 & 물리 적용)

[Isaac Sim Tutorial #2] Ch.2 나만의 첫 로봇 만들기: 기본 도형 & 물리 적용 안녕하세요! Isaac Sim 정복기, 드디어 두 번째 시간입니다. 지난 시간에는 바닥과 조명을 설치해서 '기초 세트장'을 만들었죠?

dt-simulation.tistory.com


1. 관절 연결하기 (Revolute Joint)

몸통(Body)과 바퀴(Wheel)를 이어주는 관절을 만들어야 합니다. 회전하는 관절이므로 Revolute Joint를 사용합니다.

  • 객체 선택 (순서 중요!):
    • 먼저 **body (Cube)**를 선택합니다.
    • 그다음 Ctrl 키를 누른 채 **wheel_left (Cylinder)**를 선택합니다.
  • Joint 생성: 우클릭 후 Create > Physics > Joints > Revolute Joint를 클릭합니다.

Joint 생성

  • 정리: 생성된 Joint의 이름을 wheel_joint_left로 바꾸고, 관리하기 편하게 [Joints]라는 Scope(폴더)를 만들어 넣어줍니다.

Joint 폴더 생성

  • 오른쪽도 반복: body와 wheel_right도 똑같이 연결해 wheel_joint_right를 만듭니다.

⚠️ 중요! Joint 축 정렬 (이거 안 하면 바퀴 헛돌아요)

우리가 만든 바퀴(원기둥)는 X축으로 90도 회전된 상태입니다. 그래서 Joint의 축도 맞춰줘야 합니다.

 

  • 생성한 Joint 두 개를 모두 선택합니다.
  • Property 탭의 Joint 섹션으로 이동합니다.
  • Local Rotation 1X값90.0으로 변경합니다. (몸통과 바퀴 사이의 각도 보정)

local rotation 1 값 변경

  • AxisY축으로 변경합니다. (이제 바퀴가 Y축을 기준으로 굴러갑니다)

Axis Y로 변경


반응형

 

2. 모터 달기 (Joint Drive)

관절만 있다고 움직이는 건 아니죠. 힘을 가할 수 있도록 드라이브(Drive) API를 추가합니다.

  • 두 Joint를 선택한 상태에서 Property 탭의 + Add > Physics > Angular Drive를 클릭합니다.
  • 속도 제어(Velocity Control) 세팅:
    • 우리는 위치(각도)가 아니라 계속 굴러가는 '속도'를 제어할 것이므로 세팅을 바꿔야 합니다.
    • Damping (감쇠): 1e4 (10,000)으로 매우 높게 설정합니다.
    • Stiffness (강성): 0으로 설정합니다. (속도 제어 시에는 강성을 뺍니다)

3. 로봇 구조화 (Articulation Root)

이 로봇이 단순한 덩어리가 아니라 '관절로 연결된 로봇(Articulation)'임을 물리 엔진에 알려줘야 계산이 정확하고 빨라집니다.

  • 로봇의 최상위 부모인 mock_robot(또는 본인이 만든 최상위 Xform)을 선택합니다.
  • Property 탭에서 + Add > Physics > Articulation Root를 클릭합니다.

Articulation root 설정

  • 이제 이 로봇은 물리적으로 연결된 하나의 유기체가 되었습니다.

4. 컨트롤러 연결 (ActionGraph)

이제 로봇을 조종할 '리모컨'을 달아줄 차례입니다. Isaac Sim에서는 ActionGraph를 통해 노드로 쉽게 제어할 수 있습니다.

 

joint velocity

  • 상단 메뉴 Tools > Robotics > OmniGraph Controllers > Joint Velocity를 클릭합니다.
  • Graph 생성: 팝업창이 뜨면 Robot Prim 경로에 우리 로봇(mock_robot)을 지정하고 Add를 누릅니다.

Mock_robot 에 add 하기

  • Tip: Graph Path는 /World/mock_robot/Graphs/Velocity_Controller 처럼 로봇 하위에 만들어두면 관리하기 편합니다.

🎉 시뮬레이션 시작

모든 준비가 끝났습니다. 좌측 툴바의 Play 버튼을 눌러보세요!

Q. 어? 왜 안 움직이죠? A. 현재 속도 명령이 '0'으로 되어 있어서 그렇습니다. 속도를 넣어봅시다.

  • Stage 트리에서 생성된 Graphs > Velocity_Controller 안의 JointCommandArray를 선택합니다.

jointcommandarray 선택 후 설정

  • Property 탭의 Inputs 항목을 봅니다.
  • input0, input1 값에 숫자를 넣어보세요 (예: 5.0).
    • 와! 로봇이 입력한 속도만큼 앞으로 굴러가는 것을 볼 수 있습니다.

3장 요약 & 다음 시간 예고

오늘 우리는 정지해 있던 로봇에 Joint(관절), Drive(모터), Articulation(구조), **Controller(제어기)**를 달아 실제로 주행시키는 데 성공했습니다.

  • Revolute Joint: 회전 관절 연결 (축 정렬 필수!)
  • Angular Drive: 속도 제어를 위한 Damping/Stiffness 설정
  • Articulation Root: 물리 연산 최적화
  • OmniGraph: 속도 명령을 내리는 컨트롤러

이제 로봇이 움직이니 훨씬 재밌어졌죠? 다음 시간에는 이 로봇에 카메라나 센서(Lidar)를 달아서 주변 환경을 인식하는 방법을 알아보겠습니다.

도움이 되셨다면 댓글과 공감 부탁드려요! 🤖

 

#IsaacSim, #IsaacSim강좌, #로봇시뮬레이션, #Articulation, #RevoluteJoint, #OmniGraph, #ActionGraph, #RobotDrive, #NVIDIA, #Omniverse

반응형