質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Leap Motion

Leap Motionは、Leap Motionによって開発、販売している、手のジェスチャーでパソコンを操作できるデバイスです。

Q&A

0回答

369閲覧

leapmotionによるロボットハンド操作

SinkuIzumi

総合スコア10

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Leap Motion

Leap Motionは、Leap Motionによって開発、販売している、手のジェスチャーでパソコンを操作できるデバイスです。

0グッド

0クリップ

投稿2018/12/20 05:05

編集2019/02/01 05:33

leapmotionで親指と人差し指の座標から二点間距離を求めました。
その距離データを使用し、ロボットハンドを制御したいと考えています。
ロボットハンドに対して造詣の深い方に助言を頂けると幸いです.
よろしくお願いします。

///////////////////////////////////////////////////////
LeapMotionプログラム
///////////////////////////////////////////////////////
#include<iostream>
#include<cstring>
#include<stdio.h>
#include<math.h>
#include"Leap.h"

using namespace Leap;

//const std::string fingerNames[] = { "Thumb", "Index" };
//const std::string boneNames[] = { "Metacarpal", "Proximal", "Middle", "Distal" };
//const std::string stateNames[] = { "STATE_INVALID", "STATE_START", "STATE_UPDATE", "STATE_END" };

class SampleListener : public Leap::Listener
{
int handId;
int fingerID;

public:

SampleListener() { handId = 0; } void onFrame(const Leap::Controller& leap) { auto frame = leap.frame(); Leap::HandList hands = frame.hands(); Leap::FingerList fingers = frame.fingers(); Leap::Finger fingerOfinterest = frame.finger(fingerID); Leap::InteractionBox box = frame.interactionBox(); Leap::Finger INDEX = frame.fingers().fingerType(Leap::Finger::Type::TYPE_INDEX)[0]; Leap::Finger THUMB = frame.fingers().fingerType(Leap::Finger::Type::TYPE_THUMB)[0]; Leap::Finger MIDDLE = frame.fingers().fingerType(Leap::Finger::Type::TYPE_MIDDLE)[0]; float x1 = INDEX.tipPosition().x; float y1 = INDEX.tipPosition().y; float z1 = INDEX.tipPosition().z; float x2 = THUMB.tipPosition().x; float y2 = THUMB.tipPosition().y; float z2 = THUMB.tipPosition().z; //for (auto finger : frame.finger().isExtended()) { //std::cout << " INDEX " // << " 位置 x : " << INDEX.tipPosition().x // << " 位置 y : " << INDEX.tipPosition().y // << " 位置 z : " << INDEX.tipPosition().z << std::endl; //std::cout << " Thumb " // << " 位置 x : " << THUMB.tipPosition().x // << " 位置 y : " << THUMB.tipPosition().y // << " 位置 z : " << THUMB.tipPosition().z << std::endl; int distance = sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2) + (z1 - z2)*(z1 - z2)); //mm(ミリメートル) std::cout << " distance : " << distance << std::endl; }

};

int main(int argc, const char** argv[])
{
Controller controller;

//リスナー登録 //リスナーのやり取りは別スレッドへ SampleListener listener; Leap::Controller leap(listener); std::cout << "Press Enter to quit..." << std::endl; std::cin.get(); return 0;

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問