Skip to content

ROS에서 로봇 모델 가시화

indy7_description 패키지

1
2
3
4
5
6
├── indy7_description
    ├── urdf
    ├── launch
    ├── rviz_config
    ├── meshes
    └──  ...

indy7_description 패키지는 ROS의 가시화 프로그램(RViz)과 시뮬레이션 프로그램(Gazebo) 등에서 사용할 수 있는 모델 파일(URDF)을 포함하고 있습니다.

로봇 모델

URDF (The Universal Robotic Description Format)는 로봇의 운동학적, 동력학적 요소들을 기술하기 위한 XML형식의 파일입니다. URDF 모델을 좀더 쉽고 짧게 기술하기 위해 xacro 파일 형식이 존재하며, indy7의 경우 indy7_description 패키지 의 urdf 폴더 안에 Indy 로봇을 위한 xacro파일(indy7.xacro)이 있습니다.

아래의 코드는 indy7.xacro의 link0을 기술하는 부분입니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
...

<link name="link0">
  <visual>
    <origin xyz="0 0 0" rpy="0 0 0"/>
    <geometry>
      <mesh filename="package://indy7_description/meshes/stl/Indy7_0.stl"/>
    </geometry>
    <material name="${indy_material}"/>
  </visual>
  <collision>
    <origin xyz="0 0 0" rpy="0 0 0"/>
    <geometry>
      <cylinder length="0.06" radius="0.102"/>
    </geometry>
  </collision>
  <inertial>
    <origin xyz="0 0 0" rpy="0 0 0"/>
    <mass value="1.59306955"/>
    <inertia ixx="+0.00572623" iyy="+0.00558959" izz="+0.00966674" ixy="+0.00000251" iyz="-0.00000014" ixz="-0.00011380"/>
  </inertial>
</link>

...

<joint name="joint0" type="continuous">
  <parent link="link0"/>
  <child link="link1"/>
  <origin xyz="0 0 0.03000000" rpy="0 0 0"/>
  <axis xyz="0 0 1"/>
</joint>

...
  • visual : 화면에 표시되는 로봇의 외형을 위한 키 입니다. 위 예에서는 meshes 폴더에 저장되어있는 stl모델을 불러오고 있습니다.

  • collision : MoveIt등에서 충돌을 판단할때 사용하는 모델입니다. visual과 같은 모델을 사용하는 것도 가능하나, 일반적으로 외형모델을 그대로 사용할 경우, 계산이 무거워질 수 있으므로 간단한 모델 (위 예시의 경우 반영 0.102[m] 높이 0.06[m]의 원통)을 사용합니다. 사용하는 단위는 [m] 입니다.

  • inertia : 로봇의 동역학적 요소를 기입하기 위한 키 입니다.

  • joint : 링크와 링크를 연결하기 위한 요소입니다.

xacro에 대해 좀더 상세한 정보가 필요한 경우 ROS tutorial xacro 를 참조해 주십시오.

RViz 실행하기

RViz를 사용해서 ROS에 Indy7 모델을 표시 할 수 있습니다. 런치 파일은 여러 노드를 동시에 실행시키기 위한 파일입니다. 패키지의 launch폴더에 위치하며, RViz에 Indy7을 가시화 하는 런치파일은

1
$ roslaunch indy7_description display_indy7.launch

명령어로 실행시킬 수 있습니다. 실행결과, 아래 2개의 창이 실행되는 것을 확인 할 수 있습니다.



joint_states_publisher의 각 조인트 포지션 값을 조정해 rviz에 표시되는 로봇의 자세를 바꿀 수 있습니다.


런치파일

아래의 코드는 상기 실행명령에서 사용한 런치파일입니다.

1
2
3
4
5
6
7
8
<launch>
    <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find indy7_description)/urdf/indy7.xacro'"/>
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
        <param name="use_gui" value="TRUE"/>
    </node>
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher"/>
    <node name="rviz" pkg="rviz" type="rviz" args="-d $(find indy7_description)/rviz_config/indy7.rviz"/>
</launch>
  • robot_description : joint_state_publisher 에서 사용될 파라미터로, indy7.xacro를 읽어들입니다.

  • joint_state_publisher : robot_description 의 각 조인트 포지션을 /joint_states 토픽으로 발신합니다. 이때, use_gui의 값을 TRUE로 지정하여 그림과 같은 GUI를 실행할 수 있습니다.

  • robot_state_publisher : /joint_states 를 구독하여 각 링크의 3D 좌표(tf)를 발신합니다.

  • rviz : rviz 설정파일 (indy7_description/rviz_config/indy7.rviz) 를 로드하여 rviz를 실행합니다. robot_state_publisher 가 발신하는 3D 좌표를 구독하여 화면에 표시합니다.

Note

일반적으로 ROS 노드를 실행시키기 위해서는 따로 roscore를 실행시켜야 하나, launch 파일로 실행할 경우에는 자동으로 roscore가 실행됩니다.