liminfo

Gazebo Reference

Gazebo 시뮬레이션/SDF/플러그인 레퍼런스

26개 결과

Gazebo Reference 소개

Gazebo 레퍼런스는 로봇 알고리즘 테스트, 로봇 설계, 하드웨어 인 더 루프 시뮬레이션에 사용되는 오픈소스 3D 로봇 시뮬레이터인 Gazebo(구 Ignition Gazebo)를 위한 빠른 참조 가이드입니다. 시뮬레이션 실행 제어, 모델 스폰, 메시지 토픽 검사, 서비스 호출, 시뮬레이션 로그 기록/재생을 위한 gz 명령줄 인터페이스(gz sim, gz model, gz topic, gz service, gz log)를 다룹니다.

레퍼런스는 SDF(Simulation Description Format) 모델링을 상세히 문서화합니다. 완전한 XML 요소 계층 구조를 다룹니다: <sdf> 루트 요소, 환경 정의를 위한 <world>, 로봇/개체 기술을 위한 <model>, <inertial>(질량, 관성 텐서), <collision>(마찰이 있는 물리 지오메트리), <visual>(렌더링 지오메트리)이 포함된 강체를 위한 <link>. 조인트 정의(<joint>)는 축 제한이 있는 revolute, prismatic, fixed 유형을 다룹니다. 센서 정의(<sensor>)는 스캔 매개변수, 범위 제한, 업데이트 레이트가 포함된 GPU LiDAR 구성을 포함합니다.

필수 Gazebo 플러그인(차동 구동 제어 DiffDrive, PID 게인의 JointController, 데이터 생성 Sensors, DART/Bullet 엔진 구성 Physics, UserCommands, SceneBroadcaster), 월드 설정(중력, 조명, 장면 구성, Fuel에서 외부 모델 포함), 토픽 브릿징을 위한 ros_gz_bridge, 시뮬레이션 실행 및 엔티티 스폰을 위한 ros_gz_sim, 카메라 이미지 브릿징을 위한 ros_gz_image를 이용한 ROS 2 연동도 다룹니다.

주요 기능

  • 모든 gz CLI 명령어 문서화: gz sim(시작/일시정지/실행), gz model(목록/스폰/삭제), gz topic(목록/에코/정보), gz service(목록/호출), gz log(기록/재생)
  • 완전한 SDF 모델링 레퍼런스: <model>, <link>, <joint>(축 제한이 있는 revolute/prismatic/fixed), <sensor>(스캔/범위 매개변수의 GPU LiDAR), <collision>, <visual>, <inertial>
  • DiffDrive(바퀴 간격, 반지름, 오도메트리 주파수), JointController(PID 게인, 힘 명령), Sensors(렌더 엔진 선택) 플러그인 구성 구문
  • DART/Bullet 선택, 최대 스텝 크기, 실시간 계수 구성이 포함된 물리 엔진 설정
  • 월드 환경 설정: 중력 벡터(지구, 화성, 무중력), 방향성/점/스폿 조명, 장면 앰비언트, URI를 통한 Fuel 모델 포함
  • ROS 2 연동: 양방향 토픽 매핑 구문(geometry_msgs/Twist와 gz.msgs.Twist)의 ros_gz_bridge parameter_bridge
  • ros_gz_sim create를 사용한 ROS 2에서의 모델 스폰: 위치/방향 매개변수 및 SDF 파일 지정
  • ros_gz_image를 이용한 Gazebo에서 ROS로의 카메라 이미지 브릿징(sensor_msgs/Image 토픽 퍼블리시)

자주 묻는 질문

이 Gazebo 레퍼런스는 어떤 기능을 다루나요?

5가지 주요 영역을 다룹니다: 기본 명령(시뮬레이션 제어, 모델 관리, 토픽 검사, 서비스 호출, 로그 기록용 gz CLI), SDF 모델링(모델, 링크, 조인트, 센서, 충돌/시각 지오메트리, 관성 속성의 완전한 XML 계층), 플러그인(DiffDrive, JointController, Sensors, Physics, UserCommands, SceneBroadcaster), 월드 설정(중력, 조명, 장면, 외부 모델 포함), ROS 2 연동(ros_gz_bridge, ros_gz_sim, ros_gz_image).

