URDF Reference
URDF/SDF 로봇 모델 XML 포맷 레퍼런스
URDF Reference 소개
URDF 레퍼런스는 ROS(Robot Operating System)와 Gazebo 시뮬레이션에서 사용되는 통합 로봇 기술 형식(Unified Robot Description Format)의 종합 가이드입니다. 링크 요소를 상세히 다룹니다: 렌더링용 visual 형상(box, cylinder, sphere, STL/DAE 메시 - package:// URI와 scale 지원), 물리 시뮬레이션용 collision 형상(성능을 위해 단순 형상 권장), inertial 속성(질량, 무게중심, 관성 텐서 - 원기둥 등 표준 형상의 ixx/iyy/izz 공식 포함).
조인트 섹션에서는 6가지 URDF 조인트 유형을 모두 다룹니다: revolute(로봇 팔용 각도 제한 회전), continuous(바퀴용 무한 회전), prismatic(리프트/액추에이터용 직선 이동), fixed(센서 마운트용 고정 결합), floating(드론용 6DOF), planar(3DOF 평면 이동). 각 유형에 parent/child 링크, origin(xyz + rpy), axis, limit(lower/upper/effort/velocity), dynamics(damping/friction), mimic(그리퍼 연동) 요소를 포함합니다.
고급 섹션에서는 모듈화 URDF 개발을 위한 Xacro 매크로(property 변수, params 기반 재사용 macro, include 파일 합성, if/unless 조건문), Gazebo 전용 플러그인(material 색상, 모바일 로봇용 diff_drive_controller, FOV/해상도 설정 가능한 카메라 센서, 360도 스캐닝 LiDAR, ros2_control 하드웨어 인터페이스), 2-DOF 로봇 팔 완성 예제와 URDF 검증/빌드 명령어(check_urdf, urdf_to_graphiz, xacro 변환)를 수록했습니다.
주요 기능
- 링크 요소: visual(형상 + 재질), collision(단순화 형상), inertial(질량 + 관성 텐서 공식)
- 6가지 조인트 유형: revolute, continuous, prismatic, fixed, floating, planar 전체 파라미터
- 기본 형상(box size, cylinder radius/length, sphere radius)과 메시 로드(STL/DAE, scale 지원)
- 조인트 동역학: limit(위치/속도/힘 범위), dynamics(감쇠/마찰), mimic(연동 조인트)
- Xacro 매크로: property 변수, params 기반 재사용 블록, include 파일 합성, if/unless 조건문
- Gazebo 플러그인: diff_drive_controller, 카메라 센서(640x480 RGB), LiDAR(360샘플 레이), ros2_control
- 2-DOF 로봇 팔 완성 URDF 예제: base_link, revolute 조인트, axis 정의, limit 설정
- 빌드/검증 명령어: xacro 변환, check_urdf, urdf_to_graphiz, RViz 시각화 실행
자주 묻는 질문
URDF 링크의 세 가지 하위 요소는 무엇인가요?
Visual은 렌더링용 형상(box/cylinder/sphere/mesh)과 material 색상을 정의합니다. Collision은 물리 기반 충돌 검사용 단순화 형상을 정의합니다(성능을 위해 visual보다 단순한 형상 권장). Inertial은 질량, 무게중심 origin, 3x3 관성 텐서(ixx, iyy, izz, ixy, ixz, iyz)를 지정합니다. Gazebo 시뮬레이션 안정성을 위해 inertial은 필수입니다.
6가지 URDF 조인트 유형은 무엇이고 각각 언제 사용하나요?
Revolute: 각도 제한 1축 회전(로봇 팔 관절). Continuous: 무한 회전(바퀴, 롤러). Prismatic: 위치 제한 직선 이동(리프트, 리니어 액추에이터). Fixed: 운동 없는 고정 결합(센서 마운트, 프레임). Floating: 6DOF 자유 이동(드론). Planar: 평면 위 3DOF(x, y, yaw).
URDF에서 조인트 제한은 어떻게 지정하나요?
<limit> 요소에 필요한 속성: lower/upper(위치 범위 - revolute는 라디안, prismatic는 미터), effort(최대 토크 Nm 또는 힘 N), velocity(최대 속도 rad/s 또는 m/s). 예시: lower="-3.14" upper="3.14" effort="100" velocity="1.0"으로 전체 회전 범위의 revolute 조인트를 설정합니다.
URDF에서 커스텀 3D 메시를 어떻게 불러오나요?
<geometry><mesh filename="package://my_robot/meshes/link.stl" scale="0.001 0.001 0.001" /></geometry>를 사용합니다. 밀리미터 단위로 내보낸 STL 파일은 scale="0.001 0.001 0.001"로 미터 변환이 필요합니다. DAE(Collada) 파일은 색상과 텍스처 정보를 포함할 수 있습니다. ROS 호환을 위해 항상 package:// URI를 사용하세요.
Xacro 매크로란 무엇이고 URDF 개발을 어떻게 단순화하나요?
Xacro(XML Macros)는 다음을 제공합니다: xacro:property로 명명 상수(link_length, joint_effort), xacro:macro로 params 기반 재사용 URDF 블록(cylinder_link 매크로를 여러 번 사용), xacro:include로 모듈식 파일 합성(팔, 그리퍼, 센서 파일 분리), xacro:if/unless로 조건부 요소(시뮬레이션에서만 카메라 활성화).
Gazebo에서 차동 구동 로봇은 어떻게 설정하나요?
libgazebo_ros_diff_drive.so 플러그인에 left_joint, right_joint 이름, wheel_separation과 wheel_diameter 치수, max_wheel_torque, command_topic(cmd_vel), odometry_topic(odom)을 설정합니다. ros namespace로 토픽을 리매핑합니다. 플러그인이 속도 명령 처리와 오도메트리 발행을 자동으로 수행합니다.
Gazebo에 카메라와 LiDAR 센서는 어떻게 추가하나요?
카메라: camera_link에 <sensor type="camera">를 추가하고 update_rate, horizontal_fov, 이미지 해상도(640x480), libgazebo_ros_camera.so 플러그인과 frame_name을 설정합니다. LiDAR: <sensor type="ray">에 수평 스캔 파라미터(360 샘플, -pi~pi), 범위(0.1m~30m), libgazebo_ros_ray_sensor.so로 sensor_msgs/LaserScan을 출력합니다.
URDF 파일은 어떻게 검증하고 시각화하나요?
xacro를 URDF로 변환: xacro model.urdf.xacro > model.urdf. 문법 검증: check_urdf model.urdf. 조인트 트리 PDF 생성: urdf_to_graphiz model.urdf. RViz 시각화: ros2 launch urdf_tutorial display.launch.py model:=model.urdf. joint_state_publisher_gui로 조인트 동작을 인터랙티브하게 테스트합니다.