3 분 소요

이 포스팅은 ‘Isaac Lab‘에 대한 내용을 담고 있습니다.

자료 출처: https://docs.omniverse.nvidia.com/isaacsim/latest/ros2_tutorials/index.html

Isaac Sim & ROS2

Isaac Sim 시뮬레이터는 ROS2를 사용해 로봇을 제어할 수 있도록 하는 기능을 제공합니다. 위의 Issac Sim Documentation에서 ROS2와 Isaac Sim을 연동시키는 방법을 확인할 수 있습니다. 이 포스팅에서는 튜토리얼에서 소개하는 단계들을 따라가보면서 어떻게 ROS2와 Isaac Sim을 연동시켜 사용할 수 있는지 살펴봅니다.

ROS2 설치

ROS2를 Issac Sim에서 사용하기 위해서는 먼저 ROS2를 로컬 환경에 설치해야 합니다. Isaac Sim 내부에서 ROS2 기능을 별도로 제공하기 때문에 반드시 ROS2를 로컬 환경에 설치하지 않아도 괜찮지만, 이 포스팅에서는 로컬 환경에 ROS2를 설치하는 방향으로 튜토리얼을 따라갑니다.

우분투 22.04을 기준으로 ROS2 Humble을 설치합니다. 만약 우분투가 다른 버전이라면, 공식 문서에서 권하는 버전에 맞게 ROS2 버전을 확인하고 설치합니다.

ROS2 Bridge Extension

ROS2 설치를 완료했으면, 다시 돌아와 Issac Sim 프로그램을 실행합니다.

conda activate env_isaaclab;
isaacsim

Isaac Sim의 상단 메뉴바에서 Window > Extensions 로 들어갑니다.

image (33)

위와 같이 Extensions들을 검색할 수 있는 창에 들어가게 됩니다. 검색창에 @feature가 입력되어 있는데, 가위표를 눌러 검색창을 깨끗하게 만든 다음 ros2를 타이핑합니다.

image (34)

타이핑을 하면 가장 상단에 ROS 2 BRIDGE 토글 스위치가 나타납니다. 기본적으로 켜져있고 ROS2를 어차피 사용할 것이기 때문에 더 수정할 필요가 없는데요, 만약 ROS1을 사용한다든가, 혹은 ROS BRIDGE를 사용하고 싶지 않다면 위 토글 스위치를 통해 조작할 수 있습니다.

그 다음에 Choosing the ROS Bridge Version in isaac-sim.shRunning ROS 2 Bridge using Cyclone DDS 단락이 있는데, ROS Bridge Version을 바꿔야 하는 경우에 한해 isaacsim.exp.full.kit파일로 들어가 설명에 따라 수정하도록 합니다(conda 가상환경을 사용하는 경우 파일의 위치가 문서와 다른 곳에 있을 가능성이 높습니다. 이 경우, find --name <file_name>을 통해 파일을 찾을 수 있습니다.). Cyclone DDS도 필수 사항이 아닙니다(기본적으로는 Fast DDS를 사용).이를 사용하는 경우에 한해 해당 단락에서 요하는 단계를 수행하도록 합니다.

Setting Up Workspaces

이제 워크스페이스를 세팅합니다. 문서에 나온대로 따라하면 되는데, 간혹 디렉터리 위치가 다른 경우가 있으니, 이를 주의하면서 단계를 밟아나가도록 합니다(Docker를 사용하는 부분은 생략).

Importing TurtleBot URDF

간단한 예시에서 ROS2를 사용해 로봇을 조작해봅니다.

git clone -b <distro>-devel https://github.com/ROBOTIS-GIT/turtlebot3.git turtlebot3

<distro>는 ROS2 버전을 의미합니다(humble을 넣어주면 됨). 위 명령어를 통해 저희가 예시에서 조작할 turtlebot3의 URDF 파일을 다운로드받게 되는데요, 다운로드를 받는 위치는 적당히 헷갈리지 않을 만한 곳으로 아무 곳에 다운로드 받으면 됩니다. 이어서 로봇을 조작할 간단한 환경을 구성해봅니다.

image (35)

Isaac Sim 하단부에 Isaac Sim Assets [Beta] > ENVIRONMENTS > simple_room 을 선택한 다음 Load as Reference 버튼을 눌러 배경을 설정합니다.

image (36)

그 다음 상단 메뉴바에서 File > Import 로 들어가면 다음과 같은 창을 확인할 수 있습니다. 이전에 URDF를 저장해두었던 위치로 들어가 위의 turtlebot3_burger.urdf파일을 클릭합니다.

image (37)

몇 가지 옵션들을 선택할 수 있는데, 그 중 Links에서 Moveable Base로 변경합니다. 그리고 Joints & Drives에서 각 관절의 Target이 기본적으로는 Position으로 설정되어 있는데, 이를 Velocity로 변경합니다. 이렇게 옵션을 선택한 다음 Import 버튼을 눌러 환경에 로봇을 추가합니다.

Building the Graph

기본 환경을 설정한 다음, 로봇을 움직이기 위한 액션 그래프를 생성합니다. 상단 메뉴바의 Window > Graph Editors > Action Graph 를 클릭합니다. 그리고 하단의 New Action Graph 버튼을 클릭합니다.

image (38)

위와 같이 빈 창이 뜨게 되는데, 왼쪽에 있는 노드 상자를 드래그해서 빈 창 위에 놓으면, 새로운 노드가 그래프에 생기게 됩니다.

graph

다음과 같이 그래프를 똑같이 만들도록 합니다. 노드 사이의 연결은 마우스 드래그로 생성할 수 있고, 필요한 노드는 검색창을 사용해 찾을 수 있습니다.

image (40)

Make Array 노드의 경우 기본적으로 Input을 하나만 받도록 설정되어 있는데, Property > Construct Array Node > Inputs 에서 + 버튼을 눌러 입력의 개수를 늘릴 수 있습니다.

image (39)

그래프의 틀을 완성했으면 이어서 조금 수정해야하는 부분들이 있는데요, 먼저 Constant Token의 Property > Constant Token Node > Inputs 을 wheel_left_joint로, 그 아래 Constant Token은 같은 위치의 값을 wheel_right_joint로 수정합니다.

image (41)

다음으로, Differenctial Controller의 Property > Inputs 설정을 위와 같이 수정합니다.

image (42)

마지막으로, Articulation Controller의 Property > Inputs > targetPrim을 위와 같이 설정하면, ROS2를 통해 로봇을 조작할 모든 준비가 완료됩니다.

Verifying ROS connection

터미네이터에 새로운 창을 열고 아래의 명령어를 통해 토큰을 발행합니다.

image (43)

ros2 topic pub /cmd_vel geometry_msgs/Twist "{'linear': {'x': 0.2, 'y': 0.0, 'z': 0.0}, 'angular': {'x': 0.0, 'y': 0.0, 'z': 0.0}}"

그리고 다시 Isaac Sim을 확인해보면 아래와 같이 로봇이 움직이는 것을 확인할 수 있습니다.

isaacros

댓글남기기