Skip to content

HAPTIX Tactor Glove

hmhan1236 edited this page Mar 30, 2018 · 6 revisions

Overview

이 튜토리얼에서는 HAPTIX 시뮬레이터의 센서 데이터를 실제 촉각 피드백으로 변환하는 데 필요한 "tactor glove"을 만드는 방법을 알려준다.

What You Need

Hardware

  • 5 Lilypad Vibe Boards
  • 1 Teensy USB Board
  • 1 Mini-B USB cable (available from Amazon, Radioshack, etc.)
  • Wires (we used 30 gauge teflon)
  • Soldering iron
  • 1 glove, preferably made of a thin spandex material
  • Needle and thread (or a sewing machine)

Software

Gazebo와 handsim 패키지가있는 Linux 컴퓨터가 필요하다. 설치 방법은 이 튜토리얼을 참고하라.

Teensy USB 보드를 프로그래밍하려면 Arduino IDE 및 Arduino 용 Teensyduino 애드온을 설치해야한다.

장갑과 통신하는 컴퓨터는는 Linux(우분투가 바람직 함)를 실행하고 haptix-comm 라이브러리가 설치되어 있어야한다 (설치 방법은 여기 참조). 가제보를를 실행하는 동일한 컴퓨터일 수 있지만 반드시 그럴 필요는 없다.

Design the Glove

이것은 이 튜토리얼에서 가장 어려운 부분이며, 가장 재미있을 것이다.

tactor glove의 기본 아이디어는 장갑의 각 손가락에 5 개의 Lilypad 보드를 부착하는 것이다. 각 손가락에 Lilypad를 배치하고, 보드에 부착하는 방법과 장갑의 종류 (모든 손가락이 있는 vs. 손가락이없는)는 모두 사용자 마음이이다. 실제로, 장갑 대신에 완장을 사용할 수 있다 (특히, 실제 인공 팔을 준비하는 사람을 위해 햅틱 피드백 시스템을 설계하는 경우). Lilypads의 허브 역할을하고 컴퓨터에 연결하는 USB 보드를 어디에 둘 것인지 생각하고 싶을 것이다. 그리고 바느질하는 법을 모른다면, 글루건으로..

우리는 모든 손가락이 있는 글러브로 시작하여 Lilypads를 넣기 위해 각 손가락의 아래쪽 1/3에 주머니를 꿰매었다. 주머니는 Lilypads가 떨어질 위험이없는 직물에 대해 충분하였다. USB 보드를 손등의 주머니에 넣고 USB 케이블을 장갑 바닥 근처의 작은 구멍에 넣었다. 각 쌍의 전선을 함께 뒤틀어 꼬이는 것을 최소화하기 위해 모든 케이블을 손등에 묶었다.

Assembling the Electronics

각 Lilypad에 대해 두 개의 전선을 측정한다. 전선의 길이는 모터의 손가락 배치와 보드 배치에 따라 다르다. 적어도 8 인치(약간 아프지 않게)를 추천한다.

각 Lilypad에 대해 음극(-)단자를 Teensy 보드의 GND 핀에 연결하고 양(+)단자를 원하는 번호의 고유 한 핀에 연결한다. 여기에서는 4, 9, 10, 12 및 14 번 핀을 선택하였다. 다음 섹션에서 Arduino 코드에 영향을 미치므로 사용하는 핀을 메모해둔다.

Mini-USB 케이블을 Teensy 보드의 포트에 연결한다.

Optional : Lilypad 보드와 USB 보드를 수축랩으로 덮었다. 이것은 여러 가지 용도로 사용된다. 와이어에서 스트레스를 받으면서 직물에서 발생하는 정전기 간섭을 방지하며, 누군가가 마운틴듀를 사랑스럽게 만들어진 장갑으로 쏟아내는 경우에 대비하여 보호 기능을 제공한다.

이제 모든것이 납땜되어 연결되었으므로 Lilypads buzz를 만들 타이밍이다.

Programming the Board

Arduino IDE를 열고 새로운 스케치를 시작한다. '도구' 드롭 다운 메뉴를 클릭하고 'USB 유형: "직렬"'을 선택한다.

Arduino 스케치 코드를 여기에서 다운로드 받아 Arduino IDE에 복사한다.

Arduino 스케치는 무엇을 할까? USB 보드가 Linux 컴퓨터에 연결되면 ACM 장치 (예: "/dev/ttyACM0")가 생성된다. 해당 장치에 기록 된 문자를 수신한다. '1'에서 '5' 문자가 장치에 쓰여지면 해당 모터가 100 밀리 초 동안 윙윙거리며(buzz) 울린다.

전자 설정이나 기타 환경 설정에 따라 이 코드를 사용자가 정의 할 수 있다.

#define NUM_MOTORS 5

모터가 5개 이상인 경우 이 숫자를 변경하여 일치시킨다.

#define MOTOR_RUN_TIME 100

이 선은 하나의 모터 '클릭' 길이를 밀리초 단위로 정의한다.

int motors[NUM_MOTORS] = {4, 9, 10, 12, 14};

이 숫자가 이전 섹션에서 Lilypad 보드를 연결하기 위해 선택한 핀과 일치하는지 확인한다.

unsigned long t_motor_start[NUM_MOTORS] = {0, 0, 0, 0, 0};

모터 수를 변경하는 경우 이 배열에서 0의 수를 변경한다.

if (b >= '1' && b <= '5')
{
  int motor = b - '1';
  t_motor_start[motor] = millis();
  analogWrite(motors[motor], MOTOR_PWM);
}

