POSIMPlatform for Ocean Simulation · 문서
문서 메뉴
POSIM / 시작하기

첫 시뮬레이션

같은 Ubuntu 또는 Docker 환경의 터미널 두 개를 준비하세요.

1. 해양 월드 실행

터미널 A에서 실행합니다.

ros2 launch posim_demos posim_world.launch.py \
  world_name:=posim_ocean_waves headless:=true

터미널 B에서 시뮬레이션 시간을 확인합니다.

gz topic -e -t /world/oceans_waves/clock

시간이 계속 증가하는지 확인하세요. 파일 이름은 posim_ocean_waves.world이지만 내부 월드 이름은 oceans_waves입니다. 다음 예제를 시작하기 전에 토픽 확인 도구와 Launch를 차례로 Ctrl+C로 종료합니다.

2. REXROV 배치

로봇 Launch는 월드도 함께 시작합니다. 앞에서 실행한 월드를 종료한 뒤 진행하세요.

ros2 launch posim_demos posim_robot.launch.py \
  namespace:=rexrov world_name:=posim_ocean_waves z:=-5 paused:=false \
  gui:=false headless:=true use_teleop:=false use_web_joystick:=false

터미널 B에서 위치·속도 데이터를 받습니다.

ros2 topic echo /model/rexrov/odometry nav_msgs/msg/Odometry --once

타임스탬프, 위치와 속도를 확인합니다. 움직이지 않는 로봇도 정상적인 Odometry를 발행할 수 있습니다. BlueROV2와 제어 인터페이스는 ROV 예제에서 이어서 다룹니다.

3. 카메라 영상 받기

REXROV를 종료하고 센서 렌더러가 준비되어 있는지 확인합니다. 디스플레이가 없는 컨테이너에서는 먼저 Docker 렌더링 설정을 따르세요. 현재 Launch의 headless:=true는 GUI만 끕니다. 준비한 셸에서 아래 명령을 실행합니다.

ros2 launch posim_demos posim_sensor.launch.py \
  namespace:=underwater_camera world_name:=camera_tutorial \
  x:=10 z:=-93.5 pitch:=0.3 yaw:=3.14 \
  paused:=false gui:=false headless:=true

터미널 B에서 영상 메시지를 확인합니다.

ros2 topic echo /underwater_camera/simulated_image \
  sensor_msgs/msg/Image --once --no-arr

너비·높이가 0보다 큰지, 영상 형식과 타임스탬프가 있는지 확인합니다. --no-arr은 터미널에 픽셀 배열을 출력하지 않도록 하는 옵션입니다. 영상을 보려면 RViz의 Image 디스플레이에서 이 토픽을 선택하세요. 감쇠 설정은 수중 카메라에서 설명합니다.

데스크톱에서 보기

디스플레이와 렌더러가 있는 환경에서 Gazebo 창을 엽니다.

실행 결과 확인

각 예제에서 다음 결과를 확인하세요.

제어 방법은 ROV, 소나는 멀티빔 소나를 참고하세요.

다음 실험

DVL, USBL, 해류와 월드 목록을 살펴보세요. 첫 Fuel 자산 다운로드로 시작이 지연될 수 있습니다. 데이터가 오지 않으면 시뮬레이션 시간부터 확인한 뒤 문제 해결에 따라 플러그인과 리소스 로그를 확인합니다.

Launch 인수 선택하기

로봇·센서 launch에서 --show-args로 사용할 수 있는 인수를 확인합니다.

ros2 launch posim_demos posim_sensor.launch.py --show-args
인수 의미 센서 launch 기본값
namespace 설치된 모델 디렉터리 선택 빈 값; 직접 지정
world_name 월드 파일 선택 empty.sdf
paused 일시 정지 상태로 시작 true
gui / headless Gazebo GUI 표시 / 숨김 true / false
use_sim_time ROS 노드의 시뮬레이션 시계 사용 true
x, y, z 초기 위치, m 각각 0.0
roll, pitch, yaw 초기 자세, rad 각각 0.0
debug / verbosity_level 상세 로그 / 로그 수준 false / 1
use_ned_frame NED 프레임 사용 false

센서 예제에서는 paused:=false를 지정해 데이터가 생성되도록 합니다. 로봇·월드 launch의 인수는 해당 launch의 --show-args로 확인하세요.