2015년 11월 14일 토요일

로봇암 움직이는 기구학/역기구학과 ROS MoveIt

ROS로 로봇암을 움직이는 MoveIt에 대해, 잘 설명한 글을 링크한다.

1. 기구학/역기구학 개념
일반적으로, 로봇암은 회전각 을 제어하는 모터로 구성된다. 하지만, 우리가 원하는 것은 로봇암의 End effector 를 정확한 x, y, z 위치와 effector의 자세각을 제어하는 것이다.


그러므로, 로봇암을 제어하는 문제는 다음 수식과 같이 회전각 공간을 위치와 자세각으로 표현되는 작업공간으로 행렬변환하는 문제가 된다.



이는 기하학적인 운동을 계산하는 것이므로, 기구학(FK. Forward Kinematic), 역기구학(RK. Reverse Kinematic)이라 칭한다.

좌표를 변환할 때 주로 사용하는 것은 동차행렬이며, 이는 4x4 행렬로 표현될 수 있다. 한 행렬안에, 이동, 회전, 스케일을 모두 표현할 수 있다. 변환행렬은 좌표 변환 기능(TF. transform function)을 담당한다.


로봇암은 joint와 link의 쌓으로 구성되므로, 각 joint별 회전각 를 이용해 변환행렬 t을 계산할 수 있으며, 이들 t1...tn의 행렬곱으로 작업공간의 위치와 자세각을 계산하는 tm 손쉽게 얻을 수 있다.

이를 역으로 풀면, 각 joint별 회전각을 얻을 수 있다. 결론적으로, 획득된 회전각들은 로봇암의 각 모터를 제어할 때 사용하면 된다.


이는 마치 게임 개발 시, 모델 지역좌표와 월드좌표를 계산하는 과정과 매우 유사하다. 이런 좌표변환은 컴퓨터 그래픽스에서 고전적인 좌표 표현 방식 중 하나이다.

2. ROS기반 로봇암 제어 순서
ROS을 이용한 로봇암 제어 방법은 다음과 같다.

1. ROS MoveIt 패키지 설치
2. URDF(Universal Robotic Description Format) 파일에 로봇암의 기구부의 조인트, 링크 지점, 형상, 물성(무게중심 등), 재질(색상 등) 정의하고 로봇암을 모델링함
3. MoveIt Setup Assistant 프로그램을 통해, 로봇암 정보 설정

이와 관련해, 다음 레퍼런스를 참고하였다.


상세 내용은 다음과 같다.



3. ROS URDF 파일 기반 로봇암 모델링
로봇암은 관절에 해당하는 조인트(joint), 관절과 관절을 연결하는 링크(link)로 다음 그림과 같이 구성된다. URDF는 조인트와 링크의 관계를 정의하는 포맷이다.

위의 링크는 다음과 같은 URDF 포맷으로 정의할 수 있다. 파일명은 my_robot.urdf로 저장한다.
<robot name="test_robot">
  <link name="link1" />
  <link name="link2" />
  <link name="link3" />
  <link name="link4" />

  <joint name="joint1" type="continuous">
    <parent link="link1"/>
    <child link="link2"/>
  </joint>

  <joint name="joint2" type="continuous">
    <parent link="link1"/>
    <child link="link3"/>
  </joint>

  <joint name="joint3" type="continuous">
    <parent link="link3"/>
    <child link="link4"/>
  </joint>
</robot>

URDF를 사용하려면, 다음 라이브러리를 설치해야 한다.
  $ sudo apt-get install liburdfdom-tools

제대로 작성했는 지를 체크하려면, 다음과 같은 명령을 입력한다.
  $ check_urdf my_robot.urdf

이제 여기에, 로봇암 조인트 위치, 링크 치수를 정의한다.
<robot name="test_robot">
  <link name="link1" />
  <link name="link2" />
  <link name="link3" />
  <link name="link4" />


  <joint name="joint1" type="continuous">
    <parent link="link1"/>
    <child link="link2"/>
    <origin xyz="5 3 0" rpy="0 0 0" />
  </joint>

  <joint name="joint2" type="continuous">
    <parent link="link1"/>
    <child link="link3"/>
    <origin xyz="-2 5 0" rpy="0 0 1.57" />
  </joint>

  <joint name="joint3" type="continuous">
    <parent link="link3"/>
    <child link="link4"/>
    <origin xyz="5 0 0" rpy="0 0 -1.57" />
  </joint>
