ARM - 립 모션과 증강현실을 이용한 로봇 팔 제어

MIE capstone
이동: 둘러보기, 검색

프로젝트 소개

프로젝트 명

Leap Motion Sensor와 증강 현실을 이용한 로봇 팔 제어

프로젝트 기간

2018.03.02 ~ 2018.06.15 (15주)

팀 소개

서울시립대학교 기계정보공학과 20124300** 오*식 (팀장)

서울시립대학교 기계정보공학과 20124300** 최*연

서울시립대학교 기계정보공학과 20134300** 조*재


프로젝트 개요

요약

Head-Mount 디스플레이와 Leap-Motion 센서를 이용하여 원격으로 로봇 팔을 제어할 수 있는 시스템을 제작한다. Leap-Motion 센서가 사용자의 팔의 움직임을 인식하여, 이 데이터를 기반으로 로봇 팔을 제어한다. 실감나는 증강현실을 구현하기 위하여 로봇 팔과 스테레오 카메라를 함께 설치하고 카메라에서 송출된 데이터를 Head-Mount 디스플레이로 출력시킨다. 동시에 Head-Mount 장비의 디스플레이로 사용되는 단말기에서 측정된 사용자의 위상 데이터(머리의 움직임)를 이용하여 카메라에 부착된 모터를 제어, 카메라와 시선을 일치시킨다.


개발 배경

현시대의 기술력으로 제작된 로봇은 사회의 여러 분야에서 사람의 일을 대신해 수행한다. 현존하는 대부분의 로봇은 인식한 상황에 대해 미리 입력한 데이터나 알고리즘을 기반으로 작동하는 것이 기본이며 이러한 방식은 공장 생산 라인 등의 제어된 환경 하에서 매우 유용하게 사용된다. 이와는 반대로 현재의 기술로 극복하기 힘든 인간의 직관이 요구되는 상황이 존재한다. 단적인 예로 폭발물 처리(EOD) 작업자를 들 수 있는데, 급조 폭발물을 해체하는 상황에서 매우 다양한 경우가 존재하므로 이 환경은 제어할 수 없다고 할 수 있다. 따라서 기존의 입력된 데이터를 바탕으로 구동하는 로봇은 사용될 수 없으며 대부분의 경우 원격 로봇을 사용하여 폭파하거나 직접 방호복을 입고 해체를 실시한다. 이 상황에서는 알려지지 않은 폭발물에 대해 대처해야 하므로 원격 로봇을 이용한다 하더라도 직접 해체를 수행하는 경우보다 효율이 떨어진다.

ARM.png EOD.png Wireless.png

이러한 위험한 상황에서 사용자에게 직관적인 상황 인식을 가능하게 하는 정보를 전달하고 사용자의 움직임을 모방할 수 있는 로봇이 존재한다면 리스크를 큰 폭으로 낮출 수 있을 것이다. 이러한 종류의 로봇은 이미 다양한 방법과 기술을 통하여 연구되고 있지만, 비용 등의 문제로 인하여 실용화가 된 사례가 별로 없다. 하지만 4차 산업혁명이 활성화된다면 네트워크를 이용한 원격 제어시스템은 더욱 큰 가치를 가지게 될 것이다. 따라서 이러한 배경을 토대로 해당 프로젝트를 제안하게 되었으며, 이를 통해 로봇제어에 대해 이해하고 이를 응용한 시스템을 만들 수 있는 기회를 얻을 것으로 예상된다.

프로젝트 목적 및 기대효과

이 시스템은 네트워크가 연결된 어떠한 장소에서도 사람을 대신하여 움직임을 모방하며 작업을 수 행할 수 있다. 위험한 작업 환경에서 인간의 안전을 보장할 수 있는 효과가 있을 뿐 아니라 다른 공간 에서도 업무를 수행할 수 있으므로 응용범위를 확장 시킬 수 있으며, 추후 기술을 발전시켜 다양한 인터페이스를 이용한 제어나 자동화 기능을 추가한다면 더 많은 분야에서의 적용 또한 기대할 수 있을 것이다.


개발 목표

제어환경 구축

