
OmniGraph는 Omniverse의 시각적 프로그래밍 프레임워크이다.
Omniverse 내부의 여러 시스템에서 함수를 연결하는 그래프 프레임워크를 제공한다.
또한 Replicator, ROS 및 ROS2 Bridge, sensor 엑세스, 컨트롤러, UI 등을 위한 주요 엔진이다.
그래프 편집기는 Action Graph와 Generic Graph 두가지가 있다.
둘 다 Window -> Visual Scripting에서 찾을 수 있다.
Isaac Sim은 통상적으로 Action Graph를 사용한다.
JetBot을 활용해서 실습을 진행한다.
Setting up the Stage

새로운 파일에서 시작한다면 Create -> Physics -> Ground Plane으로 기준면을 만들어준다.


Isaac Assets에 검색하면 바로 나온다. 스크롤해서 불러와주자.
재생을 클릭하면 JetBot이 중력에 의해 지면위로 떨어지는지 확인해주자.

JetBot의 초록색 선을 없애고 싶다면 눈표시 -> Show By Type -> Physics -> Colliders -> Slected를 클릭하면 된다.
(초록색 선을 만드려면 All 클릭)
Buliding the Graph

상단의 메뉴에서 Window -> Visual Scripting -> Action Graph를 선택

빈 그래프를 열기 위해 New Action Graph 클릭

그래프 편집기의 검색창에 controller 검색 후 Articulation Controller과 Differentail Controller를 끌어다 놓는다.
관절이 있는 모든 prim의 지정된 관절에 힘, 위치, 속도를 적용한다.


그래프의 Articulation Controller를 클릭 후 property창의 input의 target Prim을 눌러준다. 이후 팝업창의 JetBot을 선택한다.

그러면 target Prim의 경로가 알맞게 설정되었음을 확인할 수 있다.
2륜 로봇에 대한 구동 명령을 계산한다. (제동 시켜줌, 즉 운전)

그래프의 Differential Controller를 클릭 후 property창의 input에서
maxAngularSpeed=0.2, wheelRadius=0.03, wheelDistance=0.1125로 변경해준다.
Articulation Controller은 어떤 관절을 관절화해야 하는지 설정해줘야 한다. 토큰과 인덱스값으로 이를 설정할 수 있다. 현재 JetBot은 두개의 관절이 존재한다.

left_wheel_joint와 right_wheel_joint 두개가 있다.

그래프 편집기에 token을 검색한 후 Constant Token 두개를 노드에 추가한다.

그래프 편집기에 make array를 검색 후 노드에 추가한다. make array를 누르고 property창의 inputs 부분의 +를 눌러 두번째 input을 추가해준다.

arraytype을 token[]으로 설정한다.

constant token을 input 0, 1에 이어준다. make array는 Articulation Controller의 Joint Names에 이어준다.!

그래프 편집기에 playback을 검색하여 Onplayback Tick 노드를 추가한다.

Tick 노드의 출력을 두 컨트롤러의 입력에 연결한다.

Differential Controller의 출력을 Articulation Controller의 입력에 연결한다.


Play 버튼을 누르고 Differential Controller를 눌러서 Desired Angular Velocity 값을 조정하면 방향을 바꾸고 Desired Linear Velocity 값을 조정하면 앞으로 가거나 뒤로 간다.
영상 첨부 방법을 모르겠네.. 아쉽다 ㅠㅠ
옴니그래프 단축키
자주 사용하는 그래프에 대한 단축키를 몇 개 만들어 간단하게 복잡한 그래프를 생성할 수 있다.
Isaac Utils -> Common Omnigraphs 로 찾을 수 있다.

먼저 JetBot을 제어하는 이전 Omnigraph를 삭제한다.

메뉴 막대로 가서 Isaac Utils -> Common Omnigraphs -> Differential Controller를 클릭한다.

Robot Prim의 Add를 눌러서 JetBot을 추가한다.
그리고 Wheel Radius를 0.03, Distance between Wheels를 0.1125로 설정한다.
JetBot에는 제어 가능한 관절이 두개만 있으므로 나머지 필드는 비어두어도 된다.

keyboard control (WASD)를 켜준다.

Graph의 Differential_controller가 생겼다.
이후 시뮬레이션을 시작해 WASD로 조작해보면 게임처럼 JetBot을 움직일 수 있다.

직접 제작하려면 이정도다.... 미친