Cámara
Introducción
Robobo permite utilizar la cámara delantera o la cámara trasera del smartphone, pero solo una cámara puede estar activa al mismo tiempo. Existen varios métodos que hacen uso de la información de la cámara, la procesan, y devuelven percepciones de más alto nivel (color, QR, Aruco). Pero también es posible acceder directamente a las imágenes que se envían por stream al ordenador, a una frecuencia determinada (fps). Para utilizar el stream de video de la cámara es necesario descargar la siguiente librería:
pip install robobopy_videostreamPara comprobar que todo funciona, se puede ejecutar el siguiente script:
from robobopy.Robobo import Robobo
from robobopy_videostream.RoboboVideo import RoboboVideo
import cv2
rob = Robobo("localhost")
rob.connect()
videoStream = RoboboVideo("localhost")
videoStream.connect()
rob.startStream()
rob.moveWheels(10,10)
stop = False
while not stop:
cv2_image = videoStream.getImage()
cv2.namedWindow('imagen',
cv2.WINDOW_NORMAL)
cv2.imshow('imagen', cv2_image)
if cv2.waitKey(1) & 0xFF == ord('q'):
videoStream.disconnect()
cv2. destroyAllWindows ()
stop = True
rob.stopMotors()
rob.stopStream()Elementos de programación
1. Método setStreamFPS
| SetStreamFPS(fps) |
|
Establece los fps (frames per second) del stream. Estos son el número de fotogramas por segundo enviados desde el smartphone al ordenador. El valor por defecto es 60, pero el valor efectivo suele ser más bajo (alrededor de 20), dependiendo del smartphone. Este cambio es persistente.
Parámetros: |
Ejemplo de Uso
En este ejemplo, se varía el valor por defecto de 60 fotogramas por segundo a 30 haciendo uso del método setStreamFps.
from robobopy.Robobo import Robobo
rob = Robobo("localhost")
rob.connect()
rob.setStreamFps(30)
2. Método setCameraFPS
| SetCameraFPS(fps) |
|
Establece los fps (frames per second) de la cámara. Estos son el número de fotogramas por segundo leídos por la cámara del smartphone. El valor por defecto es 60, pero el valor efectivo suele ser más bajo (alrededor de 20), dependiendo del smartphone. Este cambio es persistente.
Parámetros: • fps ( |
Ejemplo de Uso
En este ejemplo, se varía el valor por defecto de 60 de los fotogramas por segundo de la cámara del smartphone a 20 haciendo uso del método setCameraFps.
from robobopy.Robobo import Robobo
rob = Robobo("localhost")
rob.connect()
rob.setCameraFps(20)3. Método setFrontCamera()
| setFrontCamera() |
|
Hace que Robobo utilice la cámara frontal. Este cambio es persistente. Este método no está implementado en el simulador. |
Ejemplo de Uso
En este ejemplo, se mueve el motor TILT para situar el smartphone de la base de forma perpendicular al suelo y se establece la cámara frontal como la cámara a utilizar.
from robobopy.Robobo import Robobo
rob = Robobo("192.168.10.1") #La IP depende del caso concreto
rob.connect()
rob.moveTiltTo(90, 20)
rob.setFrontCamera()4. Método setBackCamera
| setBackCamera() |
|
Hace que Robobo utilice la cámara trasera. Este cambio es persistente. Este método no está implementado en el simulador. |
Ejemplo de Uso
En este ejemplo, se mueve el motor TILT para situar el smartphone de la base de forma perpendicular al suelo. A continuación, el Robobo se mueve durante 3 segundos, varía los fps de la cámara a 20 y establece la cámara trasera como la cámara a utilizar.
from robobopy.Robobo import Robobo
rob = Robobo("192.168.10.1") #La IP depende del caso concreto
rob.connect()
rob.moveTiltTo(90, 20)
rob.setBackCamera()5. Método startCamera
| startCamera() |
|
Habilita la cámara. La cámara está deshabilitada por defecto en el robot real y habilitada por defecto en el simulador. Este cambio es persistente. Este método no está implementado en el simulador. Advertencia: Algunos módulos dependen de la cámara, por lo que es necesario habilitarla para hacer uso de ellos. |
Ejemplo de Uso
En el siguiente programa se habilita la cámara. Esto permitiría hacer uso del streaming.
from robobopy_videostream.RoboboVideo import RoboboVideo
from robobopy.Robobo import Robobo
videoStream = RoboboVideo("192.168.1.58")
rob = Robobo("192.168.1.58")
rob.connect()
rob.startCamera()6. Método stopCamera
| stopCamera() |
|
Deshabilita la cámara. La cámara está deshabilitada por defecto en el robot real y habilitada por defecto en el simulador. Este cambio es persistente. Este método no está implementado en el simulador. Advertencia: Algunos módulos dependen de la cámara, por lo que es necesario habilitarla para hacer uso de ellos. |
Ejemplo de Uso
En el siguiente programa se deshabilita la cámara. Esto impediría hacer uso del streaming.
from robobopy_videostream.RoboboVideo import RoboboVideo
from robobopy.Robobo import Robobo
videoStream = RoboboVideo("192.168.1.58")
rob = Robobo("192.168.1.58")
rob.connect()
rob.stopCamera()7. Método startStream
| startStream() |
|
Inicia el streaming de la cámara. El streaming de la cámara está parado por defecto. Este cambio es persistente. Advertencia: Para usar correctamente esta función, es necesario descargar la librería de stream de vídeo, como se explica en la introducción de este apartado. |
Ejemplo de Uso
En este ejemplo, se activa la cámara haciendo uso de las librerías OpenCV y se muestra lo que el robot está viendo en tiempo real. Para parar el streaming basta con pulsar la tecla ‘q’ en cualquier momento.
from robobopy_videostream.RoboboVideo import RoboboVideo
from robobopy.Robobo import Robobo
import cv2
videoStream = RoboboVideo("localhost")
rob = Robobo("localhost")
rob.connect()
rob.startStream()
def main():
print("Starting test app")
videoStream.connect()
print("Showing images")
stop = False
while not stop:
frame = videoStream.getImage()
cv2.imshow('Robobo camera', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
videoStream.disconnect()
cv2.destroyAllWindows()
stop = True
if __name__ == '__main__':
main()8. Método stopStream
| stopStream() |
|
Detiene el streaming de la cámara. El streaming de la cámara está parado por defecto. Este cambio es persistente. |
Ejemplo de Uso
En este ejemplo, partiendo del ejemplo anterior, se desactiva el streaming de la cámara.
from robobopy.Robobo import Robobo
rob = Robobo("localhost")
rob.connect()
rob.stopStream()