모션을 입력할 수 있는 센서와 실제 작업 환경을 확인할 수 있는 디스플레이 및 데이터 통신을 담당할 컨트롤러로 구성된 제어환경을 구축한다. 모션 센서는 손가락의 각 관절을 좌표로 전환한 뒤 실제로 제어할 로봇 관절에 맞는 형태로 가공하여 서버로 전송하며, 디스플레이는 서버에서 이미지를 받아 출력한다.

실제 작업환경 구축

작업환경은 실제로 로봇이 작업을 수행하는 환경으로 로봇 팔과 상황을 전송해줄 카메라, 데이터 통신 및 관절 제어를 담당할 컨트롤러로 구성한다. 카메라는 서버에 이미지를 전송하며 프로세서는 서버에 존재하는 관절 데이터를 받아 제어식을 통해 모터를 제어한다.

서버 구축

제어환경과 작업환경 간의 데이터 통신을 위해 서버를 구축한다. 서버는 특별한 부가 기능은 필요로 하지 않으며 단순히 데이터 전송의 중간단계로 이용한다. 서버는 플랫폼 간 통신에 용이한 오픈소스 시스템인 ROS(Robot Operation System)를 사용한다. 또한 ROS는 시뮬레이션을 지원하므로 이를 이용해 디버그를 수행할 수 있다.


세부 개발 내용

Smart Phone Application

Android studio.png

스마트폰은 Stereo Image를 출력할 수 있는 좋은 수단이며 Card Board와 같은 도구를 이용하여 이를 쉽게 VR 환경으로 전환할 수 있다. 또한 내부에 Gyro 센서, 가속도 센서, 자기력 센서 등의 다양한 센서들을 내장하고 있기 때문에 사용자의 상태를 입력받을 수 있다. 안드로이드 스튜디오를 이용하여 네트워크와 통신하여 사용자에게 Vision을 제공하고 상태를 입력 받는 Application을 제작한다.


Motion Sensor

Leap.jpg

로봇을 제어할 입력 수단으로 모션 센서를 사용한다. 몇 가지 후보 중 Leap-Motion을 채택하였는데, 손의 형상을 입력받는데 특화되어 있으며 전용 API를 지원하여 제어하기에 편리하다는 장점이 있다.


6-자유도 로봇 팔

Arm.jpg

6개의 따로 회전 가능한 Servo Motor를 이용하여 구동하는 로봇 팔이다. 각 서보는 한 개의 관절을 담당하게 된다. 이 로봇 팔을 이용하여 사용자의 입력을 모방하여 동작하는 로봇을 구성한다.


차량 베이스

Car.jpg

다른 모듈을 장착할 수 있는 Base 장치로 로봇 팔과 카메라에 이동성을 제공한다. 4개의 모터를 이용한 AWD 구동이 가능하며 내부에 배터리 등을 수납할 수 있는 공간이 존재하여 공간 활용성 또한 높다.

Base Controller

Cont.jpg

베이스를 컨트롤 하기 위한 컨트롤러이다. 키보드보다 조종성이 더 직관적인 조이스틱형 컨트롤러를 선택하였다.

VR

Vr lr.png

VR은 가상 현실 플랫폼을 나타내며 최근 매우 각광받는 분야이다. Application을 제작하여 두 개의 카메라에서 입력받은 좌우 이미지를 출력한다. Webcamera 2대와 Head-Mount 및 스마트폰을 이용하여 작업 환경의 이미지를 사용자에게 출력한다.


네트워크 구축

Ros.png

제어 플랫폼으로 ROS(Robot Operating System)를 채택하였다. ROS는 현재 널리 사용되는 검증된 플랫폼으로 장치를 객체의 형태로 구현하여 네트워크에 연결해 사용할 수 있도록 해준다. 매우 안정적이며 Debug에 이용할 수 있는 다양한 도구, Android와의 연동 API를 지원한다.


알고리즘 설계

입력부 설계
입력 장치는 총 5개로 스마트 폰 센서, 컨트롤러, 모션 인식 센서, 두 대의 카메라이다. 센서에서 측정된 각도 값은 상하 각도는 그대로 입력하며 좌우 각도의 경우 초기 상태를 따로 Publishing하여 고개를 돌린 크기를 감지할 수 있도록 한다. 모든 센서들의 입력 값은 ROS Core로 Publishing되어야 한다.


