URDF를 이용한 로봇 모델링

@Frank Oh · February 24, 2024 · 24 min read

1. URDF이란?
2. 모델링 하려는 로봇 정보 - 매니플레이터
4. URDF 작성하기
4.1 <robot>
4.3 <link>
4.4 <joint>
5. URDF 런치 파일 생성 및 실행
5.1 런치 파일 생성
5.2.1 런치 파일 없이 실행하는 방법
6. URDF 작성시 필요한 도구
6.1 URDF for VSCode
6.2 ROS: Preview UDF ← 이건 잘 안됨
6.3 URDF 파일 validation 체크
6.4 RViz
FAQ
다음 스터디 주제
참고

1. URDF이란?

URDF(Unified Robot Description Format)는 로봇의 원, 타원, 직사각형 따위의 기하학적 모델, 관절, 센서 등의 정보를 정의하는 XML 형식의 파일이다. 이 XML 파일에서 로봇의 부분을 나타내는 링크(link)와 동적인 움직임을 갖는 조인트(joint) 등 정보를 정의해서 로봇을 모델링 한다. 모델링한 정보는 RViz(ROS Visualization), Gazebo와 같은 시각화 프로그램을 사용해서 로봇 모델을 확인하고 시뮬레이션 해볼 수 있다.

로봇의 모델링, 시뮬레이션 및 제어를 위해 URDF외에도 아래와 같이 여러 파일 형태가 존재한다.

  • URDF: Unified Robot Description Format

    • 주로 로봇의 모델링 및 시뮬레이션에 사용되고 RViz 도구에서 사용된다
  • SDF: Simulation Description Format

    • SDF로봇 시뮬레이션에 사용되는 XML 형식의 파일로, Gazebo 와 같은 시뮬레이션 도구에서 사용된다
    • Gazebo 변환 명령어를 이용해서 URDF → SDF 변환도 가능하다

      $ gz sdf -p model.urdf > model.sdf
  • SRDF: Semantic Robot Description Format

    • URDF와 함께 사용되며, 로봇의 그룹, 경로 계획, 충돌 검사 등의 정보를 정의하는 XML 형식의 파일이고 MoveIt 에서 사용된다
    • Setup Assistant 프로그램을 통해 URDF → SRDF로 쉽게 변환 가능하다

2. 모델링 하려는 로봇 정보 - 매니플레이터

매니플레이터(manipulator)는 로봇의 한 유형으로 인간의 팔과 유사한 동작을 하는 로봇이다.

manipulator
manipulator



URDF 으로 모델링할 로봇은 매니플레이터이다. 매니플레이터의 기본 구조는 다음과 같이 기저, 링크, 조인트, 말단 장치로 구성되어 있다.

매니플레이터의 기본 구조

  • 기저(base): 매니퓰레이터가 고정되어 있는 부분

    • 목적에 따라 작업 공간내 바닥이 될 수 있음
    • 동적으로 움직이는 모바일 로봇이 될 수도 있음
  • 링크(link) : 기저, 조인트, 말단 장치를 연결해주는 강체 역할

    • - 쉽게 말해 프레임이라고 보면 됨
  • 조인트(joint) : 로봇의 움직임을 만들어내는 부분

    • 회전(revolute) 운동형과 병진(prismatic) 운동형 등의 동적 움직임을 가짐
  • 말단 장치 (end effector) : 사람의 손에 해당하는 부분 또는 장비

    • 집거나 흡착하여 들어올리거나 페인트를 분사하는 등 로봇의 목적에 따라 달라짐

Manipulator
Manipulator

구성 요소에서 가장 중요한 부분은 링크와 조인트 부분이다.

  • 링크 <link>= 링크의 이름, 외형, 무게(mass, kg), 관성 모멘트(Kg.m^2)

    • 외형: 원통, 원뿔, 직육면체등의 간단한 모델을 쓴다. 복잡한 구조는 메쉬 (mesh)을 표현하는 stl, dae(collda) 포맷을 사용한다
  • 조인트 <joint> = 조인트의 이름, 종류, 운동의 기준 축, 최소, 최대 조인트 값, 조인트에 부여되는 힘 / 속도

    • 조인트는 전/후 링크와의 관계를 기술한다
    • 아래와 같이 여러 조인트 종류로 정의할 수 있다

3. Description 패키지 생성하기

