[Jderobot-dev] Plugin para kinect en gazebo 1.4, posible cambio en imagen de profundidad para kinectServer

Alejandro Hernández ahcorde en gmail.com
Mar Mar 19 12:54:46 CET 2013


Hola Juanjo,

estoy ejecutando tu *plugin* de Kinect y tiene muy buena pinta. Aunque hay
una cosa que no me cuadran de todo. En el suelo aparecen unas lineas que en
la realidad no están.

También he probado alguno de tus componentes como el visualizar de color,
pero no me salen las cosas con su color.

Solventando esta par de cosillas subimos las modificaciones al repositorio
oficial.

Álex.


El 16 de marzo de 2013 14:58, Juan José García Cantero <
jj.garciac21 en gmail.com> escribió:

> Hola a todos,
>
> escribo este mail para tratar dos temas:
>
>     I. Si habéis probado el kinectPlugin del repositorio oficial jderobot
> veréis que en Gazebo 1.4 para Ubuntu 12.04 este plugin no funciona
> correctamente, esto es debido a la incompatibilidad con las librerías de
> anteriores versiones de Ubuntu, para solucionar esto propongo el plugin que
> yo mismo he remodelado, podéis encontrarlo aquí:
> https://svn.jderobot.org/users/jj.garciac21/pfc/trunk/src/kinectPlugin/ echadle
> un vistazo y decid que os parece. Además aquí tenéis un mundo para utilizar
> este plugin en gazebo 1.3 o superiores:
> https://svn.jderobot.org/users/jj.garciac21/pfc/trunk/worlds/kinect_simple.world
>
>    II. A la hora de servir la imagen de profundidad tanto en kinectServer
> como en el kinectPlugin se esta utilizando el siguiente método para hacer
> la conversión de distancia a componentes RGB:
>
> void depth2rgb( const XnDepthPixel*  Xn_disparity, cv::Mat image){
>    int i;
>    //const unsigned short *disparity = Xn_disparity;
>
>    for (i=0; i<image.rows* image.cols; i++) {
>       //std::cout << i << std::endl;
>       int pval = depth[Xn_disparity[i]];
>       int lb = pval & 0xff;
>       switch (pval>>8) {
> 	      case 0:
> 		      image.data[3*i+0] = 255;
> 		      image.data[3*i+1] = 255-lb;
> 		      image.data[3*i+2] = 255-lb;
> 		      break;
> 	      case 1:
> 		      image.data[3*i+0] = 255;
> 		      image.data[3*i+1] = lb;
> 		      image.data[3*i+2] = 0;
> 		      break;
> 	      case 2:
> 		      image.data[3*i+0] = 255-lb;
> 		      image.data[3*i+1] = 255;
> 		      image.data[3*i+2] = 0;
> 		      break;
> 	      case 3:
> 		      image.data[3*i+0] = 0;
> 		      image.data[3*i+1] = 255;
> 		      image.data[3*i+2] = lb;
> 		      break;
> 	      case 4:
> 		      image.data[3*i+0] = 0;
> 		      image.data[3*i+1] = 255-lb;
> 		      image.data[3*i+2] = 255;
> 		      break;
> 	      case 5:
> 		      image.data[3*i+0] = 0;
> 		      image.data[3*i+1] = 0;
> 		      image.data[3*i+2] = 255-lb;
> 		      break;
> 	      default:
> 		      image.data[3*i+0] = 0;
> 		      image.data[3*i+1] = 0;
> 		      image.data[3*i+2] = 0;
> 		      break;
>       }
>    }
> }
>
> he percibido que mediante este método no se están dando los valores reales de profundidad, por ello propongo el siguiente método:
>
>
> void KinectPlugin::depth2rgb(cv::Mat image){
>    //const unsigned short *disparity = Xn_disparity;
>    imageDepth.create(image.rows,image.cols,CV_8UC3);
>    float * data= (float*)image.data;
>    for (int i=0; i<image.rows* image.cols; i++) {
>       //std::cout << i << std::endl;
>       int val = (int)(data[i]*1000);
> 		  imageDepth.data[3*i+0] = (float)val/10000*255;;
> 		  imageDepth.data[3*i+1] = val>>8;
> 		  imageDepth.data[3*i+2] = val&0xff;
> 	
>    }
> }
>
>
> en este dividimos la distancia dada en un int con rango de 0 10000 en dos bytes el de mas peso le metemos en el componente g, y el de menos peso en el componente b de la imagen, ademas tenemos la componente r para mandar el valor de la distancia en escala de grises para mostrar si se quisiera la imagen directamente, un método para volver a tomar el dato de distancia en su formato original podría ser este:
>
>
>   float Control::get_distance(int i)
>   {
>     float distance= ((int)imageDataDepth->pixelData[3*i+1]<<8)|(int)imageDataDepth->pixelData[3*i+2];
>     return distance;
>   }
>
> Comentadme que os parecen estos dos temas.
>
> Un saludo
>
> Juanjo
>
>
>
> _______________________________________________
> Jde-developers mailing list
> Jde-developers en gsyc.es
> http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
>
>


-- 
Alejandro Hernández Cordero

<http://www.linkedin.com/in/ahcorde/en>  <https://twitter.com/ahcorde>
<https://plus.google.com/u/0/114434050324725472734/posts>
  <http://github.com/ahcorde>

Play and visit my Curriculum vitae ->
https://googledrive.com/host/0BytBL_SySiIjX19Pd1o5dlZaRHc/Game.html
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20130319/1956b618/attachment.htm 


More information about the Jde-developers mailing list