</robot>

다음과 같이 조인트 회전축을 정의한다. 조인트 회전축은 벡터이며, 정규화되어 있다.
<robot name="test_robot">
  <link name="link1" />
  <link name="link2" />
  <link name="link3" />
  <link name="link4" />

  <joint name="joint1" type="continuous">
    <parent link="link1"/>
    <child link="link2"/>
    <origin xyz="5 3 0" rpy="0 0 0" />
    <axis xyz="-0.9 0.15 0" />
  </joint>

  <joint name="joint2" type="continuous">
    <parent link="link1"/>
    <child link="link3"/>
    <origin xyz="-2 5 0" rpy="0 0 1.57" />
    <axis xyz="-0.707 0.707 0" />
  </joint>

  <joint name="joint3" type="continuous">
    <parent link="link3"/>
    <child link="link4"/>
    <origin xyz="5 0 0" rpy="0 0 -1.57" />
    <axis xyz="0.707 -0.707 0" />
  </joint>
</robot>

이제 다시 URDF 파일을 체크하고, 로봇암을 시각적으로 확인해 본다.
  $ check_urdf my_robot.urdf
  $ urdf_to_graphiz my_robot.urdf
  $ evince test_robot.pdf
그럼 다음과 같은 로봇암 그래픽을 확인할 수 있다.

로봇암을 직접 프로그램으로 제어하면, 로봇암 부품끼리 충돌하는 문제가 빈번히 발생한다. 잘 생각하고 코딩했더라도, 충돌 문제를 피하기 어려우며, 부품끼리 충돌하면 로봇암 기구가 부서질 수도 있다. URDF는 충돌 범위를 각 링크 별로 지정할 수 있다.

아울러, 링크는 자중이 있어, 로봇암 움직임에 영향을 줄 수 있으므로, 무게중심을 정의할 필요가 있다.

다음은 하나의 링크에 대한 충돌 영역, 무게 중심 및 시각적으로 보이는 정보를 정의한 예이다.

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

여기서 material "black"은 URDF 파일에 미리 사전 정의되어 있어야 한다.

  <material name="black">
    <color rgba="0.0 0.0 0.0 1.0"/>
  </material>

이런 방식으로, 로봇암을 상세히 정의할 수 있다.

3축 로봇암 MoveIt테스트를 위해, 오로카 세미나 자료인 URDF파일을 이용해 본다. 상세 내용은 다음 링크를 참고한다.
로봇암 구조는 다음과 같다.

각 조인트를 시뮬레이션할 수 있도록 launch파일을 구성하고, roslaunch를 실행한다.


rviz를 실행해 확인하면, 정의한 바와 같이 잘 동작되는 것을 확인할 수 있다.


다음은 turtlebot 패키지에 정의된 로봇암을 rviz 로 확인한 것이다.




4. ROS MoveIt
역기구학적 계산을 위해, 직접 앞의 변환행렬을 계산하고, 역함수를 계산해, 원하는 모터의 회전각을 얻을 수 있으나, ROS에서는 이미 이를 계산해 주는 MoveIt 패키지가 나와 있다.


MoveIt은 ROS Desktop 버전을 설치하였다면, 이미 설치되어 있을 것이다. 만약, 그렇지 않다면, 다음 링크를 참고해 설치를 한다.
MoveIt을 편리하게 설정하는 MoveIt Setup Assistant 도구가 있다. roscore를 실행하고, 다음 명령을 터미널에서 입력한다.

roslaunch moveit_setup_assistant setup_assistant.launch

그럼 다음과 같은 프로그램이 실행된다.


MoveIt을 이용하면, 다음과 같이 자기 충돌이 있는 지를 체크할 수 있다.


기타, 링크 설정, 로봇 포즈 설정 등을 할 수 있다.

MoveIt Setup Assistant를 이용한 MoveIt 설정 및 실행 방법은 다음을 참고하자. 


