Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

LOE

[Isaac sim Tutorial] Part 1. Turtle bot을 통한 ros 연결 본문

isaac sim & lab

[Isaac sim Tutorial] Part 1. Turtle bot을 통한 ros 연결

우리동동 2025. 11. 26. 22:08

출처

https://docs.isaacsim.omniverse.nvidia.com/5.0.0/ros2_tutorials/tutorial_ros2_turtlebot.html

 

URDF Import: Turtlebot — Isaac Sim Documentation

URDF Import: Turtlebot NVIDIA Isaac Sim has several tools to facilitate integration with ROS systems. We have both ROS and ROS2 bridges, a method to import URDF, and much more. This tutorial series gives examples of how to use these tools. Learning Objecti

docs.isaacsim.omniverse.nvidia.com

https://docs.isaacsim.omniverse.nvidia.com/5.0.0/ros2_tutorials/tutorial_ros2_drive_turtlebot.html

 

Driving TurtleBot via ROS2 messages — Isaac Sim Documentation

The ROS 2 bridge comes with a few popular rostopics that are packaged for ease of use. Here we will focus on the procedures in using them. The steps to connect NVIDIA Isaac Sim to ROS can be done entirely in the UI, scripting inside the extension workflow,

docs.isaacsim.omniverse.nvidia.com

 

Importing TurtleBot URDF

우리는 움직일수 있는 USD 에셋이 없으므로 이미 만들어진 turtle bot을 import 하도록 합니다.

git clone -b $ROS_DISTRO https://github.com/ROBOTIS-GIT/turtlebot3.git turtlebot3

 

simple_room.usd

  • 먼저 창 아래의 environments에서 simple_room.usd를 가운데 창으로 드레그 해주고 import한다.

팁으로는 마우스 우클릭한후에 wasd + e(위) + q(아래) 움직임으로 시점을 조정할 수 있습니다. 또한 우클릭한 상태에서 휠을 움직이면 이동속도를 조정할 수 있습니다.

 

Turtle bot URDF import

file > import에서 아까 clone한 urdf파일을 선택합니다. link는 movable link로 한뒤 joint configuration을 natrual frequency로 하고 drive type의 오른쪽 왼쪽 joint의 target을 velocity로 바꾸어줍니다.

 

import 성공

 

turtle bot의 왼쪽 오른쪽 joint의 damping을 10000000.0으로 변경

  • 팁이 있다면 값을 변경할때에는 ctrl을 누른후에 클릭하면 값을 입력할 수 있습니다. 값을 10000000.0으로 변경하는 이유는 10000000.0과 같은 매우 큰 값은 시뮬레이션에서 관절이 이상적인 속도 명령을 거의 즉시 따르도록 강제하는 역할을 하기 때문입니다.
  • turtlebot3_burger에서 instanceable을 체크하고 add > physics > rigid body를 추가하고 이후 mass를 추가한다.

 

 

Control Turtlebot with ros2 message

우리는 위에서 양쪽 joint의 물리속성을 설정해 줬습니다. 하지만 이걸 컨트롤 하기 위해서 joint의 속도를 지정해주기보다는 로봇 자체의 속도를 설정하고 이를 Differential controller가 이를 바퀴의 속도로 변환, Articulation Controller가 joint로 명령을 보내는 구조로 Omnigraph를 세팅해주도록 하겠습니다.

 

이전 포스팅에서 ros2를 isaac sim과 연결하였기 때문에 그 내용을 넘어가도록 하겠습니다.

 

  • Window > Graph Editors > Action Graph를 통해 omni graph를 만들고 이런식으로 위의 그림처럼 이어줍니다. 코드로 동작원리를 짜는것이 아니라 변수를 그림처럼 이어준다고 생각하시면 됩니다!
  • 처음에는 어려워 보이지만 왼쪽 검색창에서 필요한 노드들을 찾아서 변수들을 이어주다보면 일반 코딩과 다를게 없지만 더 직관적내용을 파악할 수 있다는 장점이 있는 것 같습니다.

그래프 설명

    • on playback tic node : 시뮬레이션이 play 상태일때 tick을 생성합니다. 시뮬레이션 시간이라고 생각하면 될 것 같습니다.
    • Ros2 context node : ros의 도메인 아이디를 설정할 수 있게 하고 그에 따라 메세지를 주고 받을 수 있게 됩니다. 0이 기본입니다. 
    • ROS2 Subscribe Twist node : twist 메세지를 받는 노드로 property tab에서 토픽의 이름을 /cmd_vel로 설정해 줍니다.

토픽명 cmd_vel

  • Scale to/from Stage Unit Node : 입력을 스테이지의 단위로 변경한다.
  • Differentail Controller Node : 원하는 차량의 속도를 받아 로봇의 바퀴속도를 계산하다. 이를 위해 바퀴의 둘레와 야 바퀴사이의 간격을 필요로 한다.

노드의 파라미터를 설정한다.

  • Articulation Controller Node : 목표 로봇에 할당된 후, 움직여야 할 관절(Joint)의 이름 또는 인덱스를 입력받아 해당 관절들을 움직입니다. 관절을 움직이는 명령은 위치 명령(Position Commands), 속도 명령(Velocity Commands), 또는 토크/힘 명령(Effort Commands) 중 하나로 주어집니다. articulation root의 target을 터틀봇으로 지정해줍니다. 이후 articulation root를 로봇의 속성으로 추가해줍니다. 또한 constant token두개의 이름을 joint의 이름인 wheel_left_joint wheel_right_joint로 변경해줍니다. (만약 joint의 이름이 a__namespace_wheel_left_link이런꼴이라면 해당 이름에 맞게 조정해야 합니다.)

articulation node의 target을 turtlebot3_burger로 설정, turtlebot3_burger의 속성에서 physics > articulation root를 추가

 

 

 

Ros2 연결 확인

isaac sim의 환경과 host의 ros가 연결되었다면 이후 host의 ros만 source된 터미널에서 ros2 topic list를 해보았을때 아래처럼 /cmd_vel 토픽이 보여야 합니다. (왜냐하면 omni graph에서 토픽을 구독하고 있으므로)

 

 

 

이후 터미널 cli를 통해 twist토픽을 발행하면 차량이 움직이게 된다!!

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': 1.0}}"