23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
9/1에 진행한 4번째 스터디 기반으로 작성하였습니다.
목표: Isaac Sim에서 점유맵(Occupancy Map) 생성 → Nav2 주행 → 자동 목표/웨이포인트, 그리고 Gazebo + TurtleBot3로 SLAM → 맵 저장 → Nav2 주행까지 한 문서로 정리.
그대로 복붙해 따라 할 수 있도록 명령과 체크리스트를 상세히 넣었습니다. (권장: Linux, ROS 2 Humble) ([Isaac Sim Documentation][1])
Isaac Sim에서 창고+Carter 예제를 열고, Occupancy Map을 생성(YAML+PNG). ([Isaac Sim Documentation][2])
Nav2 런치 후 RViz2에서 Goal 찍기 → 주행 확인. 자동 목표/웨이포인트도 가능. ([Isaac Sim Documentation][2])
Gazebo+TurtleBot3는 Cartographer SLAM으로 지도를 만든 뒤 map_saver_cli로 저장 → Nav2로 주행.
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])
Viewport 좌상단 Camera → Top.
Tools → Robotics → Occupancy Map 열기.
예시 파라미터
Origin=(0,0,0)
Lower Z=0.1, Upper Z=0.62 (Nova Carter 라이다 높이에 맞춤)
BOUND SELECTION(창고 프림 선택 후 경계 자동 추출) → CALCULATE → VISUALIZE IMAGE.
Rotate Image=180°, Coordinate Type=ROS Occupancy Map Parameters (YAML) → RE-GENERATE.
이유: Isaac Sim 카메라와 ROS 카메라의 좌표 기준이 달라 180° 회전을 권장. ([Isaac Sim Documentation][5])
하단에 생성된 YAML 전문을 복사해 carter_warehouse_navigation.yaml 저장, 이미지(.png)도 같은 폴더에 보관. ([Isaac Sim Documentation][5])
검증 팁
RViz2에서 맵/레이저가 어긋나면 Z 범위·180° 회전·YAML 좌표부터 재점검. ([Isaac Sim Documentation][5])
맵 해상도/오프셋은 YAML에 기록되니, 레이저 스캔과 경계선이 맞물리는지 확대 확인.
Isaac Sim 상단 Play로 시뮬 재생.
새 터미널에서:
ros2 launch carter_navigation carter_navigation.launch.pyRViz2가 열리며 방금 만든 점유맵이 로딩됩니다(안 뜨면 맵 경로/파일명 확인). ([Isaac Sim Documentation][2])
초기자세가 조금 어긋나면 RViz2 2D Pose Estimate로 한 번 찍어 보정.
RViz2 Navigation2 Goal로 지도 위 클릭&드래그 → 경로 생성 후 주행 시작. ([Isaac Sim Documentation][2])
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
Carter 예제 로드 → Add Waypoint Follower → 파라미터(그래프 경로, 프레임, Waypoint/Patrolling 모드, 개수) 설정 → Load Waypoint Follower ActionGraph.
Play → 새 터미널에서 Nav2 런치 → On Impulse → Send Impulse로 목표 전송. 다수 웨이포인트로 순찰(패트롤) 구성 가능. ([Isaac Sim Documentation][2])
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])
필수는 아니지만, 현업에서 가장 많이 손대는 부분만 요약합니다.
Nav2 노드: map_server, amcl, planner_server, controller_server, bt_navigator, waypoint_follower 등이 런치에 포함됩니다(패키지에 파라미터 YAML 제공).
로컬 플래너/컨트롤러: 제한 속도, 회전 속도, 가속 제한, 장애물 비용맵 인플레이션 반경 등을 상황에 맞게 수정.
로봇 외곽선(footprint): 실제 콜리전과 비슷하게 설정(원형 반경/다각형).
맵 해상도/인플레이션: 좁은 통로에서 너무 큰 인플레이션 반경은 경로 차단 유발.
회귀 실험: 위의 자동 목표/웨이포인트를 CI 단계에 넣어 안정성 추적. ([Isaac Sim Documentation][2])
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 ~/.bashrcTurtleBot3/Cartographer/Nav2 설치 + 모델 환경변수 등록.
(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— 천천히 이동하며 맵을 채웁니다.
ros2 run nav2_map_server map_saver_cli -f ~/map
# 결과: ~/map.yaml, ~/map.pgm(or .png)— 저장된 맵은 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.yamlRViz2 상단 2D Pose Estimate로 초기자세를 맞춘 뒤, Nav2 Goal을 찍으면 이동합니다.
위치가 안 잡히면 Teleop으로 살짝 움직여 센서-맵 정합을 촉진하세요.
실습용으로 빈 월드/런치를 패키지에 포함시키고 싶을 때:
패키지 생성·구조:
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/launchSDF 월드(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.pysudo 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_examplesetup.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_markerrviz_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()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으로 천천히 이동하며 레이저-맵 정합을 유도하세요. 충분히 탐색해야 안정화됩니다.
토픽 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])
# (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])
# 설치 & 환경
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.yamlROS 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])
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.