MoveIt 패키지를 제대로 설정하고, 실행하면, 다음과 같은 로봇암 제어를 할 수 있다.

ROS + MoveIt + Gazebo (Wiki)


3. 레퍼런스
자세한 내용은 다음 링크를 참고한다.


2015년 11월 1일 일요일

2015 miniDRC 참가기



국내 로봇 동호인 커뮤니티 오로카의 이름으로 미니 재난구조로봇 챌린지에 참가하게 됨. 본인이 관심있는 건설자동화와 역설계에 매우 관련성이 높은 비전 인식 기반 자율 주행 로봇을 개발하기로 함. 자율 주행에 대한 전략은 이 링크를 참고.


로봇을 팀원들과 함께 개발하면서, 이제까지 경험하지 못한 헬 개발, 주말반납과 밤샘을 하게됨. 게다가 예기치 않은 회사출장까지. 다들 직장인, 취준생이라, 개발할 시간은 퇴근 후, 주말, 새벽밖에 없었다. 가족과 애인의 절대적 이해와 희생이 필요한 일이다. 


팀원들은 40~50일 전부터 개발장비가 그나마 잘 갖춰져 있는 무한상상실에서 주말 집중 작업 (작업사진). 






챌린지 몇 주 전부터 행사 당일까지는 새벽까지 테스트와 튜닝의 연속.. 그리고 출전하였으나.. 결과는 모터 과부하와 통신 문제로 인해, 개발했던 기술들을 시연만 해야 했다.T.T

다른 팀 역시, 통신, 모터 과부하, 헬 장애물, 기구적 문제로 인해 포기하거나, 고생한 팀들이 많았다. 특히, 사다리 장애물은 헬 그 자체였는데, 참가 10팀중 통과한 팀은 거의 없었다. 

통신 간섭 및 노이즈 문제도 헬 상황이라, 안보이는 상황에서 장애물을 통과해야하는 경우도 많았다. 



이런 악조건 상황에서, 한땀한땀 만든 로봇들이 인명구조 미션을 수행하기 위해, 노력하다 다운되었다. 장애물을 통과하려 하다, 모터 과부하로 다운되거나, 걸려 못움직이거나, 통신문제로 제어가 안되는 등.. 안타까운 시간이 흘러갔다. 이런 상황을 이겨내려고 팀원들이 노력하는 모습, 많은 사람들이 로봇을 응원하는 모습이 참 감동적이다. 사람과 로봇과 교감하는 느낌.



포기하지 않고 끝까지 참가함으로 기구/캐터필러 제작, 로봇운영기술과 ROS, DX모터 제어, 통신 기술 뿐만 아니라, 그 과정에서 수많은 시행착오 속에 얻은 경험은 참으로 소중한 것이다.



이번 대회를 글 몇자로 요약한다면...

'사다리 올라가기가 이렇게 어려울 줄이야'
'경기장 헬 통신.. 어쩌란 말인지T.T'
'그래도, 쪽팔려도, 포기하지 않고 끝까지 참가하길 잘했다'

추신 - 재난구조로봇 챌린지에서 발생한 몇 가지 헬 상황과 대처 방법을 확인해 보았다.

1. 기구부 문제 - 기구부는 철저하게, 대회 규정과 장애물에 완벽하게 맞게 설계되어야 한다. 배선 공간을 고려하고, 보드, 배터리 탈착 가능하도록 디자인하는 것이 좋다. 간단하게 가 디자인한 모델을 기구부 제작 경험이 많은 분들에게 자문을 받는 것이 좋다.

2. 통신 문제 - 통신 문제에 대한 명확한 대처 방법은 없지만, 최소한, RF, ROS제어 및 카메라 제어는 가능하게 할 수 있다. 이 링크를 참고한다. 증폭기를 달면 좋다. 미리 경기장의 와이파이 상황을 확인할 필요가 있다. 

3. 모터 문제 - DX와 같은 모터는 내부적으로 모터의 최대 토크 등 리미트가 넘어가면, 데이지 체인으로 연결된 모터들이 모두 다운된다. 그러므로, 이를 체크해 로봇을 제어할 기법이 필요하다. 

