데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      NVIDIA issac sim으로 배우는 physicak AI (about issac sim, 4회차)

      kim1023123 25.09.10
      88 1 0
      DEVOTEE 요약
      이 문서는 Isaac Sim 4.5와 ROS 2 Nav2를 활용해 점유맵 생성부터 Nav2 주행, SLAM(Map 저장 및 활용)까지의 과정을 자세히 설명합니다. 빠른 설정 가이드, 실습 명령, 디버깅 체크리스트 및 Gazebo+TurtleBot3를 활용한 SLAM 시뮬레이션 방법이 포함되어 있으며, 초보자도 따라하기 쉽게 명령어와 주요 설정값을 제공하고 있습니다. 이를 통해 자율 주행 및 시뮬레이션 환경에서의 효율적인 지도 생성, 경로 계획, 반복 테스트를 수행할 수 있습니다.
      DEVOTEE 추천 블로그

      9/1에 진행한 4번째 스터디 기반으로 작성하였습니다.

      Isaac Sim 4.5 × ROS 2 Nav2 + Gazebo SLAM

      목표: Isaac Sim에서 점유맵(Occupancy Map) 생성 → Nav2 주행 → 자동 목표/웨이포인트, 그리고 Gazebo + TurtleBot3로 SLAM → 맵 저장 → Nav2 주행까지 한 문서로 정리.

      그대로 복붙해 따라 할 수 있도록 명령과 체크리스트를 상세히 넣었습니다. (권장: Linux, ROS 2 Humble) ([Isaac Sim Documentation][1])

      image.png


      0) 빠른 결론 (TL;DR)

      1. Isaac Sim에서 창고+Carter 예제를 열고, Occupancy Map을 생성(YAML+PNG). ([Isaac Sim Documentation][2])

      2. Nav2 런치 후 RViz2에서 Goal 찍기 → 주행 확인. 자동 목표/웨이포인트도 가능. ([Isaac Sim Documentation][2])

      3. Gazebo+TurtleBot3는 Cartographer SLAM으로 지도를 만든 뒤 map_saver_cli로 저장 → Nav2로 주행.


      1) Isaac Sim + Nav2

      1-1. 환경 & 예제 열기

      • ROS 2 Bridge 확장 활성화: Window → Extensions → isaacsim.ros2.bridge (Play 때 퍼블리셔/서브스크라이버가 동작).

        Isaac Sim 실행 전 터미널에서 ROS 2를 source해 두어야 안정적입니다. ([Isaac Sim Documentation][3])

      • 예제 위치: Window → Examples → Robotics Examples → ROS2 → Navigation → Carter (Nova Carter 로봇 + 창고 환경). ([Isaac Sim Documentation][2])

      • 필수 ROS 2 패키지: carter_navigation, iw_hub_navigation, isaac_ros_navigation_goal(Isaac Sim 설치본의 humble_ws 내부). 런치/파라미터/로봇 모델 포함. ([Isaac Sim Documentation][2])

      • 운영체제: 관련 튜토리얼·런치는 Linux 우선. 일부 항목(예: Isaac Sim을 ROS 2 launch로 기동)은 Linux만 공식 지원. ([Isaac Sim Documentation][4])

      image.png


      1-2. 점유맵(Occupancy Map) 생성 — “맵만 맞으면 절반 성공”

      1. Viewport 좌상단 Camera → Top.

      2. Tools → Robotics → Occupancy Map 열기.

      3. 예시 파라미터

        • Origin=(0,0,0)

        • Lower Z=0.1, Upper Z=0.62 (Nova Carter 라이다 높이에 맞춤)

      4. BOUND SELECTION(창고 프림 선택 후 경계 자동 추출) → CALCULATE → VISUALIZE IMAGE.

      5. Rotate Image=180°, Coordinate Type=ROS Occupancy Map Parameters (YAML) → RE-GENERATE.

        • 이유: Isaac Sim 카메라와 ROS 카메라의 좌표 기준이 달라 180° 회전을 권장. ([Isaac Sim Documentation][5])

      6. 하단에 생성된 YAML 전문을 복사해 carter_warehouse_navigation.yaml 저장, 이미지(.png)도 같은 폴더에 보관. ([Isaac Sim Documentation][5])

      image.png

      검증 팁

      • RViz2에서 맵/레이저가 어긋나면 Z 범위·180° 회전·YAML 좌표부터 재점검. ([Isaac Sim Documentation][5])

      • 맵 해상도/오프셋은 YAML에 기록되니, 레이저 스캔과 경계선이 맞물리는지 확대 확인.


      1-3. Nav2 실행 → 첫 주행

      1. Isaac Sim 상단 Play로 시뮬 재생.

      2. 새 터미널에서:

      ros2 launch carter_navigation carter_navigation.launch.py
      • RViz2가 열리며 방금 만든 점유맵이 로딩됩니다(안 뜨면 맵 경로/파일명 확인). ([Isaac Sim Documentation][2])

      • 초기자세가 조금 어긋나면 RViz2 2D Pose Estimate로 한 번 찍어 보정.

      • RViz2 Navigation2 Goal로 지도 위 클릭&드래그 → 경로 생성 후 주행 시작. ([Isaac Sim Documentation][2])

      [참조] https://docs.isaacsim.omniverse.nvidia.com/4.5.0/ros2_tutorials/tutorial_ros2_navigation.html?utm_source=chatgpt.com#nav2-with-nova-carter-in-small-warehouse


      1-4. 자동 목표 & 웨이포인트(테스트 자동화)

      A) 스크립트 방식 — isaac_ros_navigation_goal

      반복/회귀 테스트에 유용:

      ros2 launch isaac_ros_navigation_goal isaac_ros_navigation_goal.launch.py
      • 랜덤 목표/파일 기반 목표, 반복 횟수 등을 파라미터로 제어. 맵이 지나치게 조밀하면 무효 포즈로 중단될 수 있습니다. ([Isaac Sim Documentation][2])

      B) GUI 방식 — ActionGraph Waypoint/Patrolling

      1. Carter 예제 로드 → Add Waypoint Follower → 파라미터(그래프 경로, 프레임, Waypoint/Patrolling 모드, 개수) 설정 → Load Waypoint Follower ActionGraph.

      2. Play → 새 터미널에서 Nav2 런치 → On Impulse → Send Impulse로 목표 전송. 다수 웨이포인트로 순찰(패트롤) 구성 가능. ([Isaac Sim Documentation][2])


      1-5. 필수 체크리스트(운용·디버깅)

      • ROS 2 환경 소싱: Isaac Sim 실행/런치 전 터미널에서 source /opt/ros/humble/setup.bash 혹은 작업 WS를 소싱. ([Isaac Sim Documentation][4])

      • 브릿지 활성화: isaacsim.ros2.bridge Enable 확인(Play해야 트래픽 송수신). ([Isaac Sim Documentation][3])

      • 시간 동기: Isaac Sim과 ROS 2 노드 모두 use_sim_time 일치 여부 확인(특히 Gazebo 병행 시).

      • 토픽·TF 상태:

        ros2 topic list
        ros2 run tf2_tools view_frames.py     # TF 트리 점검 (pdf 생성)

        Nav2가 소비하는 /tf, /map, /odom, /scan(/point_cloud) 라인이 정상인지 확인. /scan은 pointcloud_to_laserscan으로 생성하는 구성이 흔합니다. ([Isaac Sim Documentation][2])

      • 멀티 로봇: Linux 완전 지원, Windows는 오류 가능성 공지. 대규모 테스트는 Linux 권장. ([Isaac Sim Documentation][6])


      1-6. (심화) Nav2 구성 요소와 빠른 튜닝 포인트

      필수는 아니지만, 현업에서 가장 많이 손대는 부분만 요약합니다.

      • Nav2 노드: map_server, amcl, planner_server, controller_server, bt_navigator, waypoint_follower 등이 런치에 포함됩니다(패키지에 파라미터 YAML 제공).

      • 로컬 플래너/컨트롤러: 제한 속도, 회전 속도, 가속 제한, 장애물 비용맵 인플레이션 반경 등을 상황에 맞게 수정.

      • 로봇 외곽선(footprint): 실제 콜리전과 비슷하게 설정(원형 반경/다각형).

      • 맵 해상도/인플레이션: 좁은 통로에서 너무 큰 인플레이션 반경은 경로 차단 유발.

      • 회귀 실험: 위의 자동 목표/웨이포인트를 CI 단계에 넣어 안정성 추적. ([Isaac Sim Documentation][2])


      2) Gazebo + TurtleBot3 (SLAM → 맵 저장 → Nav2)

      2-1. 설치 & 기본 환경

      sudo apt update
      sudo apt install -y ros-humble-turtlebot3* \
        ros-humble-cartographer ros-humble-cartographer-ros \
        ros-humble-navigation2 ros-humble-nav2-bringup
      echo "export TURTLEBOT3_MODEL=burger" >> ~/.bashrc
      source ~/.bashrc
      • TurtleBot3/Cartographer/Nav2 설치 + 모델 환경변수 등록.


      2-2. SLAM으로 지도 만들기(시뮬레이터/SLAM/Teleop)

      (A) Gazebo 세계 구동

      ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

      — 터틀월드+로봇 시뮬을 띄웁니다.


      (B) Cartographer SLAM

      ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=true

      — RViz2에서 SLAM 지도가 쌓이는지 확인.


      (C) 키보드 주행(Teleop)

      ros2 run turtlebot3_teleop teleop_keyboard

      — 천천히 이동하며 맵을 채웁니다.


      2-3. 지도 저장(map_saver)

      ros2 run nav2_map_server map_saver_cli -f ~/map
      # 결과: ~/map.yaml, ~/map.pgm(or .png)

      — 저장된 맵은 Nav2에서 곧바로 사용합니다.


      2-4. 저장 맵으로 Nav2 주행

      # (필요 시) Gazebo 재실행
      ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
      
      # Nav2 실행 (저장한 맵 사용)
      ros2 launch turtlebot3_navigation2 navigation2.launch.py \
        use_sim_time:=True map:=$HOME/map.yaml
      • RViz2 상단 2D Pose Estimate로 초기자세를 맞춘 뒤, Nav2 Goal을 찍으면 이동합니다.

      • 위치가 안 잡히면 Teleop으로 살짝 움직여 센서-맵 정합을 촉진하세요.


      2-5. (선택) Gazebo 빈 월드 생성 스켈레톤

      실습용으로 빈 월드/런치를 패키지에 포함시키고 싶을 때:

      1. 패키지 생성·구조:

      ros2 pkg create --build-type ament_python my_empty_world
      mkdir -p ~/ros2_ws/src/my_empty_world/worlds ~/ros2_ws/src/my_empty_world/launch
      1. SDF 월드(worlds/empty_world.world)와 런치(launch/empty_world.launch.py) 추가 → setup.py data_files/package.xml 의존성(gazebo_ros) 등록 → 빌드/실행:

      cd ~/ros2_ws && colcon build && source install/setup.bash
      ros2 launch my_empty_world empty_world.launch.py


      3) RViz Marker 최소 예제(시각화 토픽 /visualization_marker)

      3-1. 패키지 뼈대/엔트리/의존성

      sudo apt install -y ros-humble-rclpy ros-humble-visualization-msgs
      mkdir -p ~/ros2_ws/src && cd ~/ros2_ws && colcon build
      source install/setup.bash
      ros2 pkg create --build-type ament_python rviz_marker_example
      • setup.py에 실행 엔트리:

      entry_points={'console_scripts': [
        'moving_marker = rviz_marker_example.moving_marker:main',
      ]}
      • package.xml 의존성:

      <exec_depend>rclpy</exec_depend>
      <exec_depend>visualization_msgs</exec_depend>
      • 빌드/실행:

      cd ~/ros2_ws && colcon build && source install/setup.bash
      ros2 run rviz_marker_example moving_marker
      # RViz2 → Add → By topic → /visualization_marker

      3-2. 노드 코드 예 (rviz_marker_example/moving_marker.py)

      import rclpy, math
      from rclpy.node import Node
      from visualization_msgs.msg import Marker
      
      class MovingMarker(Node):
          def __init__(self):
              super().__init__('moving_marker')
              self.pub = self.create_publisher(Marker, 'visualization_marker', 10)
              self.t = 0
              self.create_timer(0.1, self.cb)
      
          def cb(self):
              m = Marker()
              m.header.frame_id = "map"
              m.header.stamp = self.get_clock().now().to_msg()
              m.ns, m.id, m.type, m.action = "basic_shapes", 0, Marker.CUBE, Marker.ADD
              m.pose.position.x = math.sin(self.t * 0.1)
              m.pose.position.y = 0.0; m.pose.position.z = 0.0
              m.scale.x = m.scale.y = m.scale.z = 0.3
              m.color.a = 1.0; m.color.r = 0.1; m.color.g = 0.5; m.color.b = 1.0
              self.pub.publish(m); self.t += 1
      
      def main():
          rclpy.init(); rclpy.spin(MovingMarker()); rclpy.shutdown()
      if __name__ == "__main__": main()


      4) 자주 묻는 질문(FAQ) & 트러블슈팅

      Q1. Isaac Sim의 ROS 2 브리지가 동작하지 않아요.

      • 확장이 Enable인지, Play를 눌렀는지 확인. Isaac Sim 내장/시스템 ROS 2를 어떤 것으로 소싱했는지도 중요합니다(불일치 시 rclpy 모듈 에러).

        ([Isaac Sim Documentation][3], [GitHub][7])

      Q2. Occupancy Map이 뒤집히거나 센서와 안 맞아요.

      • *Rotate Image=180°*로 재생성, YAML 좌표를 그대로 사용했는지 확인. 맵 생성 영역(Z 하한/상한)과 라이다 높이도 점검. ([Isaac Sim Documentation][5])

      Q3. Isaac Sim을 ROS 2 launch에서 직접 띄울 수 있나요?

      • 예. carter_navigation/launch/carter_navigation_isaacsim.launch.py 예제가 제공됩니다(지원 OS: Linux).

        CI 파이프라인에 연결하기 좋습니다. ([docs.robotsfan.com][8], [Isaac Sim Documentation][4])

      Q4. 멀티 로봇은 지원하나요?

      • Isaac Sim 4.5 기준 Linux에서 완전 지원, Windows는 오류 가능성 공지. 대규모 실험은 Linux 권장. ([Isaac Sim Documentation][6])

      Q5. Gazebo SLAM에서 초기 로컬라이즈가 늦게 잡혀요.

      • 2D Pose Estimate로 대략 찍은 후 teleop으로 천천히 이동하며 레이저-맵 정합을 유도하세요. 충분히 탐색해야 안정화됩니다.


      5) 운영 팁(체크포인트)

      • 토픽 QoS/프레임 정합: 센서 토픽의 QoS(Mid/Best effort)와 Nav2 노드의 QoS 호환성 확인. TF 트리는 map→odom→base_link로 연결되는지 view_frames로 확인.

      • 비용맵(costmap) 튜닝: 인플레이션 반경, 관측 센서 범위/프레임, 장애물 레이어 업데이트 주기 조정.

      • 로봇 footprint: 물리 충돌 여유(오차+안전)를 반영해 원형/다각형을 설정. 좁은 통로/랙 환경이면 실제보다 보수적으로.

      • 맵 해상도: 지나치게 높은 해상도는 비용맵 업데이트 부하 증가·플래너 오동작(세밀한 노이즈 반영) 유발.

      • 회귀/부하 테스트: isaac_ros_navigation_goal과 Waypoint Follower로 수십~수백 회 반복 주행 시나리오를 자동화해 안정성 추적. ([Isaac Sim Documentation][2])


      6) Cheatsheet

      6-1. Isaac Sim + Nav2

      # (Isaac Sim) ROS2 브리지 활성화
      # Window → Extensions → isaacsim.ros2.bridge  (Play 시 통신 활성)
      
      # Occupancy Map 핵심 파라미터
      # Origin=(0,0,0), LowerZ=0.1, UpperZ=0.62, Rotate=180°, CoordType=ROS YAML
      # YAML: carter_warehouse_navigation.yaml, PNG: 동일 폴더
      
      # Nav2 런치
      ros2 launch carter_navigation carter_navigation.launch.py
      
      # (옵션) 자동 목표 발행
      ros2 launch isaac_ros_navigation_goal isaac_ros_navigation_goal.launch.py
      
      # (옵션) Waypoint/Patrolling (ActionGraph) → Send Impulse

      ([Isaac Sim Documentation][2])

      6-2. Gazebo + TurtleBot3 SLAM/Navigation

      # 설치 & 환경
      sudo apt update
      sudo apt install -y ros-humble-turtlebot3* \
        ros-humble-cartographer ros-humble-cartographer-ros \
        ros-humble-navigation2 ros-humble-nav2-bringup
      echo "export TURTLEBOT3_MODEL=burger" >> ~/.bashrc
      source ~/.bashrc
      
      # SLAM
      ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
      ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=true
      ros2 run turtlebot3_teleop teleop_keyboard
      
      # 맵 저장
      ros2 run nav2_map_server map_saver_cli -f ~/map   # ~/map.yaml, ~/map.pgm|png
      
      # 저장 맵으로 Nav2 주행
      ros2 launch turtlebot3_navigation2 navigation2.launch.py \
        use_sim_time:=True map:=$HOME/map.yaml


      참고(공식 문서)

      • ROS 2 Navigation (Isaac Sim 4.5) — Carter 예제, 패키지 목록, 자동 목표/웨이포인트. (문서 업데이트: 2025-04-21) ([Isaac Sim Documentation][2])

      • Occupancy Map Generator — 180° 회전/ROS YAML 좌표 안내. ([Isaac Sim Documentation][5])

      • Isaac Sim을 ROS 2 Launch로 기동 — Linux 전용 공지, 예제 런치 경로. ([Isaac Sim Documentation][4], [docs.robotsfan.com][8])

      • 멀티 로봇 Nav2 지원 범위 — Linux 완전 지원, Windows 오류 가능. ([Isaac Sim Documentation][6])

      [1]: https://docs.isaacsim.omniverse.nvidia.com/4.5.0/ros2_tutorials/index.html?utm_source=chatgpt.com "ROS 2 Tutorials (Linux and Windows)"

      [2]: https://docs.isaacsim.omniverse.nvidia.com/4.5.0/ros2_tutorials/tutorial_ros2_navigation.html?utm_source=chatgpt.com "ROS2 Navigation - Isaac Sim Documentation - NVIDIA"

      [3]: https://docs.isaacsim.omniverse.nvidia.com/5.0.0/py/source/extensions/isaacsim.ros2.bridge/docs/index.html?utm_source=chatgpt.com "[isaacsim.ros2.bridge] ROS 2 Bridge - NVIDIA"

      [4]: https://docs.isaacsim.omniverse.nvidia.com/4.5.0/ros2_tutorials/tutorial_ros2_launch.html?utm_source=chatgpt.com "ROS 2 Launch - Isaac Sim Documentation"

      [5]: https://docs.isaacsim.omniverse.nvidia.com/4.5.0/ros_tutorials/tutorial_ros_navigation.html?utm_source=chatgpt.com "ROS Navigation - Isaac Sim Documentation"

      [6]: https://docs.isaacsim.omniverse.nvidia.com/4.5.0/ros2_tutorials/tutorial_ros2_multi_navigation.html?utm_source=chatgpt.com "Multiple Robot ROS2 Navigation - Isaac Sim Documentation"

      [7]: https://github.com/isaac-sim/IsaacSim/issues/17?utm_source=chatgpt.com "Unable to install/load the ROS2 extensions · Issue #17"

      [8]: https://docs.robotsfan.com/isaacsim/4.5.0/ros2_tutorials/tutorial_ros2_launch.html?utm_source=chatgpt.com "ROS 2 Launch — Isaac Sim Documentation"

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      kim1023123 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기