위에서 언급한 매니플레이터의 기본 정보를 URDF로 작성해보자. ROS 커뮤니티에서는 로봇의 모델링 정보를 담은 패키지를 로봇명_description 라는 이름으로 주로 사용한다.

  • ROS Index에서 description으로 검색하면 이미 작성된 여러 URDF을 예제로 확인해볼 수 있다

우리가 작성할 testbot_description패키지를 생성하자.

# 로봇의 모델링 정보을 받음 패키지 생성
$ cd ~/robot_ws/src
$ ros2 pkg create testbot_description --build-type ament_cmake --dependencies urdf

# urdf 폴더 생성후 urdf 파일 생성
$ cd testbot_description
$ mkdir urdf
$ cd urdf
$ vim testbot.urdf

3.1 전체 URDF 예시

<?xml version="1.0" ?>
<robot name="testbot">

  <material name="green">
    <color rgba="0 0.6 0 1" />
  </material>
  <material name="orange">
    <color rgba="1.0 0.4 0.0 1.0"/>
  </material>

  <link name="base"/>

  <link name="link1">
    <inertial>
      <origin xyz="0.0 0.0 0.25" rpy="0.0 0.0 0.0"/>
      <mass value="1.0"/>
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
    <visual>
      <origin xyz="0.0 0.0 0.25" rpy="0.0 0.0 0.0"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
      <material name="green"/>
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.25" rpy="0.0 0.0 0.0"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
    </collision>
  </link>

  <link name="link2">
    <inertial>
      <origin xyz="0.0 0.0 0.25" rpy="0.0 0.0 0.0"/>
      <mass value="1.0"/>
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
    <visual>
      <origin xyz="0.0 0.0 0.25" rpy="0.0 0.0 0.0"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
      <material name="orange"/>
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.25" rpy="0.0 0.0 0.0"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
    </collision>
  </link>

  <link name="link3">
    <inertial>
      <origin xyz="0.0 0.0 0.5" rpy="0.0 0.0 0.0"/>
      <mass value="1.0"/>
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
    <visual>
      <origin xyz="0.0 0.0 0.5" rpy="0.0 0.0 0.0"/>
      <geometry>
        <box size="0.1 0.1 1.0"/>
      </geometry>
      <material name="green"/>
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.5" rpy="0.0 0.0 0.0"/>
      <geometry>
        <box size="0.1 0.1 1.0"/>
      </geometry>
    </collision>
  </link>

  <link name="link4">
    <inertial>
      <origin xyz="0.0 0.0 0.25" rpy="0.0 0.0 0.0"/>
      <mass value="1.0"/>
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
    <visual>
      <origin xyz="0.0 0.0 0.25" rpy="0.0 0.0 0.0"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
      <material name="orange"/>
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.25" rpy="0.0 0.0 0.0"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
    </collision>
  </link>

  <joint name="base_joint" type="fixed">
    <parent link="base"/>
    <child link="link1"/>
  </joint>

  <joint name="link1_link2" type="revolute">
    <origin xyz="0.0 0.0 0.5" rpy="0.0 0.0 0.0"/>
    <parent link="link1"/>
    <child link="link2"/>
    <axis xyz="0.0 0.0 1.0"/>
    <limit lower="-2.617" upper="2.617" effort="30.0" velocity="1.571"/>
  </joint>

  <joint name="link2_link3" type="revolute">
    <origin xyz="0.0 0.0 0.5" rpy="0.0 0.0 0.0"/>
    <parent link="link2"/>
    <child link="link3"/>
    <axis xyz="0.0 1.0 0.0"/>
    <limit lower="-2.617" upper="2.617" effort="30.0" velocity="1.571"/>
  </joint>

  <joint name="link3_link4" type="revolute">
    <origin xyz="0.0 0.0 1.0" rpy="0.0 0.0 0.0"/>
    <parent link="link3"/>
    <child link="link4"/>
    <axis xyz="0.0 1.0 0.0"/>
    <limit lower="-2.617" upper="2.617" effort="30.0" velocity="1.571"/>
  </joint>

</robot>

3.2 RViz에서 렌더링된 화면

RViz에서 렌더링된 화면
RViz에서 렌더링된 화면

4. URDF 작성하기

URDF는 로봇을 설명하기 위한 XML 명세서로 XML 태그를 이용해서 로봇의 각 구성 요소를 기술한다. 이 명세서는 최대한 일반적으로 명시하도록 최대한 설계 되어 있지만, 이 명세서로는 모든 로봇을 설명할 수는 없다. 주요 제약 사항은 트리 구조만 표시할 수 있으며 병렬적으로 동작하는 로봇은 모델이 어렵다. 그리고 로봇이 조인트는 단단한 링크로 구성되어 있다고 가정하며 유연한 요소는 지원하지 않는다.