무엇보다, 통합 테스트는 대회 한달전에는 끝내는 것이 좋다. 현장 테스트는 가능한 빠르면 빠를 수록 좋다. 이후에도 매우 다양한 문제들이 발생하기 때문이다. 그렇지 못하면, 밤샘 무한 반복과 헬 게이트를 경험하게 된다. 팀의 전문성도 중요하지만, 프로젝트 및 시간 관리가 제일 중요하다. 



그리고, 무엇보다 제일 중요한 것이 팀플임을 절실이 느낀다.

2015년 10월 24일 토요일

ROS기반 OpenCV 개발

1. 설치
ROS기반 OpenCV를 개발하기 위해서는 다음과 같은 패키지를 설치해야 한다.

$ sudo apt-get install ros-indigo-cv-bridge
$ sudo apt-get install ros-indigo-vision-opencvsudo apt-get install python-opencv
$ sudo apt-get install libopencv-dev


2. 예제 실행
이제 다음과 같은 예제를 실행해 본다. 

1. Count and segment overlapping objects with Watershed and Distance Transform
2. Color Detection & Object Tracking
3. USING OPENCV FOR SIMPLE OBJECT DETECTION
4. Image Segmentation with Watershed Algorithm


3. 레퍼런스
1. cv_bridge::CvImage  wiki
2. cv_bridge
3. HSV color schema



2015년 10월 18일 일요일

RPi camera ros node 개발

RPi 라즈비안에 ROS인디고 환경에서, RPi cam을 설치하는 방법을 정리해 본다.
우선 앞에 언급한 환경은 설치되어 있다고 가정한다.

이제 RPi cam의 ROS node를 설치하기 위해, 다음 링크에서 소스를 다운받아 빌드한다.

Groovy ROS node for camera module of Raspberry Pi
혹은
ROS driver for RaspberryPi camera module

이제 rosrun으로 테스트 해 본다. 다음은 테스트 한 영상이다.


이 글은 Raspberry Pi robot with vision and speech on ROS 를 참고한 것이다. 상세한 내용은 이 글을 참고 한다.

2015년 10월 1일 목요일

RPi 기반 IMU 센서 제어

이 글에서는 라즈베리파이(RPi. Rasberry Pi)를 이용한 IMU 센서 제어를 다룬다.
아두이노 환경에서는 아두이노 IDE를 통해, 다양한 센서를 손쉽게 다룰 수 있는 라이브러리들이 많으나, 라즈베리파이에서는 이런 편의성이 부족하여, 센서 관련 제어가 난해한 면이 있다. 이글에서는 IMU를 제어하는 RTIMULib를 사용한다. 아울러, 만보게, 나침반 및 AHRS 만들기 내용을 참고하였다. 

RPi와 ROS의 연동을 위해서는 다음 설명을 참고한다.
1. RPi 테스트
RPi를 테스트하기 위해, 간단한 LED Blink 예제를 실행해 본다.
RPi-1의 GPio 핀아웃(Pinout)은 다음과 같다.


RPi-2의 GPio 핀아웃은 다음과 같다


2. 회로 연결, I2C 주소 확인 및 소스 수정
회로를 다음과 같이 연결한다 .

RTIMULib는 I2C 프로토콜을 사용한다. 그러므로, 아래와 같이 I2C에 연결된 장치를 확인할 수 있는 소프트웨어를 설치하고, I2C 모듈을 부팅시 실행해 주도록 설정해야 한다.
$ sudo apt-get install i2c-tools

다음과 같이 파일을 편집한다.
$ sudo nano /boot/config.txt
...
dtparam=i2c_arm=on

I2C 모듈을 활성화한다.
$ sudo raspi-config

부팅시 I2C 모듈을 추가한다.
$ sudo /etc/modules

재부팅하고, 다음 명령을 통해 I2C 모듈이 실행된 것을 확인한다.
$ lsmod

연결된 I2C장치를 확인한다.
$ sudo i2cdetect -y 1

그럼 다음과 같이, 연결된 장치의 주소를 확인할 수 있다.

여기서 19와 1e는 LSM303DLHC(가속도, 지자기), 6b는 L3GD20H(자이로), 77은 BMP180(Temp / Baro)이다.