이 섹션을 수정하여 모터의 버즈를 만드는 문자를 변경할 수 있다. 예를 들어 1-5 대신 'a', 'b', 'c'...를 사용할 수 있다. 또한 모터의 수를 변경하는 경우 'if'문에서 한계값을 변경해야 한다.

프로젝트를 빌드하고 Teensy 부트 로더를 사용하여 스케치를 보드에 로드한다.

Testing the Board

전자 장치와 소프트웨어가 picocom를 사용하여 작동하는지는 쉽게 테스트할 수 있다.

터미널에서 picocom을 실행한다.

sudo apt-get install picocom

tactor glove를 컴퓨터 USB 포트에 삽입하고 실행한다.

picocom /dev/ttyACM0

모터 buzz 생성을 위해 숫자 키 1-5 (또는 이전 단계에서 선택한 문자에 해당하는 키)를 누른다. CTRL-a CTRL-q를 눌러 종료한다.

/dev/ttyACM0이 열리지 않거나 문자를 보내지 않으면 ls /dev를 사용하여 다른 ACM 장치를 사용할 수 있는지 확인하고 다른 장치로 프로세스를 시도한다. picocom을 루트 (sudo picocom)로 실행해야 할 수도 있다. sudo를 하지 않고 장치를 열려면 사용자 이름을 plugdevdialout 그룹에 추가해야한다.

sudo usermod -a -G plugdev <username>
sudo usermod -a -G dialout <username>

명령에 -a를 포함시킨다. 그렇지 않으면 계정이 sudo 액세스 권한을 잃을 수 있다!

전자 장치와 Arduino 스케치가 작동하는 것을 확인한 후에는 첫 번째 단계에서 모터를 장갑에 연결하기 위해 만든 계획을 실행한다. 각 손가락의 모터와 어떤 문자가 buzz를 만드는지 확인한다. 참고로, 여기서 사용한 맵핑은 다음과 같다: Finger Board PinCharacter Index 4 1 Middle 9 2 Ring 10 3 Little 12 4 Thumb 14 5

Communicating with Gazebo

시뮬레이션에서 접촉 센서 데이터를 읽고 이를 모터 클릭으로 변환하는 haptix-comm 클라이언트를 작성한다.

이 프로젝트에 대한 장갑 소스 코드CMakeLists.txt를 다운로드 한다. 이 파일을 새 폴더(예: tactors) 복사한다.

이 c++ 코드는 /dev/ttyACM0을 열고 hx_getdeviceinfo를 호출하여 haptix-comm 클라이언트를 초기화 한다. Lilypads에서 모터 buzzes를 활성화하는 문자와 해당 손가락에 대한 센서 접촉 색인 간의 매핑을 설정한다. 10Hz로 실행되는 업데이트 루프에서, haptix-comm에서 센서 데이터를 읽고 접촉 센서 중 하나가 일정한 최소값을 초과하면 해당 문자를 /dev/ttyACM0에 씁니다.

이 예제와 다른 전자 장치 설정이 있는 경우 코드의 일부분을 사용자가 지정해야 할수도 있다.

const unsigned int sleeptime_us = 10000;
const float minContactForce = 0;

sleeptime_us은 시뮬레이터의 업데이트 속도를 제어한다. 기본값은 10000 마이크로초 또는 10 밀리초이다. minContactForce는 접속센서가 해당 모터 클릭을 만들기 위한 최소 힘이다. 장값을 접촉에 덜 민감하게 만들려면 이 값을 키우면 된다.

int fd = open("/dev/ttyACM0", O_WRONLY);
if (fd < 0)
{
  perror("Failed to open /dev/ttyACM0");
  return -1;
}

/dev/ttyACM0에 이미 ACM 장치가 연결되어있는 경우 장갑을 다른 장치 파일 (예:/dev/ttyACM1)에 연결할 수 있다. 장갑이 다른 장치 파일에서 계속 열리는 경우 해당 장치를 가져 오기 위해 열기 명령을 변경한다.

for (unsigned int i = 0; i < deviceInfo.ncontactsensor; i++)
{
  // Uninitialized
  sensorMotorIndexMapping[i] = '0';
}
for (unsigned int i = 3; i <= 6; i++)
{
  // Index
  sensorMotorIndexMapping[i] = '1';
}
for (unsigned int i = 11; i <= 14; i++)
{
  // Middle
  sensorMotorIndexMapping[i] = '2';
}
for (unsigned int i = 17; i <= 20; i++)
{
  // Ring
  sensorMotorIndexMapping[i] = '3';
}
for (unsigned int i = 7; i <= 9; i++)
{
  // Little
  sensorMotorIndexMapping[i] = '4';
}
for (unsigned int i = 21; i <= 23; i++)
{
  // Thumb
  sensorMotorIndexMapping[i] = '5';
}

코드의이 부분은 MPL 팔의 각 손가락에있는 접촉 센서의 색인을 /dev/ttyACM0에 기록 할 때 모터 buzz를 만들 문자로 매핑합니다. Arduino 스케치의 문자를 변경 한 경우 맵 항목의 값을 변경한다.

if (j <= '5' && j >= '1')

모터에 매핑되는 문자의 범위가 다른 경우 이 범위를 변경해야 할 수도 있다.

필요한 수정을 한 후 코드가 있는 폴더에서 다음 명령을 실행한다:

mkdir build;
cd build;
cmake ..;
make

별도의 창에서 Gazebo HAPTIX 시뮬레이터를 실행한다.

gazebo worlds/arat.worlds

그리고 C++ 코드가있는 폴더에서 tactors를 실행한다. 장갑을 끼고 시뮬레이터에서 물건을 집는다.

Table of Contents




Clone this wiki locally