Jump to: navigation, search

Multikinect:Imal

Notes and resources about the multi-kinect motion capture system developped in collaboration with numediart.org.

Residence

Imal, 2015

Mise en place d'un setup de 4 kinect v2 avec KSkeletonSuite, version prototype, du 28/12/2015 au 08/01/2015.

Target

  • Validation de la faisabilité
  • Identification des problèmes de déployement
  • Identification des limites du dispositif
    • Performance, stablité logicielle, etc.
    • Champs de vision
    • Positionnement des points
  • Premier essai dans Unity3D

Préparatifs

todos

  • RBM
    • déployement du soft de calibration sur les slaves -> possible en simple copy/paste?
    • déployement du soft de calibration sur le master
    • procédure à suivre pour la compilation
      • version VS
      • libs en statik?
    • ou possible en simple copy/paste?
    • sauvegarde au niveau master des matrices de transformation des slaves
  • FZ
    • adaptation du merger au format Kinect V2 (25 points)
    • adaptation du streamer pour envoi des rotations
    • compilation de l'enregisteur OSC sur windows
  • Matos:
    • 4 kinects V2
    • 3 zotac
    • 1 tour highend
    • (en option) 2 tour low-profile


setup

  1. tout est cool: il est "facile" de déployer les softs sur d'autres machines, donc les zotac et les kinects sont suffisants
    • les 3 zotac (2 fz & 1 rbm) sont reliés en réseau à la tour de frankiezafe
    • sur les zotacs
      • un slave de calibration (rbm)
      • un slave de stream (fz)
    • sur la tour
      • un slave de calibration (rbm)
      • un slave de stream (fz)
      • un master de calibration (rbm)
      • un master de fusion (fz)
      • enregistreur OSC
      • unity
  2. c'est la merde: pas possible de déployer les slaves de calibration facilement (sans recompilation)
    • les zotacs ne peuvent donc pas acceuillir les slaves de calibration :(
    • utilisation des 2 tours low profile alienware de rdm pour la calibration - collecte progressive des nuages de points dans le master de calibration (rbm)
    • copie des matrices dans les zotacs

Meetings

2015/12/02

démo du système de calibration

attendees:

  • radhwan ben mardhkour
  • françois zajéga

calibration

  • test avec 2 kinects 2, regardant l'espace du même coté, avec un offset de 2.5m et un theta de 60° (à la grosse morblute)
  • calibration ok - programmes en qt, fully functional,
  • technos: Kinect studio, PCL & QT


matrices sauvées en .yml:

%YAML:1.0
rt_matrix: !!opencv-matrix
  rows: 4
  cols: 4
  dt: f
  data: [ -6.84245110e-001, 1.30183369e-001, 7.17538059e-001,
      -2.41557217e+000, 7.28974819e-001, 1.49234354e-001,
      6.68075502e-001, -1.25812507e+000, -2.01090146e-002,
      9.80194569e-001, -1.97013259e-001, 1.19529927e+000, 0., 0., 0.,
      1. ]

problème lors de la correction de la calibration > le centre de rotation reste l'origine du cloud et non le centre du monde

tests de fusion de skeletons

  • différence de taille moindre qu'en kinect 360
  • pieds correctement placés

cas limites (niveau slave)

  • rotation sur soi-même, solutions envisagées
    • sur base du vecteur pointant vers l'avant au niveau des épaules pour les membres supérieurs
    • sur base du vecteur pointant vers l'avant au niveau des hanches pour les membres inférieurs
    • descendre la confidence dès que ces vecteurs s'approchent de la perpendiculaire à l'axe optique
  • membres invisibles d'un des 2 points de vue
    • segment/segment, vérifier la direction en fonction à l'axe optique > quand le segment est dans la même direction que cet axe, diminué la confidence du tail (et des points suivants dans la hiérarchie?

autre: ne prendre en compte que les rotations et utiliser un template de squelette pour la taille des segments (peut-etre ajusté séparement) en somme, moyenne pondéré au niveau des rotations locales et non des positions > moins de variations et de squelettes bizarres

Sources

Main applications

K2Streamer

streamer of skeletons, uses a data/configuration.xml file

K2Streamer screenshot.jpeg
<kstreamerv2 version="0.200000">

enabling/disabling display of information on screen

   <display cam="1" skel_position="1" skel_orientation="0" skel_info="1"></display>

fov_* are used for confidence adaptation

   <kinect>
       <skeletons max_skeletons="6.000000"></skeletons>
       <fov_znear meters="1.000000"></fov_znear>
       <fov_zbest meters="2.000000"></fov_zbest>
       <fov_zfar meters="6.000000"></fov_zfar>
       <fov_securetheta degree="5"></fov_securetheta>
   </kinect>

network id is used to open a range of specific ports based on slot:port

   <network id="2">
       <osc_out>
           <slot ip="192.168.0.12" port="23000" active="1"></slot>
           <slot ip="192.168.0.12" port="25000" active="1"></slot>
       </osc_out>
       <osc_in>
           <slot port="23000" active="1"></slot>
       </osc_in>
   </network>

yml file are generated by the calibration system; if specified, the .yml overwrite the matrix values specified in row:col

   <matrix4x4 yml="masterCalibration_2.yml">
       <row id="0">
           <col id="0" value="0.704366"></col>
           <col id="1" value="0.000000"></col>
           <col id="2" value="-0.709837"></col>
           <col id="3" value="0.000000"></col>
       </row>
       <row id="1">
           <col id="0" value="0.000000"></col>
           <col id="1" value="1.000000"></col>
           <col id="2" value="0.000000"></col>
           <col id="3" value="0.000000"></col>
       </row>
       <row id="2">
           <col id="0" value="0.709837"></col>
           <col id="1" value="0.000000"></col>
           <col id="2" value="0.704366"></col>
           <col id="3" value="0.000000"></col>
       </row>
       <row id="3">
           <col id="0" value="-1.428571"></col>
           <col id="1" value="1.330049"></col>
           <col id="2" value="0.000000"></col>
           <col id="3" value="1.000000"></col>
       </row>
   </matrix4x4>
</kstreamerv2>

source: kinectskeletonstreamerv2

K2Merger

merger of skeletons emitted by the streamers

Will be compliant with any kind of kinect stream (OpenNI, Kinect SDK 1.8 & Kinect SDK 2). Not done yet.

source: kinectskeletonmerger

Utils

Resources

platforms & libraries

  • Qt - C++ application framework
  • PCL - library for 2D/3D image and point cloud processing - BSD license
  • Openframeworks - C++ creative coding framework


repositories


related projects


--Frankiezafe (talk) 15:04, 22 December 2015 (CET)