URDF XML에 대한 스펙은 ROS 문서에서 확인 할 수 있다. https://wiki.ros.org/urdf/XML

4.1 <robot>

<robot> 태그는 로봇 설명 파일의 root 요소로 제일 먼저 선언이 되어야 한다. 로봇에 대한 설명은 링크 요소와 링크를 서로 연결하는 조인트 요소 집합으로 구성된다.

<?xml version="1.0" ?>
<robot name="testbot">

  <link name="base"/>
  <link name="link1"> ... </link>
  <link name="link2"> ... </link>

  <joint name="base_joint" type="fixed"> ... </joint>
  <joint name="link1_link2" type="fixed"> ... </joint>
  <joint name="link2_link3" type="fixed"> ... </joint>

</robot>

<link> 태그는 일반적으로 로봇의 각 파트 (ex. 본체, 팔, 다리, 휠 등)을 표현하는데 사용되고 각 링크는 조인트를 통해 다른 링크에 연결이 된다.

매니퓰레이터의 구성 요소 그 첫 번째인 기저는 URDF에서 링크로 표현한다. 기저는 첫번째 링크와 조인트로 연결되어 있으며 이 조인트는 fixed 타입으로 설정되어 움직이지 않게 고정되어 있고 원점(0.0,0.0,0.0)에 위치해 있다.

<link name="base">

<joint name="base_joint" type="fixed">
    <parent link="base"/>
    <child link="link1"/>
</joint>

<link name="link1">
    <visual>
      <origin xyz="0.0 0.0 0.25" rpy="0.0 0.0 0.0"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
      <material name="green"/>
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.25" rpy="0.0 0.0 0.0"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
    </collision>
		<inertial>
      <origin xyz="0.0 0.0 0.25" rpy="0.0 0.0 0.0"/>
      <mass value="1.0"/>
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
</link>


Link
Link

<link>는 시각화 <visual>, 충돌 <collision> , 관성<inertial>태그로 구성되어 있다.

  • common tag

    • <origin> - 원점 좌표

      • 좌표는 xyz 좌표계를 통해 로봇의 위치를 3차원 공간 상에서 표현을 하고 ryz 오일러 각을 통해 로봇의 방향을 표현한다
      • 단위는 xyz (meter), rpy (radian)을 사용한다
  • <visual>

    • <geometry> 태그는 origin 좌표 중심으로 표시 범위와 모양과 크기를 적는다

      • 모델의 모양 입력은 box, cylinder, sphere 형태를 기본으로 제공한다
      • 표현하기 어려운 모델인 경우에는 STL, DAE등의 CAD 파일을 입력할 수도 있다
  • <collision>

    • <collision> 태그에는 링크의 간섭 범위를 나타내는 정보를 입력을 한다
    • <origin><geometry> 태그는 위에서 언급한 내용과 동일한데 표시 범위가 아닌 간섭 범위로 <visual> 태그의 표시 범위보다 더 크게하여 안전을 더 고려할 수도 있다
  • <inertial>

    • 이 태그로 물리적 속성인 질량과 관성 텐서 (inertial tensor) 값을 지정한다
    • <mass> 태그는 링크의 무게 (mass, 단위: kg)
    • <inertia> 태그는 관성 모멘트 (moments of inertia, 단위:kg·m^2)는 3x3 회전 관성 행렬로 정의를 한다. 대칭이라서 아래 밑줄친 것만 정의를 한다

      ixx ixy ixz
      ixy iyy iyz
      ixz iyz izz

    3D insertia tensor 값 예제

4.3.1 <material>

<material> 태그는 링크의 색상(color)이나 텍스처(texture)를 지정하는 데 사용된다.

  • <rgba> 태그로 색상을 지정한다

    • 빨강, 초록, 파랑에 해당하는 0.0 ~ 1.0 사이의 숫자를 각각 기입하여 설정할 수 있다
    • 마지막 숫자는 투명도(알파)로 0.0 ~ 1.0 값을 가지며 1.0 이면 투명 옵션을 사용하지 않은 고유 색상을 그대로 표시하는 상태를 의미한다
  • <texture> 텍스쳐는 파일(ex.png)로 지정한다
<material name="green">
    <color rgba="0 0.6 0 1" />
</material>
<material name="orange">
  <color rgba="1.0 0.4 0.0 1.0"/>