출력부 설계
출력 장치는 총 3개로 두 종류의 드라이버와 스마트 폰이다. 스마트 폰은 자체적으로 두 카메라에서 Publishing한 이미지 메시지를 Subscribing 하여 그대로 출력하며, 드라이버의 경우 각각 연결된 라즈베리 파이가 필요한 메시지를 Publishing 하여 이를 제어 명령으로 변환한 뒤 드라이버에 출력한다.


처리부 설계
Leap Motion에서 입력받은 좌표를 이용하여 End Effector의 위치를 산출하며, 이를 이용해 손을 움켜쥔 모션을 구별하여 Grabber를 제어할 수 있도록 해야 한다.
추가적으로 Leap-Motion 데이터를 처리하여 잘못된 좌표가 입력된 경우를 해결하는 알고리즘을 개발한다. 또한 제스처를 적용하기 위해 Deep Learning을 적용할 수 있는 구조로 제작한다.

프로젝트 설계

개발 일정

개발계획.PNG


시나리오

시나리오.png


목적계통도

목표.png
  • 정확성
이용자에게 전달된 시각적인 정보를 바탕으로 이용자가 모션을 통해 다음 동작을 지시하는 피드백 형태로 작동하기 때문에 (1)이용자의 동작을 정확하게 판단할 수 있어야 하며, (2)기계는 지시에 따라 정확히 제어될 수 있어야 한다.
  • 실시간성
증강현실을 이용해 로봇 팔을 제어하는 경우, 단순히 사용자가 내린 명령을 일회적으로 수행하는 형태보다는 시각적 피드백을 통해 실시간으로 로봇을 제어하는데 그 초점이 맞춰져 있다. 따라서 사용자의 동작을 인식한 순간부터 동작이 일어나 피드백이 돌아오기까지 실시간성이 보장되어야 한다. 이를 위해 (1)알고리즘이 최적화 되어 동작을 빠르게 처리하여 명령으로 변환해야 하며, (2)명령은 이더넷(Ethernet) 혹은 Wi-Fi 등의 네트워크를 통해 빠른 속도로 로봇에 전달되어야 한다. 또한 (3)전달된 명령을 따라 모터제어를 하여 로봇 팔이 정확한 지점으로 신속히 움직일 수 있어야 하며, 마지막으로 (4)영상 정보를 실시간으로 전송하여 사용자에게 보여주어야 한다.
  • 편의성
사용자가 원격에서 로봇 팔을 이용하여 제어해야 하는 데에 있어 직관적인 판단을 이용하여 자연스럽게 제어할 수 있어야 한다. 따라서 사용자는 불편함을 느끼지 않고 로봇을 제어할 수 있도록 하는데 중점을 맞추어야 하며 이를 위해 실제 사용자의 모션에서 제어할 좌표를 구하기 위한 적절한 알고리즘을 사용해야 하며, 피드백 영상 또한 자연스러운 크기와 시야각을 사용하여 가상현실 장비 사용 시 어지러움을 느끼는 VR Sickness 등의 증상을 방지할 수 있어야 한다. 플랫폼이 원격으로 제어되기 때문에 독립성 또한 중요한 요소이다. 제어 환경을 독립적인 모듈로 제작한다면 처리환경과 제어환경을 별도의 환경으로 독립시킬 수 있다. 따라서 로봇 팔은 어떠한 환경에 대해서도 독립적인 동작을 보장받을 수 있게 되어 다양한 용도로 사용될 수 있으며, 제어환경 또한 모션 변환 알고리즘의 형태만 바꾸어 다른 장치를 동작시킬 수 있게 된다.
  • 경제성
로봇 팔을 구성하는 핵심 부품이라 할 수 있는 서보 모터(Servo Motor)의 경우 다양한 스펙과 가격대가 형성되어 있다. 용도에 맞는 적절한 부품을 사용한다면 상당히 저렴한 가격으로 플랫폼을 제작할 수 있을 것이다. 또한 이때 조립식 플랫폼을 사용하므로 현재 판매되는 완성된 로봇 플랫폼의 가격과 비교해 보았을 때 매우 저렴하게 제작할 수 있다. 또한 원격으로 작동하는 로봇 플랫폼이기 때문에 자원 관리가 매우 중요하다. 배터리를 이용해 작동시키므로 컨트롤러의 성능을 품질이 보장하는 범위 하에서 낮추어 사용할 수 있다면 이러한 자원을 절약하여 오랜 시간 동작하도록 할 수 있을 것이다.

