기본 콘텐츠로 건너뛰기

글

라벨이 디지털 이미징인 게시물 표시

2015.08: 3D Printed Robotic Hand and Its Remote Control - (립모션, 벡터의 내적과 외적)

Processing.org 3년전, 핀란드에서 연구교환 프로그램을 할때, 3D 휴머노이드 로본 손 개발 프로젝트에 참여했다. 즐거운 여름이였다. 나는 비전 기반의 제스쳐 인식 및 액츄에이터 제어부로 값을 전달해주는 기능을 구현했다. 먼저 프로세싱으로 테스트를 해보았다. LeapMotion SDK와 onformative에서 배포하는 LeapmotionP5 라이브러리를 사용했다. 3D 좌표 그리고 내 손 웹캠 -> 키넥트 -> 립모션으로 신기하게 나의 분야가 연결되어가는 맛이 아주 재밌다. 2년만에 다시 해봐서 더 재미있는 것 같다. 립모션 라이브러리는 당시 크게 LeapmotionP5와 LeapmotionforProcessing이 오픈되어 있었던 것으로 아는데, 기본적으로 제공하는, 접근할 수 있는 가능성을 후자가 더 많이 주는 것 같다. 나는 LeapmotionP5로 시작했다. 손목과 팔 사이의 각도를 구하는 도중, 벡터의 내적만 사용하면 부호 없는 각도값만 얻는다.  이때 벡터의 외적과 다른 벡터의 y-basis를 내적하면 부호를 알 수 있다. 외적에는 순서(오른손 법칙)가 있어서, 각도가 양에서 음으로 또는 음에서 양으로 바뀌는 순간 외적벡터의 방향이 바뀌기 때문이다. 그림을 그려보면서 해보면 이해가 쉽다. Leap::Vector xBasisArm = basis.xBasis;           const Vector armV = arm.direction();         const Vector handV = hand.direction();         float wristAngle2 = handV.angleTo(armV) * RAD_TO_DEG;     ...