SDF에서 로봇 모델은 어떻게 정의하나요?

로봇 모델은 강체를 위한 <link> 요소와 연결을 위한 <joint> 요소를 포함하는 <model> 요소로 정의됩니다. 각 링크에는 질량과 관성 텐서를 위한 <inertial>, 표면 마찰이 있는 물리 지오메트리(박스, 실린더, 메시)를 위한 <collision>, 렌더링 지오메트리를 위한 <visual>이 포함됩니다. 조인트는 부모/자식 링크, 유형(revolute, prismatic, fixed), 축 방향, 위치/힘 제한을 지정합니다.

DiffDrive 플러그인은 무엇이며 어떻게 설정하나요?

DiffDrive 플러그인(gz::sim::systems::DiffDrive)은 2륜 차동 구동 로봇을 제어합니다. left_joint과 right_joint 이름, wheel_separation(바퀴 간 거리), wheel_radius, odom_publish_frequency를 지정하여 구성합니다. 속도 명령을 위한 Twist 메시지를 구독하고 오도메트리 데이터를 퍼블리시합니다. <model> 정의 내부에 <plugin> 요소로 추가합니다.

Gazebo에서 LiDAR 같은 센서는 어떻게 설정하나요?

<link> 내부에 type="gpu_lidar"인 <sensor> 요소를 추가합니다. 수평 샘플(예: 640), 최소/최대 각도(예: 180도에 -1.57~1.57 라디안), 범위 최소/최대(예: 0.1~30미터), update_rate(예: 10Hz) 등 스캔 매개변수를 구성합니다. 센서 데이터 생성을 위해 ogre2 렌더 엔진과 함께 월드 수준에서 Sensors 시스템 플러그인을 로드해야 합니다.

Gazebo 토픽을 ROS 2로 어떻게 브릿징하나요?

ros_gz_bridge parameter_bridge를 토픽 매핑 구문과 함께 사용합니다: /토픽명@ros_msg_type@gz_msg_type은 양방향, [gz_msg_type은 Gazebo에서 ROS 단방향입니다. 예를 들어 /cmd_vel@geometry_msgs/msg/Twist@gz.msgs.Twist는 속도 명령을 양방향으로, /scan@sensor_msgs/msg/LaserScan[gz.msgs.LaserScan은 LiDAR 데이터를 Gazebo에서 ROS로 브릿징합니다.

Gazebo는 어떤 물리 엔진을 지원하나요?

DART와 Bullet 물리 엔진을 지원하며 <physics> 요소에서 type="dart" 또는 type="bullet"로 설정합니다. 주요 매개변수로 max_step_size(시뮬레이션 시간 스텝, 보통 1kHz에 0.001초)와 real_time_factor(실시간 1.0, 더 높으면 가속)가 있습니다. 물리 시뮬레이션 실행을 위해 Physics 시스템 플러그인(gz::sim::systems::Physics)을 로드해야 합니다.

Gazebo Fuel에서 외부 모델을 어떻게 포함하나요?

<include> 요소에 Fuel 모델 URL을 가리키는 <uri>를 사용합니다(예: https://fuel.gazebosim.org/1.0/OpenRobotics/models/ground_plane). model:// URI 스킴으로 로컬 모델도 포함할 수 있습니다. <include> 내에 <pose> 요소를 추가하여 스폰 위치와 방향(x y z roll pitch yaw)을 설정합니다.

기본적인 Gazebo 월드에 필수적인 시스템 플러그인은 무엇인가요?

최소 기능 월드에는 Physics(물리 시뮬레이션), UserCommands(GUI 모델 조작), SceneBroadcaster(GUI 시각화), 그리고 카메라나 LiDAR 사용 시 Sensors(ogre2 렌더 엔진)가 필요합니다. 이들은 <world> 정의 내부에 <plugin> 요소로 추가됩니다.