개념 설계안

계통도.png

전체적인 시스템은 부분적인 모듈을 네트워크를 통해 연결한 형태를 가지며, 각 모듈은 한 개의 프로세서와 입력센서 혹은 출력을 위한 모터로 구성된다.


모션 센서 부분

Leap Motion 센서
  • 사용자의 동작을 입력 받아 이를 관절의 형태로 변환한다.


PC
  • 입력 받은 관절의 형태를 이용하여 목적 좌표와 End Effector의 각도 및 Grabber의 각도로 변환한 뒤, 이를 네트크로 전송한다.
  • ROS Core를 구동하는 역할을 맡는다.


Application 부분

Smart Phone
  • 사용자에게 Stereo 이미지를 출력하며, 사용자의 시선의 방향을 인식하여 네트워크로 전송한다.


Actuator (Arm)

Raspberry Pi
  • 전송된 좌표와 End Effector의 각도 및 Grabber의 각도를 Inverse Kinematics를 이용하여 Servo Motor의 각도로 환한다.
  • 변환된 각도를 PWM Module로 전송한다.


PWM Module & Robotic Arm
  • 전송된 각도를 이용하여 Servo Motor를 구동한다.


Actuator (Base)

Raspberry Pi (Arm)
  • 전송된 입력을 이용하여 Base를 구성하는 네 개의 바퀴의 속도로 변환한다.
  • 입력은 PC에 부착된 입력장치가 수행하며 이는 Controller, Key Board 등 어떠한 형태의 입력장치라도 될 수 있.
  • 변환된 속도를 Motor Driver로 전송한다.


Motor Driver & Base
  • 전송된 각도를 이용하여 모터를 구동, 차체를 이동시킨다.


설계사양

필요 요구사항 (D)

요구사항1.png


희망사항 (W)

요구사항2.png

프로젝트 개발 과정

업무 분담

업무분담.png


주 업무

  • 오**:일정 조율, 네트워크 통합, 제어 식 및 소프트웨어
  • 조**:물품 선정 및 주문 담당, 하드웨어 조립
  • 최**:Application 제작, 발표자료 편집, 테스트 자료 수집

하드웨어 개발 과정

Armtest.jpg

1차적으로 하드웨어에서 제일 핵심인 부분인 팔을 개발하였다. 이 때 각 팔의 관절에는 서보모터가 장착되었으며 서보모터의 구동 전원이 부족함을 확인하여 아래의 개선사항에서 서술되었듯이 추가적인 전원 모듈을 개발하였다. 이 때 기본적인 테스트를 위하여 아크릴판 위에서 고정하여 테스트를 진행하였다.


Makearm2.jpg

팔의 테스트가 어느정도 진행 된 후 카메라 장치의 개발을 하였다. 카메라 장치는 VR의 헤드트래킹 기능에서 출력된 값을 이용하여 고개가 회전된 값만큼 2축 장치가 회전을 할 수 있도록 제작하였다.


Bat.jpg

팔과 카메라의 테스트와는 별개로 카메라와 로봇 팔을 거치하기 위한 차량 베이스의 개발도 진행하였다. 기본적으로 차체 내부에 라즈베리파이와 PWM 모듈의 전원을 공급하기위한 외장 배터리를 내장하였다.


Wiringbase.jpg

그 후 각 모터와 motor-driver을 연결하기 위하여 각 배선을 따로 납땜을 하여 배선을 연장하는 작업을 하였고 라즈베리 파이를 차량 위에 탑재하면서 예상된 공간 설계와 적절한지 파악하였다.


Basetest.jpg

예상된 공간보다 차체의 크기가 작아 아래의 개선사항에서 서술되었듯이 차체 뒷부분을 연장하였고 라즈베리파이 2대를 거치하였으며 motor-driver과 motor을 연결하여 모터의 구동 테스트를 실시하였다.


Almost.jpg

