<div dir="ltr"><div>Buenas a todos,</div><div><br></div><div>estoy desarrollando ArDroneServer que es un wrapper del SDK oficial de ArDrone para controlar el aparato desde jderobot. El cuadricoptero dispone de dos cámaras; una frontal (que apunta al frente) y otra vertical (que apunta al suelo). Para poder obtener las imágenes desde el drone he incluido en ArDroneServer el código del componente CameraServer, de este modo puedo obtener las imágenes fácilmente a través de Ice. </div>
<div><br></div><div>En la versión 1.0 de ArDrone las imágenes de ambas cámaras se sirven en un único flujo, me explico, el SDK dispone de cuatro modos; uno para la cámara frontal, otro para la vertical, otro  para mostrar la vertical en la esquina superior izquierda sobre la imagen de la cámara frontal y el ultimo que es el inverso al anterior modo. Esto implica que no puedo obtener simultáneamente  las imágenes de las cámaras por separado. Cada vez que se refresca la imagen, el SDK lo almacena en un buffer que tiene un tamaño definido en [1], de esta manera, independientemente del modo que se esté visualizando la imagen resultante se almacena en ese buffer. </div>
<div><br></div><div>Cada modo tiene un tamaño y para ArDroneServer nos interesan el modo para la cámara frontal y vertical que tienen los siguientes tamaños [2]. Para poder servir las imágenes tuve que modificar el modo de adquisición de las imágenes en CameraServer quedando del siguiente modo [3], con estas modificaciones podéis ver el resultado en [4] para la cámara frontal y en [5] para la cámara vertical. Como se puede ver en [5] se puede apreciar la imagen servida por la cámara vertical y debajo de ella los &quot;restos&quot; de la imagen frontal en estático (no cambian ya que es el residuo de la anterior imagen).</div>
<div><br></div><div>Para ArDroneServer nos gustaría poder recibir las imágenes por separado por lo que hice la siguiente modificación en CameraServer [6], con esto quiero conseguir que en función del modo actual seleccionado para la cámara CameraServer sirva una imagen o la otra. Para la imagen frontal todo funciona como antes, se pude ver el resultado en [7]. Sin embargo para la cámara vertical sucede algo que no entiendo, podéis ver el resultado en [8].</div>
<div><br></div><div>¿Alguien sabe a qué se debe este resultado?</div><div><br></div><div>Un saludo a todos.</div><div><br></div><div>[1] video.h: </div><div>#define MAX_STREAM_WIDTH 640</div><div>#define MAX_STREAM_HEIGHT 360</div>
<div>[2] video.h:</div><div>// Drone 1 Static Stream Size &amp; PIP Stuff</div><div>// PIP is not supported in AR-Drone SDK 2.0</div><div>#define D1_STREAM_WIDTH 320</div><div>#define D1_STREAM_HEIGHT 240</div><div>//Vertical Camera standalone</div>
<div>#define D1_VERTSTREAM_WIDTH 174</div><div>#define D1_VERTSTREAM_HEIGHT 144</div><div>[3] cameraserver.cpp:</div><div>vp_os_mutex_lock(&amp;video_lock);</div><div>frame=cv::Mat(D1_STREAM_HEIGHT,D1_STREAM_WIDTH,CV_8UC3,(void*)buffer);</div>
<div>vp_os_mutex_unlock(&amp;video_lock);</div><div>También tuve que suprimir la linea donde se establecia en color cv::cvtColor(frame, frame, CV_RGB2BGR);</div><div>[4] normal_horizontal: <a href="http://jderobot.org/store/amartinflorido/uploads/images/0_normal_hor.png">http://jderobot.org/store/amartinflorido/uploads/images/0_normal_hor.png</a></div>
<div>[5] normal_vertical: <a href="http://jderobot.org/store/amartinflorido/uploads/images/1_normal_vert.png">http://jderobot.org/store/amartinflorido/uploads/images/1_normal_vert.png</a></div><div>[6] cameraserver.cpp:</div>
<div>vp_os_mutex_lock(&amp;video_lock);</div><div>//cámara frontal<span class="" style="white-space:pre">                </span></div><div>if(cam_state==0){</div><div><span class="" style="white-space:pre">        </span>frame=cv::Mat(D1_STREAM_WIDTH,D1_STREAM_HEIGHT,CV_8UC3,(void*)buffer);</div>
<div><span class="" style="white-space:pre">        </span>mycamera-&gt;imageDescription-&gt;width=D1_STREAM_WIDTH;</div><div><span class="" style="white-space:pre">        </span>mycamera-&gt;imageDescription-&gt;height=D1_STREAM_HEIGHT;</div>
<div>}else if(cam_state==1){ //cámara vertical</div><div><span class="" style="white-space:pre">        </span>frame=cv::Mat(D1_VERTSTREAM_WIDTH,D1_VERTSTREAM_HEIGHT,CV_8UC3,(void*)buffer);</div><div><span class="" style="white-space:pre">        </span>mycamera-&gt;imageDescription-&gt;width=D1_VERTSTREAM_WIDTH;</div>
<div><span class="" style="white-space:pre">        </span>mycamera-&gt;imageDescription-&gt;height=D1_VERTSTREAM_HEIGHT;</div><div>}</div><div>vp_os_mutex_unlock(&amp;video_lock);</div><div>[7] modificado_horinzontal: <a href="http://jderobot.org/store/amartinflorido/uploads/images/2_modifcado_hor.png">http://jderobot.org/store/amartinflorido/uploads/images/2_modifcado_hor.png</a></div>
<div>[8] modificado_vertical: <a href="http://jderobot.org/store/amartinflorido/uploads/images/3_mod_vert.png">http://jderobot.org/store/amartinflorido/uploads/images/3_mod_vert.png</a></div></div>