Display an image from the robot

This tutorial will show you how to display an image from the Nao camera on your local computer.

Follow https://socialrobotics.atlassian.net/wiki/spaces/CBSR/pages/2183233537. You should now have the following set up:

  1. Redis is running on your laptop and you have SIC installed locally

  2. SIC is running on the Nao

Approach

First, let’s create a new file called demo_nao_camera.py.

We first import some libraries and the CompressedImageMessage and Nao object.

import queue import cv2 from sic_framework.core.message_python2 import CompressedImageMessage from sic_framework.devices import Nao

Then, we make a queue and callback function to put the received images in this queue object.

imgs = queue.Queue() def on_image(image_message: CompressedImageMessage): # we could cv2.imshow here, but that does not work on Mac OSX imgs.put(image_message.image)

We then connect with the Nao robot and register the callback function to its top_camera sensor.

nao = Nao(ip="192.168.0.210") nao.top_camera.register_callback(on_image)

Now, the queue will be filled every time there is a new image available from the Nao’s top camera. So, we can write a while loop to show these images as soon as they arrive.

 

That’s it! If you now run demo_nao_camera.py, you will receive images from the Nao, put them in a queue, and continuously show the images from this queue. The full code can be found here: https://bitbucket.org/socialroboticshub/framework/src/master/sic_framework/tests/demo_nao_camera.py.

Here is the schematic overview of how this program. The camera sends a “stream” of output messages that are received by your computer program.