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
Repositories:
- C++ code - https://github.com/KozikR/Brzydal
- Vivado Project - https://github.com/KozikR/Brzydal_FPGA
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: https://youtu.be/ft7fI0St6Bo
Step 3: 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
List of mechanical materials:
Step 4: 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
List of electronic devices:
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 mechanics.zip file.
Attachments
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.
Attachments
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: http://xillybus.com/
Attachments
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 https://github.com/KozikR/Brzydal. 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.
Attachments
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):