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 inhttps://socialrobotics.atlassian.net/wiki/spaces/CBSR/pages/2183233537. 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.
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.