Professional Documents
Culture Documents
SDK:
Para la etapa de visión lo primero que tuvimos que hacer fue instalar los
controladores del kinect, estos controladores son gratuitos de la página oficial de
Microsoft (KinectSDK y Kinect for Windows Develeoper).
Este software nos permite crear aplicaciones usando la tecnología del kinect,
dentro de este software podemos crear aplicación de seguimiento de esqueleto,
procesamientos de video RGB y profundidad y audio, para esto es necesario
conocer el ambiente de programación Visual Studio 2010, Lenguajes C# o C++.
KINECT
Campo de visión:
3. Sistema de seguimiento
Rastrean hasta 6 personas, incluyendo 2 jugadores activos
Rastrean hasta 20 articulaciones
Para conectar el Kinect al PC, es necesario un cable en forma de Y, un extremo
tiene un adaptador hembra para el kinect es de color naranja y el otro extremo es
un conector USB para el CPU
Para comprobar que tenemos activados estos toolbox nos dirigimos a la barra de
herramientas de matlab y seleccionamos resources / add-ones / Get Hardware
Support Packages se nos abrirá una pantalla donde seleccionaremos Install from
Internet y comprobamos que tengamos Kinect for Windows Runtime
Tabla X. ToolBox de adquisición de imagen. Observamos que se encuentra activado este paquete para
Matlab 2013b
Instrucciones básicas
Imagreset;
imaqhwinfo ('kinect')
Genera información de los dispositivos que se encuentran dentro del kinect y les
otorga un identificador, para el kinect a sensor de color le agrega el ID = 1 y para
profundidad el ID = 2
HwInfo = imaqhwinfo('kinect')
obj = videoinput(adaptorname,deviceID);
Imaqhwinfo (adaptorname)
depthVid.FramesPerTrigger = 1;
Obj.TriggerRepeat = Type;
depthVid.TriggerRepeat =inf;
Obj.FrameGrabInterval = valor;
depthVid.FrameGrabInterval = 5;
src = getselectedsource(obj)
Busca todos los objetos de fuente de vídeo asociados con el objeto de entrada
vídeo obj y devuelve el objeto fuente de video, src, que tiene el valor de la
propiedad Selected en 'on'. Se pueden obtener características dependiendo del
obj. Las propiedades del obj fuente de profundidad que controlan las
características de seguimiento esquelético son las propiedades TrackingMode,
SkeletonToTrack y BodyPosture en el VIDEOSOURCE.
DeployableVideoPlayer
Viewer = visión.DeployableVideoPlayer();
Start(obj);
Start(depthVid);
trigger(obj)
Inicia registro de datos para el objeto de entrada vídeo obj. La entrada obj puede
ser un solo objeto de entrada de vídeo o una matriz de objetos de entrada videos.
trigger(depthVid)
Devuelve los datos (metadatos) y los almacena en las siguientes variables, el que
más nos interesa es la variable metadata.
Figura X. Metadatos. Observamos todas las variables que nos servirán para el
cálculo de q1, q2, q3
Metadata.propiedad
Calculo de la Cinemática Inversa:
Figura X. Robot de 3 grados de libertad. Se usó este ejemplo ya que los brazos
del bioloid son de 3 grados de libertad.
𝑃𝑧
𝑞1 = tan−1
𝑃𝑦
Tomando en cuenta que los ejes Pz y Py serían las coordenadas del efector final
Dónde:
𝑟𝑐𝑜𝑑𝑜
𝑞2 = tan−1
𝑟𝑑_𝑐𝑥
ℎ = √𝑟𝑚𝑢ñ𝑒𝑐𝑎 2 + 𝑟𝑑_𝑚𝑥 2
Dónde:
−1
𝑟𝑑_𝑚𝑥 2 + 𝑟𝑑_𝑚𝑦 2 + 𝑟𝑑_𝑚𝑧 2 − 𝑙12 − 𝑙22
𝑞3 = cos ( )
−2 ∗ 𝑙1 ∗ 𝑙2
Todo esto será la base para el cálculo de los ángulos respecto a las coordenadas
arrojadas por el sensor Kinect para las cuales se tuvieron que hacer algunos
cálculos adicionales
Extracción y cálculo de valores
Dentro de Matlab una vez adquiridos los metadatos y conociendo previamente los
cálculos para obtener los ángulos necesarios para mover el Bioloid no dirigimos a
realizar la extracción de los Metadatos que no harán falta y se realiza de la
siguiente manera:
Es importante conocer el identificador para cada uno de los nodos del cuerpo:
Figura X. ID de cada uno de los nodos. Para nuestra aplicación solo ocuparemos
los nodos de los brazos.
cdx = world(10,1);
cdy = world(10,2);
cdz = world(10,3);
mdx = world(11,1);
mdy = world(11,2);
mdz = world(11,3);
Una vez que se obtuvieron las longitudes l1 y l2 obtenemos los ángulos con las
ecuaciones ya calculadas
𝑦2 − 𝑦1
𝑦 − 𝑦1 = (𝑥 − 𝑥1)
𝑥2 − 𝑥1
𝑦2 = 517 − (3.5888888 ∗ 𝑥)
Dónde:
𝑦2 = 𝑣𝑎𝑙𝑜𝑟 𝑑𝑒 𝑠𝑎𝑙𝑖𝑑𝑎 𝑑𝑒 𝑄2
𝑥 = á𝑛𝑔𝑢𝑙𝑜 𝑑𝑒 𝑒𝑛𝑡𝑟𝑎𝑑𝑎 𝑞2
𝑦1 = 299 + (3.03333 ∗ 𝑥)
Dónde:
𝑦1 = 𝑣𝑎𝑙𝑜𝑟 𝑑𝑒 𝑠𝑎𝑙𝑖𝑑𝑎 𝑑𝑒 𝑄1
𝑥 = á𝑛𝑔𝑢𝑙𝑜 𝑑𝑒 𝑒𝑛𝑡𝑟𝑎𝑑𝑎 𝑞1
Figura X. Valor de la posición del hombro arriba y abajo.
𝑦3 = −211.2857 + (4.5142 ∗ 𝑥)
Dónde:
𝑦3 = 𝑣𝑎𝑙𝑜𝑟 𝑑𝑒 𝑠𝑎𝑙𝑖𝑑𝑎 𝑑𝑒 𝑄3
𝑥 = á𝑛𝑔𝑢𝑙𝑜 𝑑𝑒 𝑒𝑛𝑡𝑟𝑎𝑑𝑎 𝑞3