</material>

4.4 <joint>

<joint> 태그는 로봇의 조인트를 정의하는 데 사용되고 각 조인트는 두 링크를 연결하며 어떤 방식으로 움직일 수 있는지 정의한다.

URDF 에서 지원하는 조인트 종류

조인트의 종류
조인트의 종류


  • fixed (고정): 움직임이 허용되지 않는 관절이다
  • revolute (회전): 선풍기의 좌우 회전과 같이 일정 각도 범위를 회전하는 관절이다
  • continuous (연속): 자동차 바퀴처럼 연속 회전을 하는 관절이다
  • prismatic (프리즘): 단일 축에 대해 선형으로 미끄러지는 관절로 최대, 최소 위치 제한을 가진다
  • floating (자유): 6차원 이동 및 회전을 허용하는 관절이다
  • planar (평면): 한 평면에 수직으로 이동 및 회전할 수 있는 관절이다


<joint name="link1_link2" type="revolute">
    <origin xyz="0.0 0.0 0.5" rpy="0.0 0.0 0.0"/>
    <parent link="link1"/>
    <child link="link2"/>
    <axis xyz="0 0 1"/>
    <limit lower="-2.617" upper="2.617" effort="30.0" velocity="1.571"/>
</joint>


Joint
Joint

  • <parent>, <child>

    • 연결하는 링크로는 부모 링크(parent link)와 자식 링크(child link)의 이름을 지정하는데 일반적으로 기저에 가까운 링크를 부모 링크라고 보면 된다
  • <axis>

    • 회전 축을 정의한다. 축은 로봇의 기준 좌표를 기준으로 정의되며, 회전 운동의 방향을 결정한다.

      • <axis xyz="0 0 1"/> x, y는 zero 값으로 설정하고 z 값만 설정을 해서 link1link2 조인트의 경우에는 선풍기 목부분 z 축 기준으로 회전을 하는 설정이다
  • <limit>

    • 조인트 동작에 대한 제한 사항을 설정한다.

      • 속성은 최소, 최대 조인트 (lower, upper, 단위: radian), 조인트에 부여되는 힘(effort, 단위: N), 속도 (단위: rad/s)의 제한 값을 설정한다
    • 2.617 radian는 약 150도이다

각 태그와 각 설정하는 값에 대해서 이해하려면 직접 값을 변경해가면서 RViz에서 어떻게 렌더링되고 로봇이 동작을 하는지 테스트를 해보면 URDF를 이해하는 데 도움이 된다

RViz에서 각 조인트와 링크의 모습
RViz에서 각 조인트와 링크의 모습

참고

5. URDF 런치 파일 생성 및 실행

5.1 런치 파일 생성

check_urdfurdf_to_graphiz 와 같은 명령어(참고: 8. URDF 파일 validation 체크)를 통해서 작성한 URDF 의 syntax나 렌더링 된 모습을 간단하게 확인할 수 있지만, 더 자세한 모델은 RViz에서 확인하는 게 제일 베스트이다. 이를 위하여 우선 다음 예제와 같이 testbot_description 패키지 폴더로 이동해 testbot.launch.py 파일을 생성해보자.

$ cd ~/robot_ws/src/testbot_description
$ mkdir launch
$ cd launch
$ vim testbot.launch.py


import os

from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    rviz_display_config_file = os.path.join(
        get_package_share_directory('testbot_description'),
        'rviz',
        'testbot.rviz')
    urdf_file = os.path.join(
        get_package_share_directory('testbot_description'),
        'urdf',
        'testbot.urdf')
    with open(urdf_file, 'r') as infp:
        robot_description_file = infp.read()

    ld = LaunchDescription()

    robot_state_publisher = Node(
        package='robot_state_publisher',
        executable='robot_state_publisher',
        parameters=[
            {'use_sim_time': False},
            {'robot_description': robot_description_file}
        ],
        output='screen')

    joint_state_publisher_gui = Node(
        package='joint_state_publisher_gui',
        executable='joint_state_publisher_gui',
        output='screen')

    rviz2 = Node(
        package='rviz2',
        executable='rviz2',
        arguments=['-d', rviz_display_config_file],
        output='screen')

    ld.add_action(robot_state_publisher)
    ld.add_action(joint_state_publisher_gui)
    ld.add_action(rviz2)

    return ld