카메라 모듈과 로봇 팔의 테스트가 어느정도 진행된 후 최종적으로 모든 하드웨어를 통합하여 각 값[1]을 조정한 후 최종적으로 모든 부품을 분해 후 록타이트 등의 약품을 사용하여 나사를 단단하게 조여 하드웨어가 분리되지 않도록 하였다.

소프트웨어 개발 과정

6-DOF 로봇 팔

모델 선정
로봇팔모델.png
사용된 로봇 팔은 총 6개의 Servo Motor를 사용하므로 6개의 수정 가능한 각도를 갖는다. 이는 6 자유도를 나타내게 되며, 이중 2개의 자유도는 Wrist와 Grabber의 각도로 사용되기 때문에 End Effector의 좌표를 나타내기 위한 자유도는 총 4개로 제한된다. 따라서 위의 그림과 같이 4개의 Link를 가진 구조로 모델링하여 이에 따른 Inverse Kinematics를 실행, 좌표와 모터의 각도 사이의 관계식을 구한다.


Inverse Kinematics
Arm decoupling.PNG
역기구학 방법을 통해 필요한 관계식을 구한다. 다시 Decoupling을 수행한 뒤 3자유도 모델로 변환하여 Geometric Solution을 찾는다. 아래는 해를 찾기 위한 도식화 표현과 시뮬레이션 결과이다.


General Solution
Arm generalsol.PNG


Smart Phone 센서

스마트폰의 위상변화 값을 측정한 뒤 네트워크를 통해 Roll, Yaw, Pitch 형태로 전송한다. Yaw 값은 좌우를 돌아보는 동작을, Pitch 값은 고개를 숙이는 동작을 나타낸다. 이 두값은 Servo 모터를 통해 그대로 출력되며 Roll 값을 이용하는 부분은 구현되지 않았다.

스마트폰과통신과정.png

Gyro 센서 및 자기력 센서를 이용하여 사용자의 시선 방향을 Roll, Pitch, Yaw의 형태로 계산한다. 이 방향은 Gyro 센서만을 이용하여 사용자의 회전을 적분하여 누적시킨 값과 같으나, 센서에 Offset이 존재하는 경우 이 값이 시간에 따라 누적되어 오차가 점점 커지게 된다. 따라서 아래의 그림과 같이 Complementary Filter를 이용하여 이를 극복한다.


필터.png


위의 처리 과정은 Complementary Filter의 처리 알고리즘을 나타낸 것으로, Low-Pass Filter를 이용하여 자기력 센서의 노이즈를 제거한 뒤, Gyroscope의 누적 값을 보정하기 위한 기준으로 사용한다. 이 방법은 자기력 센서가 시간에 대한 오차의 영향을 받지 않는다는 점에서 짧은 시간 동안은 상당히 정확하나 장기간 누적되면 정확성이 떨어지는 Gyro 센서가 일정 비율로 더해져 보완하는 방법이다.


원거리 작업환경 VR영상

Head-Mount 기기의 디스플레이로 사용되는 스마트폰을 이용하여 작업환경에 있는 차체에 부착된 Webcamera 2대에서 받아온 이미지를 사용자에게 Stereo Image로 출력한다.

Vr.jpgWebcamera.png VR.png

Raspberry Pi의 연산능력이 상당히 부족하였기 때문에 Webcamera가 촬영한 이미지를 그대로 출력할 수 없었다. 따라서 이러한 부분을 해결하기 위해 Webcamera Driver가 제공하는 API를 이용하여 해상도를 (160*120)으로 조절하였다.


ROS를 이용한 Node 간 통신 구축

Robot Operating System (ROS)은 로봇의 각 부품들을 Node의 형태로 변환한 뒤 네트워크를 통해 연결하는 방법을 사용한다. 이때 정보를 배포하는 객체를 Publisher, 정보를 찾아 입력 받는 객체를 Subscriber라고 하며, 모든 통신은 한 개의 ROS Core가 존재하여 이를 중계하는 방식으로 진행된다. 통신은 ROS Core가 실행되고 있는 ROS Master와 다른 장치 간의 TCP/IP 통신 방식으로 진행되며, 송수신되는 모든 정보들은 Topic이라고 불린다. 따라서 모든 장비는 ROS Master의 IP와 ROS Core의 Port 번호를 알고 있어야 한다. 각 모듈이 배포하는 데이터는 다음과 같다.

  • Smart Phone: 사용자의 시선 방향
  • PC: 차량 구동 명령, 처리된 End Effector의 좌표
  • Raspberry Pi (Arm): Stereo Camera Image
  • Raspberry Pi (Body): Stereo Camera Image