이렇게 나오면, 제대로 센서들이 연결된 것이고, I2C 방식으로 데이터를 획득할 수 있다.

3. 빌드
RTIMULib 의존 패키지를 먼저 설치한다.
$ sudo apt-get install cmake libqt4-dev

RTIMULib 소스를 다운로드한다.
$ git clone https://github.com/richards-tech/RTIMULib

RTIMULib를 빌드하고, 설치한다.
$ cd ~/RTIMULib/Linux
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install

RTIMULib 파이썬 모듈을 설치한다.
$ cd ~/RTIMULib/Linux/python
$ sudo python setup.py install

4. 실행
RTIMULib 데모 프로그램을 실행해 본다.
$ cd ~/RTIMULib/Linux/build/RTIMULibDemo
$ sudo ./RTIMUDemo

센서 값 확인 윈도우 화면이 나오는 데, Select IMU 버튼을 선택해, 다음 종류 센서를 선택한다. 그리고, I2C bus 0을 선택한 후, 앞에서 확인한 센서 주소인 6b로 설정한다. 그리고, 확인한다.

L3GD20H(자이로), LSM303DLHC(가속도, 지자기)


그럼, 다음과 같이 정상적으로 센서값이 출력되는 것을 확인할 수 있다.


이제 OpenGL 데모를 실행해 본다.
$ cd ~/RTIMULib/Linux/build/RTIMULibDemoGL
$ sudo ./RTIMUDemoGL

다음과 같이 잘 실행된다.


각 값의 의미는 다음과 같다.

이제 칼만필터로 센서값을 보정해 본다. 이를 위해, 다음 패키지를 설치한다.
$ sudo apt-get install python-opengl
$ sudo apt-get install python-pygame

그리고, 다음 링크의 AHRS 프로그램을 작성하고, 실행해 본다.
$ sudo python ahrs.py


이를 ROS node로 구현해 보았다. 다음과 같이 IMU 센서값이 잘 처리된다.


구현 환경은 라즈베리파이2의 Raspbian, ROS indigo 환경이다.

5. 결론
빌드에 큰 문제가 없고, 잘 실행된다. 다만, ROS node 개발 시 catkin 환경이 갑자기 안되는 바람에, 다시 catkin 환경 초기화하는 문제가 발생했었고, 라즈비안의 환경이 워낙 열악하다 보니, std_msgs로만 메시지 토픽을 발생했다. 다른 이야기지만, 더불어, 라즈비안에서는 PCL 등 고급 센서를 쓰기 어려웠다는 문제가 있었다. 물론, 몇몇 사례에서, PCL을 사용한 사례가 있었지만, 이 경우에는 ROS 패키지 모듈간의 의존성이 잘 맞아 떨어진 때 였던 것으로 보인다. 지금 라즈베리파이2의 ubuntu 14.04에 ROS Indigo desktop 버전은 PCL 설치가 잘 되지 않았다.


6. 레퍼런스
이 글의 관련 레퍼런스는 다음과 같다.


밸런싱 로봇 만들기

밸런싱 로봇 만드는 방법이 매우 잘 나와 있는 글을 링크한다.



2015년 9월 28일 월요일

Gazebo 설치 방법

가제보는 로봇 시뮬레이션 프로그램으로, 다르파 공식 지정 도구이다.

설치를 위해서는, 다음과 같이 명령을 입력해야 한다 (우분투 14.04 기준).

$ sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu trusty main" > /etc/apt/sources.list.d/gazebo-latest.list'
$ wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install libsdformat1 libsdformat-dev gazebo2
 
$ sudo apt-get install ros-indigo-gazebo-ros ros-indigo-gazebo-plugins ros-indigo-kobuki-desktop
$ roslaunch kobuki_gazebo kobuki_empty_world.launch 
 
URI 에러가 있어, 월드가 로딩되지 않는다면, 다음 환경변수를 roscore가 실행되는 URI와 포트로 설정하고, 다시 실행해 본다. 
GAZEBO_MASTER_URI=http://localhost:11311

