로봇 모델링: URDF, SDF

crunch-code ㅣ 2024. 12. 8. 21:13

URDF vs SDF

  • URDF와 SDF은 robot description format 으로, 로봇을 묘사할 때 사용된다
  • URDF는 주로 RVIZ에서 사용되며, SDF는 Gazebo에서 주로 사용된다.
  • URDF -> SDF로 쉽게 변환 가능하다. (gazebo 명령어)
gz sdf -p model.urdf > model.sdf

 

 

구성 요소

  • 기저 (base): 로봇이 고정된 부분
    링크 (link): 로봇 팔 등
    말단장치 (end effector): 로봇 손
  • 조인트 (joint): 기저, 링크, 말단장치를 연결짓는 부분. 즉, 링크간의 관계를 기술한다.
  • 주된 구성 부분은 링크와 조인트임.
    • 링크는 외형/무게/관성모멘트 등으로 구성되며, 특히 외형은 stl이나 dae 포맷을 사용한다.
    • 조인트는 운동과 관련된 운동종류/운동축/힘/속도 등으로 구성된다. 운동은 주로 병진 (prismatic)이나 회전 (revolute)으로 구성된다
  • base_link 랑 arm_link 이 base_to_arm으로 연결된 로봇 예제
<robot name="simple_robot">
  <!-- 링크 정의 -->
  <link name="base_link">
    <visual>
      <geometry>
        <box size="0.5 0.5 0.1"/>
      </geometry>
      <material name="grey">
        <color rgba="0.5 0.5 0.5 1"/>
      </material>
    </visual>
    <collision>
      <geometry>
        <box size="0.5 0.5 0.1"/>
      </geometry>
      <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
    <inertial>
      <mass value="1.0"/>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <inertia ixx="0.01" ixy="0" ixz="0" iyy="0.01" iyz="0" izz="0.01"/>
    </inertial>
  </link>

  <link name="arm_link">
    <visual>
      <geometry>
        <cylinder radius="0.05" length="0.5"/>
      </geometry>
      <material name="blue">
        <color rgba="0 0 1 1"/>
      </material>
    </visual>
    <collision>
      <geometry>
        <cylinder radius="0.05" length="0.5"/>
      </geometry>
      <origin xyz="0 0 0.25" rpy="0 0 0"/>
    </collision>
    <inertial>
      <mass value="0.5"/>
      <origin xyz="0 0 0.25" rpy="0 0 0"/>
      <inertia ixx="0.005" ixy="0" ixz="0" iyy="0.005" iyz="0" izz="0.005"/>
    </inertial>
  </link>

  <!-- 조인트 정의 -->
  <joint name="base_to_arm" type="revolute">
    <parent link="base_link"/>
    <child link="arm_link"/>
    <origin xyz="0 0 0.05" rpy="0 0 0"/>
    <axis xyz="0 1 0"/>
    <limit lower="-1.57" upper="1.57" effort="10" velocity="1"/>
  </joint>

  <!-- 재료 정의 -->
  <material name="grey">
    <color rgba="0.5 0.5 0.5 1"/>
  </material>
  <material name="blue">
    <color rgba="0 0 1 1"/>
  </material>
</robot>

 

시각화 하기

  • URDF는 launch로 rviz에서 확인한다.
sudo apt-get install ros-humble-urdf-tutorial

ros2 launch urdf-tutorial display.launch.py model:=<.urdf 주소>
  • URDF는 tf tree로도 확인 가능하다. 
# option1. rqt상에서 확인
sudo apt-get install ros-humble-tf2-tools
sudo apt-get install ros-humble-rqt-tf-tree


# option2. pdf로 저장해서 확인
ros2 run tf2_tools view_frames

 

  • SDF는 Gazebo에서 확인한다
# 환경변수 확인
echo $GAZEBO_MODEL_PATH

# sdf가 존재하는 경로를 환경변수로 등록
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:<원하는 경로>

# 확인
gazebo --verbose

# World확인
gazebo <>.world --verbose

'Skills' 카테고리의 다른 글

GUI 제작 Tool: PySide & PyQt  (1) 2024.12.14
Docker + VScode 사용법 (5분 내로 핵심만)  (0) 2024.12.05
Github 사용법 (5분 내로 핵심만)  (0) 2024.12.04