반대로 각 모듈이 요구하는 데이터는 다음과 같다.

  • Smart Phone: 두 개의 Stereo Image
  • PC: 없음
  • Raspberry Pi (Arm): End Effector의 좌표
  • Raspberry Pi (Body): 차량 구동 명령

각 Node들의 구성과 플랫폼 별 위치는 다음과 같이 구성된다.

프로그램 흐름.png

이때 Rviz 등의 ROS-tool을 이용하여 좌표, 모션 등의 확인이 가능하다.

Rviz.png

Topic의 흐름 관계는 다음과 같이 나타난다.

Rqt GRAPH.PNG

변경 사항

하드웨어 개선사항

  • 차랑 베이스
Car.jpg

기존에 차용한 차량 베이스의 경우 위의 제품을 사용하려 하였으나 위의 pwm모듈의 추가 전원 같은 요소가 발생하여 차량 베이스를 추가적으로 크기를 늘려야 할 필요가 발생하여 차량 베이스를 늘리고 라즈베리 파이와 모터 드라이버, 카메라 마운트를 미리 세팅하였다. 변경 사항은 아래와 같다.

Tunecar.jpg Tunecar2.jpg

위의 사진과 같이 과학상자 재료를 이용하여 뒷부분을 연장 후 아래 부분에는 모터와 배터리를 탑재하고 위 부분에는 AA 배터리 홀더와 라즈베리파이를 거치하였다. 추후 앞부분에는 로봇 팔이 거치될 예정이며 뒤의 솟은 부분에는 카메라가 거치될 예정이다


  • 추가 전원 회로

기존 PWM 모듈에 인가되는 5V, 2.5A의 전원만을 이용하여 구동하려 했으나 전력이 충분하지 않아 3개 이상의 모터를 구동시키기 어려운 점을 확인하였다.

Pwmp.png

제조사의 설명에 따르면 5V, 4A 이상을 권장한다. 이때 각 서보모터는 약 7V의 전압이 인가되었을 때 더 빠르고 정확한 동작을 한다는 점에 기안하여 1.2V 리튬 이온 배터리 6개를 직렬 연결하여 7.2V의 출력을 내는 추가 전원장치를 사용하기로 결정하였다. 이 때 보드의 PCB 기판을 확인하면 윗부분이 시그널부, 중간 부분이 전원 공급부, 아래 부분이 그라운드임을 확인할 수 있다. 이때 보드에 5V의 전원 공급이 이뤄져야 보드가 작동하는데 해당 전원은 보드를 구동할 때만 사용하고 서보모터에는 시그널과 그라운드만 제공하도록 한다. 이때 그라운드는 추가 전원의 그라운드와도 묶여있다.

Line.png

외부전원을 사용하기 위하여 추가적인 보드를 설계하였다. 왼쪽 두 단자의 줄은 각각 PWM 보드의 그라운드와 시그널, 오른쪽 세 단자의 줄은 서보모터의 시그널, 그라운드, VCC를 꽂는 단자이며 아래의 단자는 배터리의 +와 –를 연결하며 오른쪽에는 스위치를 장착하였다. 이때 배터리 단자가 두 줄인 이유는 추가적인 암페어를 확보해야 할 때 배터리를 추가적으로 연결할 수 있도록 하였다. 제작 후 아래와 같이 연결한 결과 기존 대비 빠르고 정확하게 동작하는 것을 확인하였다.

Linpic.jpg Linepic2.jpg

소프트웨어 개선사항

Robotic Arm의 제어 예외상황 처리

앞에서 General Solution을 도출하였으나, 아래와 같은 경우 해를 구할 수 없는 문제점이 발생하였다.

Arm error.PNG
  • End Effector의 각도를 원하는 대로 부여할 수 없는 경우
  • 목적 좌표가 도달 가능한 범위에서 이탈한 경우
  • Link가 서로 교차하는 경우
  • Servo 모터가 한계 각도를 초과하여 회전하는 경우

