It has been a while since we blogged about our progress at RIKEN, but a lot has happened.
After spending several weeks experimenting with this robotic arm, we have come up with a considerably clear research focus (well, our supervisor came up with this idea): have the robot recreate drawings through various parameters such as the strength of the thumb grip, the strength of the wrist, randomizing pencil mark in the horizontal direction, and use MRI scanning to obtain data on what emotions can be evoked on people who are shown to these drawings. Our supervisor told us that this project intended to research how artists can unconsciously display his or her emotions in the artwork, thereby allowing us to better understand the human brain. For instance, when an artist is stressed or confused, he or she might, without even realizing it, put extra strength on the grip of the pen, altering some features of the drawing.
For the past two weeks, we have been developing drawing samples by randomizing the length of pencil marks in the horizontal direction, as an attempt to simulate the imprecision of an artist's brushstrokes when experiencing (we hypothesize) stress or anger. Why not in the vertical direction? We thought it would simply be too chaotic and the original contents of the drawing would be lost.
At first, we simply used the numpy.random function to randomize numbers within a range to add to our steps (each step representing a pixel is 100) and achieved the following results.
Though the drawings exhibited irregularities as the range got bigger, we realized that too much of the original content was lost. We, therefore, decided to employ normal distribution as an attempt to preserve the original content of the drawing. We found a function that seems to be able to truncate the normal distribution into restricting domains, which perfectly fitted what we wanted to do.
import matplotlib.pyplot as plt from scipy.stats import truncnorm import seaborn as sns import numpy as np array = truncnorm.rvs(a=-50, b=50, loc=0, scale=32.0, size=10000) sns.distplot(array) plt.show()
The code above generates an array of size 10000, which follows a normal distribution (see graph). "loc" represents the center of the graph while "scale" represents the standard deviation. "a" and "b" were set to be arbitrary. As you can see, the graph's domains are restricted. And we alter this restriction as our independent variable.
By doing this, the drawings are way more preserved while still displaying some interesting differences.
In addition to the drawings, our supervisor wanted to collect current data to include in the paper. He brought us an oscilloscope developed by Picotech to measure the current outputted by the controllers. As you can see in the image, the device was attached to the computer through a USB, while the GND was attached to the GND on the microcontrollers. Our supervisor explained that, while we set variables constant such as the grip strength of the index and thumb fingers during our experiments, the actual current outputted may still be different, and so that using such a device to measure the actual current is crucial to know the actual strength of the grip. However, the results weren't very clear. The graphs didn't display any fluctuations when we altered the grip strength. Our supervisor said that the torque of the motor was potentially not directly proportional to the amplitude of the wave and that the controller outputted much more intricate waves to control the motors.
If you look at the image above, then you would have noticed that the pen's tip is metallic. Previously, we have been using a pencil to produce the drawings, which would deteriorate over time quite quickly and was extremely hard to keep constant while conducting the experiments. We, therefore, decided to employ a metallic pen, from which, as the robot produces marks on paper, tiny amounts of metal are deposited onto the paper. So tiny that as if nothing has happened.
Glad you guys are doing this!
The flowers look pretty sick