ユーザによる指差し指示の為のコンポーネント

ユーザによる指差し指示の為のコンポーネント

Author: 
RyoTakeuchi

概要

RGB-Dセンサを利用した,ユーザの指差し位置を認識するためのコンポーネントです.
簡便な準備で使用できるようにすることを目標に作成しています.
迅速にキャリブレーションを行い,システムに組み込むことができるようになります.

必要なもの

Microsoft Kinect
OpenRTM 1.1 64bitが動作する環境

コンポーネント

本システムは複数のコンポーネント群で構成されています.

RTC_Kinect_JointTracking

Kinectを使用して関節位置を出力します.
  • 使用ライブラリ
    • OpenCV 2.4.9
    • Kinect SDK 1.8
  • 実行周期
    • 60Hz
  • 入力
    • なし
  • 出力
    • [dp_skeleton|RTC::TimedFloatSeq] 関節位置(x, y, z)*20関節分
      OpenHRIに含まれるKinectRTCと同様のものですが,動作しなかったため作成しました.
      動作未確認ですが,KinectRTCと代替可能だと思われます.

RTC_Kinect_VectorEstimation

Kinectから得られる関節情報を元に,指差し方向を推定します.
次のコンポーネントに渡される情報として必要なものは, 手の位置と指差し方向であるため,さらに精度の良いコンポーネントが作成されれば, この単純なコンポーネントを置換することができます.
  • 使用ライブラリ
    • OpenCV 2.4.9
  • 実行周期
    • 120Hz
  • 入力
    • [dp_skeleton|RTC::TimedFloatSeq] 関節位置(x, y, z)*20関節分
  • 出力
    • [dp_start|RTC::Point3D] 肘関節の位置
    • [dp_end|RTC::Point3D] 手関節の位置(指差し方向 = (end - start))
    • [dp_position|RTC::Point3D] ユーザの位置(未使用)

RTC_Kinect_Calibration

キャリブレーション時に使用するコンポーネントです.
部屋の中で実際に使用する際に,使用する場所を仮想的な壁面として設定することができます.
  • 使用ライブラリ
    • OpenCV 2.4.9
  • 実行周期
    • 120Hz
  • 入力
    • [dp_start|RTC::Point3D] 肘関節の位置
    • [dp_end|RTC::Point3D] 手関節の位置
    • [dp_position|RTC::Point3D] ユーザの位置(未使用)
  • 出力
    • なし

RTC_Kinect_Pointing

キャリブレーション時に登録した仮想平面を用いて,指差し位置を認識するコンポーネントです.
複数の仮想平面上に交差する場合,最も近い平面が選択されます.
  • 使用ライブラリ
    • OpenCV 2.4.9
  • 実行周期
    • 120Hz
  • 入力
    • [dp_start|RTC::Point3D] 肘関節の位置
    • [dp_end|RTC::Point3D] 手関節の位置
    • [dp_position|RTC::Point3D] ユーザの位置(未使用)
  • 出力
    • [dp_point|RTC::Point2D] 登録した仮想平面に対する新たな指差し位置の認識位置
      キャリブレーション時に左上を(0, 0),右下を(1, 1)で対応を取っているため,
      登録範囲内で指差しを行えばX(登録面に対して横方向)が0~1,Y(登録面に対して縦方向)が0~1 の範囲で出力されます.(dp_pointingがtrueの時のみ)
      画像に対して右側が正面
    • [dp_surface|RTC::TimedChar] 登録した仮想平面のID(dp_pointingがtrueの時のみ出力)
    • [dp_pointing|RTC::TimedBoolean] 指が指されているかどうか(常に出力)

接続例

キャリブレーション

キャリブレーション

実際にシステムを運用(使用)するとき

後ろにコンポーネントを接続してシステムを構築する

コンポーネント

2014/10/31
2014/10/31

その他

RTC_Projector_Test

ビデオ用のサンプルデモとして作成したコンポーネントです.
画面に出力される四隅のエッジ位置(uv)が,RTC_Kinect_Pointingの出力と対応しているため,
四隅のエッジを元にRTC_Kinect_Calibrationでキャリブレーションを行うと
ビデオ(0:54~)のような,ポインタを表示させることができるようになります.
  • 使用ライブラリ
    • OpenCV 2.4.9
    • DXライブラリ 3.13
  • 入力
    • [dp_point|RTC::Point2D]RTC_Kinect_Pointingの出力(x, y)
  • 備考
    • ビデオ用に作成したため,四隅のエッジ位置の調整は現在できません.

メモ

本コンポーネント群はOpenRTM1.1 64bit版で作成されています. 32bit版はomniORBのバージョンが違うようですが,動作するのでしょうか….

問合先(メールアドレス): 
is0074hi@ed.ritsumei.ac.jp
Resources
Project Information
OS: 
Windows
言語: 
C++
OpenRTM ver.: 
1.1
embedded video: 
Embedded thumbnail for ユーザによる指差し指示の為のコンポーネント
Average: 
5
Average: 5 (1 vote)
Last modified: 
Fri, 2014-10-31 19:56

latest Releases

For Begginers

Windows msi(installer) package (only trying samples)

Development environment is required for RT-Component development. See download page for details.

Number of Projects

Join our slack

Enter email address for slack invite.

OpenHRP3

Dynamics simulator

OpenHRI

Human-Robot-Interaction RTCs

OpenRTP

Integrated Development Platform

OpenINVENT

Mobile Robot RTCs