위 상황들을 기하학적인 방법을 이용하여 세세하게 구별하여 처리하였으며 아래는 도출된 예외 상황과 Matlab을 이용한 최종 시뮬레이션 결과이다.

Trajet.png


Application 실행 시 방향 초기화

Gyro 센서와 자력 센서를 동시에 이용하여 위상 값을 도출하다 Roll, Pitch, Yaw의 초기 값이 자기장의 방향을 나타내게 되었다. 이 상황에서 Application을 사용하는 경우 정면 시선이 주변을 향하게 되어 사용자에게 불편함이 발생한다. 따라서 Application이 처음 실행되는 경우에 Yaw 방향을 영점으로 하여 최초 실행 이후 시선의 변화에 따라 움직임이 변화하도록 한다.
아래의 사진은 초기값 설정을 나타낸다.
정면셋팅.png 좌회전셋팅.png 우회전셋팅.png
정면을 기준으로 초기 실행을 하였음
정면에서의 yaw 값 약 1.2
좌회전에서의 yaw 값 약 -29
우회전에서의 yaw 값 약 29

프로젝트 결과

최종 하드웨어

Hw.png

최종적으로 완성된 하드웨어. 구동베이스 위에 로봇 팔과 카메라 배터리가 장착되었으며 각 값과 위치의 조정을 완료하였다.

최종결과물시연

사용자의 움직임을 입력받는 로봇 팔


Button.png

제약 사항

Raspberry Pi 성능

  • 카메라의 이미지 화질이 제약됨
  • 테스트 데이터 수집 및 Learning에 제약

Servo Motor의 성능

  • 낮은 해상도로 인해 진동이 심하며 정밀한 제어 불가능
  • Servo Motor의 속도와 Torque 제어가 불가능

Base 차체의 크기

  • 배터리를 위한 공간이 부족하여 밀집된 구성
  • 무게 중심 불균형으로 인한 바퀴 미끄럼 발생

Leap motion의 정밀도

  • 적외선 카메라를 이용한 센서로 오차 발생
  • 카메라의 간격이 좁아 오동작, 인식 불가한 경우가 발생

프로젝트 평가

평가항목

Arm newtest2.PNG

평가항목은 초기의 계획에서 아래의 부분이 수정되었다.

  • 동작의 정밀성은 좌표 변환이 제대로 이루어지지 않은 경우 의미가 없으며, Servo Motor의 해상도가 충분히 높을 경우 오차가 발생하지 않아 이 부분을 삭제하였다.
  • 대신 이 항목을 변환된 좌표계가 그리는 Grid의 형태를 비교하는 것으로 교체하였다. 주 Work Space 내의 최대 오차를 기준으로 한다.
  • Servo Motor의 성능이 좋지 않아 속도 기준을 완화하였다.

평가결과

정밀하게 작동하는가

Arm grid.PNG
 주 Workspace를 좌우 100mm, 전방 100~200mm 부분으로 규정하고, 테스트 결과를 이용하여 이 부분의 Grid를 그려 비교하였다. 최대 오차는 51mm로 보완이 필요하다.
테스트 결과 중심점은 잘 잡혀있으나 변환된 Domain이 일그러진 것을 확인할 수 있었다. Workspace의 중심점에서의 오차는 18mm, 좌측의 양 꼭지점에서의 오차는 각각 5mm와 17.5mm로 측정되었으나 좌측에서의 오차는 29mm에서 51mm로 Link의 치수 측정에서 발생한 오차와 End Effector가 약간 좌측으로 치우쳐 발생한 오차가 누적된 문제로 보인다.


신속하게 이동하는가

 테스트 결과 평균 1초당 569mm를 이동할 수 있다는 결과를 얻을 수 있었다.
기존에 모터의 성능을 우려하여 기준을 낮추었음에도 완화하기 전 기준보다 높은 결과를 나타내었다.


신속하게 반응하는가

 동영상을 이용해 측정하였으나, 화면에 나타나는 Topic 인식과 팔의 움직임이 동시에 발생하였다. 장치에 쓰는 시간과 화면에 출력되는 주사율을 고려하였을 때, 충분히 빠르다는 결론을 내렸다.
