Introduction: Brzydal - the Social Robot

The goal of the project is to investigate uncanny valley hypothesis (cognitive robotics) and other social interaction of robots. Hypothesis of uncanny valley said that robots that are similar to humans could cause a response of revulsion among some observers. For example you can see video: Ode to uncanny valley.

Brzydal is the robotic head with a face displayed on screen. Robot can move his head in two planes using three servomotors. Robot-Human interface will be based on speaker and camera, so robot can locate human face and talk to him.

Table of Contents:

  • Step 1: General architecture
  • Step 2: Pre-evaluation video
  • Steps 3 - 22: Mechanical part of the project
  • Step 23. ZYBO Preparation
  • Step 24. Installation of a system
  • Steps 25 - 28. Implementation part of a project
  • Steps 29 - 30. Cognitive science research


This project is still under construction. We will update progress in short time!

If you have questions, feel free to ask in the comments!

Step 1: General Architecture

Brzydal is controlled by Zybo Zynq™-7000 Development Board with installed Xillinux - a Linux distribution for ZyBo.

Brzydal will get information about human from camera image. Image processing will be implemented on FPGA part of ZYBO Development Board. Based on image processing data Brzydal will act accordingly to situation by moving and displaying proper face expression on LCD screen. Servomotors controller is already implemented on FPGA part. ARM part of ZYBO is responsible for displaying different face animation on LCD screen.

That system creates closed feedback loop, which will allow us to measure human emotions in contact with different face.

Step 2: Presentation (video)

Pre-evaluation video presents project evolution and Brzydal's main functionalities.

Video is also accesible on Youtube:

Step 3: Mechanical Materials

    List of mechanical materials:

  • plexi glass (195 x 510 x 5) mm
  • threaded rod 8 mm
  • threaded rod 4 mm
  • 12 screws 2.5 mm x 25 mm
  • 12 nats 2.5 mm
  • 4 screws 3 mm x 20 mm
  • 4 nats 3 mm
  • 4 screws 4 mm x 20 mm
  • 20 nuts 4 mm
  • 6 screws 8mm x 25 mm
  • 30 nats 8 mm
  • felt polishing wheel

Step 4: Electronic Devices

    List of electronic devices:

  • Zybo Zynq™-7000 Development Board

  • AC adaptor

  • 8 GB SD card
  • OV7670 camera module
  • 7' lcd 800x480px display with HDMI
  • 3* MG996 servomotors
  • HDMI cable
  • mikro-USB cable
  • Ethernet cable

Step 5: Tools

    Needed tools:

    • screwdriver
    • sandpaper
    • hacksaw
    • file
    • drill

    Step 6: Model

    Mechanical part of robot was designed in Autodesk Inventor 2015. Pictures present render of the project.

    You can find it in file.

    Step 7: Preparing Parts From Plexi

    You need to use laser cutting plotter to cut parts from plexiglass. There are a lot of places where you can made it. This is cheap and fast metod. Only you need to take is file: Brzydal_cut.dwg. In the picture you can see cuted parts.

    Step 8: Cuting Threaded Rods

    You need to cut three 20 cm rods with diameter 8 mm and four 6 cm rods with diameter 4 mm. During cuting be careful and don't damage screw. It must be possible to put a nut on it.

    Step 9: Creating Support

    Take six 8 mm screws and a nut on each. Follow the picture and twist them together with the border circle.

    Step 10: Mounting Rods

    Take 20cm x 8mm rods and put one nut on the end of each. Put them in three holes in center of support circle. Screw them together on with another nut. Ready element should look like the picture above.

    Step 11: Mounting Servo Support

    Take other three nuts and put them on the top of each rod (about 1.5 cm from the end). Then put servo support (small circle) on it. By moving nuts, level it up. Then screw it on with another three nuts.

    Step 12: Mounting First Servo

    Put servo into the hole. If the hole is to small broaden it with sandpaper. Then take four 4mm x 20 mm screws and nuts and screw servo on.

    Step 13: Create a Friction Bearing

    Take felt polishing wheel and cut from it a support similar to this showed on the photos. It will work as a friction bearing between face support and servo support.

    Then put it on the servo support.

    Step 14: Grind Servos

    Take the other two servos and grind their assembly pads (like in the picture).

    Step 15: Mounting Servo to Face Support

    Take next servo and grind one of side taps. Then put servo in mounting hole like on the first photo. Then take two 4 mm rods. Put the nut on one side of each.

    Then mount small servo handle an screw it on. Ready servo is show on second photo.

    Finally make the same with second servo.

    Step 16: Enlarge Holes

    Enlarge four hols in each of three servo arms to diameter about 2.5 mm

    Step 17: Mount Servo Arm to Face Support

    Take four 2.5 mm screws and attach servo arm to face support.

    Step 18: Attach Servo Arms to Face Holder

    Take other servo arms and attach them to face holder with 2.5 mm screws (that's why you need to enlarge holes). Ready parts are shown in the picture.

    Step 19: Mounting Display to Face

    The bigest part cut from plexi is face. Take display and attach it to face by four 3 mm screws.

    Step 20: Attach Face Support and Holders

    Center first servo and mount face support on it. Then screw it on.

    Step 21: Glue Face to Face Holder

    Last step of creating mechanical part of the project is to glue the face to face holder. Ready robot is presented on pictures

    Step 22: Mount HDMI Cable

    Then attach HDMI cable to dispaly. If a plug is to big you can file it off a little.

    Step 23: Preparing Zybo for First Run

    Make sure that jumpers on your Zybo board are in the same position like in the picture. Then connect Ethernet and AC-adapter.

    After securing connections you can connect camera, HDMI cable and servo contollers to ZYBO.

    Step 24: Prepare SD Card

    For easier installation we prepared an image of SD card. You only have to write it to 8 GB SD card.

    If you are not interested about implementation of Brzydal you could skip next few steps (with "How it work" preambule).

    Step 25: How It Work? Xillybus

    Xillybus is a bus that connect processors and FPGA parts of SoC (Syntem on the Chip).

    To install it follow the instructions in attached file.

    More information:

    Step 26: How It Work? Display Different Face

    Different faces are displayed using opencv. Program is written in opencv and you can find it on All code is commented, and for more information you can read repository Wiki.

    Instructions to install opencv is here: OpenCV Tutorial - Installation on Linux

    Step 27: How It Work? FPGA Servo Controller

    Servo controler was implemented as separate IP core in Vivado. We use Verilog language. Two registers store data about servo position. Counter is calculating current time. Comparators compare stored position with current time and generate PWM signal for servos. Pictures present general idea of controller and screen from real project in Vivado.

    Step 28: How It Work? FPGA Image Procesing

    (In progress)

    Step 29: Cognitive Research

    We have conducted research on group of people. Tested person had to watch presentations of four different faces (you can see them on photos) and then we gave them survey to evaluate emotions, that those faces aroused. We have used Semantism Differential method from recent publication: Walking in the uncanny valley: importance of the attractiveness on the acceptance of a robot as a working partner.

    Step 30: Data Analysis

    Semantic differential method is able to determine what emotions patient feel during test with different faces.

    More about semantic differential method (or Osgood method):

    Robotics Contest 2016

    Participated in the
    Robotics Contest 2016