Display an image from the robot
This tutorial will explain how to display an image from the Nao camera on your local computer, which you have already done inGetting started with the Nao robot. Before going through this tutorial, you should have the following set up:
Redis is running on your laptop
You have SIC installed locally in a virtual environment
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
from sic_framework.devices.common_naoqi.naoqi_camera import NaoqiCameraConf
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 use 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.0", top_camera_conf=conf)
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.
while True:
img = imgs.get()
cv2.imshow("", img[..., ::-1]) # cv2 is BGR instead of RGB
cv2.waitKey(1)
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: 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.