URDF를 담은 robot_description 파라미터와 joint_state_publisher, robot_state_publisher, rviz2 노드로 구성되어 있다.

  • joint_state_publisher 노드

    • 파라미터 서버의 robot_description 파라미터에 URDF가 주어지면 이 노드는 URDF의 모든 이동 가능한 관절에 대한 기본 값을 /joint_states 토픽에 sensor_msgs/msg/JointState 메시지 형태로 지속적으로 publish를 한다
    • Published Topic

      • /joint_states (sensor_msgs/JointState) - 시스템에 있는 모든 움직이는 조인트 상태 값
    • joint_state_publisher_gui

      조인트에 명령을 주는 GUI 툴을 제공한다

      • Join State Publisher GUI
        Join State Publisher GUI
  • robot_state_publisher 노드

    • URDF에 설정된 로봇 정보와 sensor_msgs/msg/JointState 토픽 정보를 가지고 계산한 kinematic tree model (TF)와 3D 위치 정보를 /tf, /tf_static 토픽에 publish를 해주는 역할을 한다
    • Published Topics

      • /robot_description (std_msgs/msg/String) - 로봇 URDF에 대한 String 값이다. robot_description parameter에 값이 설정되면 이 토픽으로 republish 하여 동적인 정보도 전달될 수 있다
      • /tf (tf2_msgs/msg/TFMessage) - 로봇의 움직일 수 있는 조인트에 대한 정보를 보낸다
      • /tf_static (tf2_msgs/msg/TFMessage) - 로봇의 정적 조인트에 해당하는 정보를 보낸다
    • Subscribed Topic

      • /joint_states (sendor_msgs/msg/JointState) - 로봇 위치에 대한 관절 상태가 업데이트된다

RQT

RQT
RQT

참고

5.2 빌드 및 실행

런치 파일 생성후 rviz 디스플레이 생성 파일을 생성하면 된다. 모든 파일은 github repo에 있어서 원본 파일을 참고하여 추가하자.

참고로 예제로 작성한 testbot_description 패키지는 하기와 같은 패키지를 의존하고 있기에 빌드 전에 설치해야 한다.

$ sudo apt install ros-humble-joint-state-publisher ros-humble-joint-state-publisher-gui ros-humble-robot-state-publisher


# 컴파일하고 런치 실행
$ cd ~/robot_ws/
$ colcon build --symlink-install
$ ros2 launch testbot_description testbot.launch.py


자주 사용하는 명령어는 alias로 생성해두면 따르게 ros 관련 명령어를 빠르게 실행할 수 있다.

alias cba='colcon build --symlink-install'
alias cbp='colcon build --symlink-install --packages-select'
alias cw='cd ~/robot_ws'
alias sl='source $HOME/robot_ws/install/local_setup.bash'

5.2.1 런치 파일 없이 실행하는 방법

ros-humble-urdf-tutorial 이용하면 론치 파일 작성 없이 URDF를 RViz에서 로딩해볼 수 있다. ros-###-urdf-tutorial 패키지가 설치가 되있어야 한다.