그외 에러가 있어, 모델이 제대로 로딩되지 않는다면, 이 링크를 참고한다.

테스트를 위해, 아래 명령을 입력한다.
$ roslaunch kobuki_keyop keyop.launch

이제 다음과 같이 키보드에 따라 시뮬레이션을 할 수 있다.




자신만의 환경 모델을 만들려면, 다음 파일을 참고해, 모델을 추가해 준다.
/opt/ros/indigo/share/kobuki_gazebo/worlds/playground.world

프로그래밍된 시뮬레이션 예제는 다음과 같다.
$ roslaunch kobuki_gazebo kobuki_playground.launch


다음과 같이 랜덤으로 이동하면서, 벽에 부딪쳤을 때 회피하는 예제를 실행해 본다. 
$ roslaunch kobuki_gazebo safe_random_walker_app.launch
 



기타, 가상 로봇으로 다양한 시뮬레이션을 위해서는 다음 위키를 참고한다.
http://wiki.ros.org/turtlebot_stdr
http://wiki.ros.org/turtlebot_gazebo
http://wiki.ros.org/turtlebot_stage
 
 

2015년 9월 26일 토요일

오드로이드(ODROID) XU4 기반 ROS 설치

이 글은 ODROID XU4 기반 ROS 설치 방법을 간단히 기술한 것이다.

1. 소개
오드로이드 XU4는 8개 코어를 가진, 에너지 저효율, 초소형 컴퓨터 보드이다. 가격도 8~9만원 밖에 안한다. 명함크기로, 오픈소스 운영체제를 지원한다. 자세한 내용은 다음 링크를 참고한다.



2. 설치
정식 설치 방법은 다음과 같다 (이 방법 보다는 이미지 설치를 권장한다).

1. 우분투 15.04 설치
2016.3 현재 우분투 15.04 버전 이미지가 릴리즈되었다. 이 버전에는 Ubuntu 15.04 with MATE Desktop, OpenCV 2.4.12.1, ROS Jade(Bare Bones), OpenNI 2.2, Libfreenect, Libfreenect2, Point Cloud Library 1.7.2, Arduino IDE 가 포함되어 있다.

이미지를 다운로드 받은 후, xz압축을 푼다. 그리고, Win32 Disk Imager를 이용해, img파일을 micro SD카드에 굽는다. 그리고, SD카드를 오드로이드에 넣고, 전원을 넣는다.



그럼, 다음과 같은 화면을 볼 수 있다(모니터가 딴곳에 가 있어, 프로젝터를 사용했다). 만약, 완전히 부팅되지 않고 중간에 계속 재부팅하는 문제가 있으면 전원이 아래 스펙인지 체크해 본다.
코어가 8개라, 8개의 썸네일이 출력된다.


디폴트 사용자 및 루트 계정 로그인 아이디와 암호는 다음과 같다.

Username: odroid
Password: odroid

Username: root
Password: odroid

제대로 설치되었는 지 테스트해 보기 위해, roscore도 실행해 보고, ~/opencv-2.4.12.1/samples/python 폴더의 몇몇 예제를 실행해 본다. 몇몇 예제들은 웹캠(webcam)이 있어야 한다.

제대로 설치되었다면, 다음과 같이 정상적으로 실행된다.

그림. roscore와 opencv의 delaunay 예제 실행 모습

그림. opencv의 에지 검출 등 몇몇 예제 실행 모습

opencv의 python, python2 폴더에는 스테레오 영상에서 3차원 포인트 클라우드 추출 등 흥미로운 예제들이 많이 있으니 확인해 보길 바란다.

2. 우분투 14.04 설치
우분투 14.04 이미지 설치 방법은 이 링크를 참고한다.

1. 우분투 14.04를 설치한다.
2. ROS를 설치한다.
3. 테스트한다.

앞의 방법과 같이 SD카드로 부팅하면, 다음과 같은 화면을 볼 수 있다. roscore가 정상 실행됨을 확인할 수 있다.



3. 결론
저렴한 비용으로, 옥타콥터 초소형 컴퓨터를 사용하다니.... 이건 너무 좋은거다. 정말 다양한 것을 많이 할 수 있다. 아래 영상을 참고해 보라.