원래의 계획대로 동영상을 이용하여 ROS Core가 Topic을 인식한 시간과 로봇 팔이 반응을 시작하는 프레임을 비교하여 지연 시간을 확인하였다. 이는 다음의 내용을 전제로 한다.
  • ROS Core와 기타 장치는 별개의 장비에서 돌아가므로 Topic을 인식하는 시간이 네트워크 지연 시간에 해당한다.
  • Echo 명령을 이용하면 Topic을 인식하는 즉시 내용을 확인할 수 있다.
실제 테스트 결과 실제로 좌표 Topic 발행이 확인됨과 동시에 기계 팔이 반응하였는데, 별도의 프레임 상의 지연이 없었기 때문에 다음과 같이 결론내렸다.
  • 발생할 수 있는 지연 시간 = 시스템이 터미널에 출력하는 시간 및 모니터의 출력 주기의 합
따라서 목표를 충분히 만족하였다고 결론을 내릴 수 있었다. 정확한 반응 시간을 알기 위해서는 다른 프로세서를 이용하는 전송 타이밍을 계산하는 방법 등 더 빠른 분석 방법이 필요해 보인다.


조작이 직관적인가

 하드웨어 전력 문제와 기타 일정으로 인해 지연되어 설문은 시행하지 못하였다.

느낀점

제작자.png

오**

ROS를 이용해 네트워크로 노드를 만들어보고 이를 통합하면서 대학교에 다니던 중 가장 큰 규모의 프로젝트를 진행하였다. 로봇이 손 흔들며 졸졸 기어가는 모습은 마치 자식을 보는 것 같았지만 정말 말을 안 듣는 것 같다. 그리고 소프트웨어를 다 보완하였음에도 하드웨어 충돌이 때때로 발생한다는 점은 정말 골치 아픈 상황이었고, 하드웨어의 중요성을 다시 느낄 수 있었다. 당초에 부가적인 목표로 두긴 했지만 Deep Learning을 적용하지 못했다는 점이 아쉬웠고, 다음 학기에 이 프로젝트를 이어서 하게 된다면 이러한 부분을 보완하여 좀더 완성도 있는 작품을 만들었으면 좋겠다. VR 장비를 연결한 상태로 질주하는 게 매우 재미있었는데, 방학 때 기회가 된다면 내장형 소모임을 대상으로 레이스를 해보는 것도 나쁘지 않을 것 같다.
팀원들이 매우 고생이 많았지만 잘 정리된 것 같다. 교수님과 조교님들도 고생 많으셨습니다


최**

이번 프로젝트를 통해 내장형시스템과 일반 컴퓨터의 작업환경의 차이를 알게 되었습니다. 즉, 내장형 시스템의 컴퓨팅 파워를 고려한 설계의 필요성을 느끼게 되었습니다. 그리고 팀원들과 어플리케이션 개발작업을 같이 하다 보니 모르고 있었던 네트워크개념을 팀원들로부터 많이 배울 수 있었습니다. 게다가, 프로젝트를 진행하며 다양한 장치들의 모듈을 제작하고 통합하며, 하나의 PC로 모든 장치들을 원격 제어하는 과정을 보고 네트워크의 중요성을 다시 한번 알게 되었습니다. 이론에서 배우던 것을 팀원들과 같이 직접 구현하는 것을 보고 더 배울 수 있어서 좋았습니다.


조**

프로젝트를 진행하면서 물품 구매와 하드웨어 설계가 예상외로 초반에 장애요소가 되었지만 범용성이 높은 하드웨어를 사용하면서 추가적인 수정 사항에도 유연하게 대처할 수 있었습니다. 또한 ROS 라는 플랫폼을 기반으로 개발함으로써 ROS의 장,단점을 확실하게 파악하여 추후 동일한 플랫폼으로 개발할 때 더욱 능숙하고 다양한 방법으로 개발 할 수 있을 것 같습니다. 다만 적은 지원금과 라즈베리파이라는 한정된 하드웨어로 인해 타협점이 많았던 것이 아쉬웠지만 결과적으로 프로젝트를 완성하여 매우 기쁘고 프로젝트 외적인 위키, 동영상 제작을 할 때 도 즐거운 마음으로 임할 수 있었습니다.
  1. 서보모터의 영점 값, 모터의 회전 방향, 카메라의 위치 등