# 설치
> sudo apt install ros-humble-urdf-tutorial
# 아래 명령어로 실행하면 된다
> ros2 launch urdf_tutorial [display.launch.py](<http://display.launch.py/>) model:=/home/parallels/robot_ws/src/testbot_description/urdf/testbot.urdf

런치 파일로 실행한 것과 같이 RVIz에서 렌더링 된 매니풀레이터를 볼 수 있다.

Rviz
Rviz

6. URDF 작성시 필요한 도구

6.1 URDF for VSCode

  • URDF 지원

    • .urdf, .xacro 파일 xml 형식 지원
    • 일부 snippet 지원
  • Jetbrain PyCharm에서는 지원하는 plugin은 없는 듯함

VS Code

참고

6.2 ROS: Preview UDF ← 이건 잘 안됨

  • Marketplace > ROS extension 설치
  • 사용방법 : urdf 파일 오픈 후 Command Palette > ROS: Preview URDF 선택

    • ROS로는 되는대 ROS 2에서는 안되는게 아닌가 싶음

기대하는 화면 - 안됨

  • 실행해보면 blank 화면이 나옴

VS COde - ROS: Preview UDF
VS COde - ROS: Preview UDF

참고

6.3 URDF 파일 validation 체크

URDF 으로 로봇 모델이 잘 작성이 되었는지 검토하는 방법은 여러 명령어로 확인이 가능하다.

6.3.1 check_urdf

ROS에서는 check_urdf 명령어로 작성한 URDF의 문법적 오류 및 각 링크의 연결 관계를 확인할 수 있다.

$ check_urdf testbot.urdf
robot name is: testbot
---------- Successfully Parsed XML ---------------
root Link: base has 1 child(ren)
    child(1):  link1
        child(1):  link2
            child(1):  link3
                child(1):  link4

6.3.2 urdf_to_graphiz

작성한 모델을 graphiz 다이어그램으로도 나타낼 수 있다. urdf_to_graphiz 명령어로 아래처럼 실행하면 .gv 파일과 .pdf 파일이 생성이 된다. 링크와 조인트와의 관계, 각 조인트와 조인트 사이의 상대 좌표 변환을 한눈에 확인해 볼 수 있다.

$ urdf_to_graphiz testbot.urdf
Created file testbot.gv
Created file testbot.pdf


URDF의 link와 joint의 관계

URDF의 link와 joint의 관계
URDF의 link와 joint의 관계

6.3.3 tf2_tools

view_frames 은 현재 TF tree를 그래프로 PDF 생성해주는 그래픽 디버깅 도구이다.

$ ros2 run tf2_tools view_frames
$ evince frames_2024-02-16_19.20.58.pdf

TF2 Tools
TF2 Tools

참고

6.4 RViz

RViz (ROS Visualization)는 ROS의 시각화 도구 중 하나로 로봇의 위치 및 자세, 센서 데이터, 지도 정보등을 시각화하여 사용자가 로봇 시스템을 이해하고 디버깅할 수 있게 해준다. RViz가 설치 안되어 있으면 아래 명령어로 설치하고 rivz2 로 실행하면 된다.

설치 및 실행

# 설치
> sudo apt install ros-humble-rviz2

# 실행
> rviz2

참고

FAQ

1. xyz, rpy의 차이점?

ChatGPT
ChatGPT



RPY angles

RPY
RPY

참고

2. xacro이란?

  • xacro (자크로) 파일은 XML Macro 의 줄임말로 반복되는 코드를 불러올 수 있는 매크로 언어이다
  • URDF를 만드는데 XML로드 가능하지만, xacro를 사용하여 재사용 가능한 부분을 정의해서 코드를 간결하게 유지하고 재사용성을 높일 수 있다
2.1 Xacro 기능
1. 속성, 속성 블럭
<xacro:property name="the_radius" value="2.1" />
<xacro:property name="the_length" value="4.5" />

<geometry type="cylinder" radius="${the_radius}" length="${the_length}" />
2. 수학 상수 및 함수 제공
  • ex. pi, sqrt(x), radians(x)
<xacro:property name="circle_revolute_upper" value="${pi/2}"/>
<xacro:property name="circle_revolute_upper" value="${radians(180)}"/>

<origin xyz="0.0 0.0 ${height/2+joint_height}" rpy="0.0 0.0 0.0"/>
3. 조건부 블럭
  • 조건부 블럭은 변수의 참(true, 1), 거짓(false, 0)에 따라서 다르게 정의를 할 수 있다
<xacro:property name="var" value="useit"/>

<xacro:if value="${var == 'useit'}">
   <...some xml code here...>
</xacro:if>
<xacro:if value="${var.startswith('use') and var.endswith('it')}">
   <...some xml code here...>
</xacro:if>
4. 매크로
  • 매크로는 인자(parameter)를 받을 수 있다
<xacro:macro name="link_box_macro" params="suffix">
    <link name="link_${suffix}">
      <xacro:insert_block name="link_inertial_box" />
      <xacro:insert_block name="link_visual_box" />
      <xacro:insert_block name="link_collision_box" />
    </link>
</xacro:macro>

<xacro:link_box_macro suffix="1" />

참고

ChatGPT
ChatGPT

4. 매니플레이터, manipulator

  • 인간의 팔과 유사한 동작을 하는 로봇의 기구이다
  • 보통 여러 개의 자유도를 가지며 대상물(부품 또는 공구)을 붙잡거나 옮길 목적으로, 서로 상대적인 회전 운동이나 미끄럼 운동을 하는 관절의 연결로 구성된 기구이다

참고

5. inertia를 정의할 때 ixx, ixy의 의미는 뭔가?

ChatGPT
ChatGPT

다음 스터디 주제

  • 로델링한 로봇 제어해보기
  • gazebo 로 로봇 모델링
  • navigation 관련 스터디

참고

@Frank Oh
안녕하세요. 방문해주셔서 감사합니다. 컴퓨터 관련 스터디한 내용 기록하는 블로그입니다.