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

Juan José García Cantero jj.garciac21 en gmail.com
Mar Mar 19 17:09:22 CET 2013


---------- Mensaje reenviado ----------
De: Juan José García Cantero <jj.garciac21 en gmail.com>
Fecha: 19 de marzo de 2013 17:08
Asunto: Re: [Jderobot-dev] Plugin para kinect en gazebo 1.4, posible cambio
en imagen de profundidad para kinectServer
Para: Alejandro Hernández <ahcorde en gmail.com>


Hola Alex,
en cuanto a plugin creo que te refieres a las lineas negras del suelo, es
así? le echare un ojo. Y en cuanto al color en los componentes, a mi si me
muestran los colores, si puedes dime en componentes mas concretamente para
poder echarle un vistazo también.

Gracias por tu respuesta.
Un saludo!

El 19 de marzo de 2013 12:54, Alejandro Hernández <ahcorde en gmail.com>escribió:

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/ff29638a/attachment.htm 


More information about the Jde-developers mailing list