Skip to content

ROS에서 Indy 로봇 모델 가시화

요구 환경

  • Ubuntu 16.04 및 ROS Kinetic 이상 이 설치된 PC

  • indy-ros 소스코드 설치

위 요구 환경의 설치가 완료되지 않은 경우 설치를 먼저 진행하여 주십시오.

실행 방법

1. 터미널 열기

2. ROS 환경설정 확인하기

ROS 명령어를 정상적으로 사용하기 위하여 terminal 의 환경에 ROS 환경변수를 추가 할 필요가 있습니다. 아래의 명령어로 추가할 수 있으며, 설치에서 설명한 bashrc에 해당 명령어들이 추가되어 있을 경우, 이 과정을 생략 할 수 있습니다.

1
2
source /opt/ros/<사용중인 ROS 버전>/setup.bash
source <작업중인 워크스페이스 경로>/devel/setup.bash

example.

1
2
source /opt/ros/melodic/setup.bash
source ~/catkin_ws/devel/setup.bash

3. 명령어 실행하기

1
roslaunch indy7_description display_indy7.launch

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



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


indy7_description 패키지 구성

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

indy7_description 패키지는 ROS의 가시화 프로그램(RViz)과 시뮬레이션 프로그램(Gazebo) 등에서 사용할 수 있는 모델 파일을 포함하고 있습니다. 다른 Indy 모델 (IndyRP2, IndyRP, Indy5 ) 에 대해서도 같은 구성을 가지고 있습니다. 본 문서에서는 Indy7 을 예시로 설명합니다.

  • launch : 여러 노드를 동시에 실행시키기 위한 파일입니다.

  • rviz_config : ROS의 가시화 프로그램(RViz)의 설정을 저장하는 파일입니다.

  • urdf : ROS의 가시화 프로그램(RViz)과 시뮬레이션 프로그램(Gazebo) 등에서 사용할 수 있는 로봇 모델 파일입니다.

  • meshes : 로봇의 외관을 RViz에 표시하고 충돌을 검사하기 위한 3D CAD 모델입니다.

런치파일

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

1
2
3
4
5
6
<launch>
    <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find indy7_description)/urdf/indy7.xacro'"/>
    <node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui"/>
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_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 파일을 읽어들인 후 URDF 파일로 변환합니다.

  • joint_state_publisher_gui : 로봇의 각 조인트 포지션을 /joint_states 토픽으로 발신합니다. joint_state_publisher_gui 를 사용하면 joint position 을 설정할 수 있는 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가 실행됩니다.

로봇 모델

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 를 참조해 주십시오.