Artist residency: Êtres et Numérique

From February the 25th to march the 4th, Poppy and me are involved in an artists residency on the theme of motion. Artists are Amandine Braconier (Plastics), Marie-Aline Villard (Dance) and Jean-Marc Weber (electroacoustic composer).

The residence takes place in the beautiful chapel of the technical high school Sainte Famille Saintonge:

This residence is really important for the poppy project: it is the first trial of a real artistic application with Poppy. It is both really interesting for artists involved because they have access to a whole new expressive tool, and for us, because we see Poppy in new situations, raising new potential applications and bugs ^^

At the end of the residency, a public exhibit will take place. It will be tuesday the 4th, from 8 to 10pm in the high school’s chapel: 12 rue de saintonge, 33000 Bordeaux.

Here is the flyer of the event:

I will use this topic to share what happens in the residency.

1 Like

DAY #1:

###Mask experiments and flyer realisation:

1 Like

#DAY #2
###Playing with pigments

It was the first time we have completely dressed Poppy:

It was the occasion to learn that Poppy dresses up in 4 years ^^

We totally cover Poppy with clothing because … we played with pigment !:

4 Likes

#Day #3
Today was a busy day, we made our first sound trials with Jean-Marc Weber, both with the dancer (Marie-Aline) and Poppy:

Jean-Marc creates sounds from video inputs. He uses camera and kinect to detect people in a room or motion of their skeleton. Based on that input, he associates some sounds or some effects on particular motion or space positions. To avoid brouhaha that could be created by excessive mixing of sounds, he has developed a probabilistic composer which can mix input information to play several kind of music.

###Here you can have a small preview:

The movement are just played from a physical demonstration I made before, it works really well but when I saw this first attempt, I immediately thought it would be great to let the robot explore by curiosity the sounds it can produce. I discussed with Jean-Marc about this idea and if some of you want to participate to this residency and are interested, we still have time to do it until tuesday! It would be way more interesting for the Flowers Team to show our curiosity driven exploration algorithms and this experiment is a great application of our work.

###Beta test note:
Also, the strong interaction between Poppy and the dancer showed it was really complicated, when the robot is compliant, to avoid motors to go on their dead-band. In addition, wires tend to tangling around motors, which eventually unplug some…
To try to avoid this, I worked on a new primitive I called SmartCompliant which let motors compliant but turn them rigid when approaching the limits. It is working quite well, yet it is a bit complicated to tune correctly to have a really smooth behaviour. Promising but it needs further work to reach a satisfying behaviour. If you want to contribute to the code (still at the prototype stage), here is the associated commit:

https://github.com/poppy-project/poppy-software/commit/500954737bb557ec06f41ca3c7f3d2f0154c327f

I also took notes of a lot of small improvements that would make the use and understanding of the robot much easier by artists. I will take time after the residency to list and explain them.

#Day #4

The previous evening, we had a problem with Poppy. We were not able anymore to communicate with the leg motors:

    512             except ValueError:
    513                 msg = 'could not parse received data {}'.format(map(ord, data))
--> 514                 raise DxlCommunicationError(self, msg, instruction_packet)
    515 
    516             logger.debug('Receiving %s', status_packet,

DxlCommunicationError: could not parse received data [0] after sending DxlPingPacket(id=0)

One of our USB2AX dongle was gone. After some investigation, I have found a damaged cable between r_hip_x and r_hip_z motors. The 12V and Data lines were unsheathed and I think there was a short circuit. I contacted Nicolas Saugnier (creator of these dongles), he told me that USB2AX v3.1 were protected to this kind of short-circuit but not the v3.0. The dead USB2AX was indeed a v3.0.

I went back to Inria for advanced repairs. It appeared that this short circuit had also ruined 2 motors: l_hip_x and r_knee_y…

During my trip to inria, 3 people ( @Steve, @omangin and Clement) decided to join the residency to work on the curiosity driven exploration algorithm I explained in my previous post. So a parallel scientific hackaton emerged from the first test days:

For my case, I continued to work with the dancer, we spent the day working on the design of a choreography involving Poppy on the floor:

However even after repairs, I had still erratical troubles to communicate with the robot:

  File "c:\users\poppy\documents\pypot\pypot\dynamixel\io.py", line 494, in __re
al_send
    nbytes = self._serial.write(data)
  File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 270, in write

    raise writeTimeoutError
SerialTimeoutException: Write timeout

I think, it is a problem with one of the motor which has been damaged by the short circuit but not enough to be broken. So it is really difficult to find and replace it. In the evening, the problem was more and more present so I decided to exchange working parts between our 2 Poppy:

And we finally managed to finish our work on the choreography at 3am …

###Note
Today we lost a lot of time and energy caused (supposed) by a short circuit. Also, it ruined at least 2 motors and probably damaged few more …
For the Poppy I version, we will have to think about this problem and try to protect, as much as possible, the wires.

#Day #5

Jean Marc Weber had the idea to try the Leap Motion with Poppy and it works! Its hands are very well detected. So now we are thinking to let Poppy play music by moving its hands above a leap motion instead of the kinect.

Amandine Braconier (Plastic artist) wanted to make an experiment with a little child (3 years). In this experiment, the child can modify the robot by adding clay on it. To protect Poppy, we wrapped it with cellophane:

During this experiment, Poppy was doing small motion with its arms and head. At the first time, this little boy was not really interested by the robot but after 30min, he began to add clay on Poppy:

This experiment last about 2h and the clay is really heavy. The little boy added almost 10kg on Poppy !
Finally, two motor have melted (abs_x and r_hip_x) …

###Note
It appears it is difficult for non-expert user to evaluate the actual resistance of Poppy. For them, It is really needed to add security system raising alerts when the robot is in a dangerous state. Otherwise they will break regularly motors without understanding why.

Wednesday, Claire Sémavoine came with her camera to make an informational video about the residency. This film was for C-YourMag a webmagazine of Cap Science.

If you want to make fun of me, here is the video: :smiley:

#Day #6

I created a primitive to play the first sequence of the interaction between Poppy and the dancer.
https://github.com/poppy-project/poppy-software/commit/58d5ad64e93ed857f6412a1ebfb78a7c904a7f6b

And for creating spasmes (i.e. compliant/rigid behavior) on demand.
https://github.com/poppy-project/poppy-software/commit/eb7d424406b05ed0c0de56545d847bcbd8622d71

Also, while I was repairing Poppy from its previous misadventure, Marie-Aline Villard and Amandine Braconier were continuing their work on the mark of the mouvement with pigments:

After changing 3 motors and rethink the wire connections Poppy was ready for a new day of experiment:

#Day #7

Development:

After some extra works, I managed to have a very effective behaviour for the smart_compliance. It was just necessary to compute correctly the angle limit of the motors:


class SmartCompliance(pypot.primitive.LoopPrimitive):
    def __init__(self, poppy_robot, motor_list, freq=50, ):
        pypot.primitive.LoopPrimitive.__init__(self,poppy_robot, freq)

        self.poppy_robot = poppy_robot
        self.motor_list = [self.get_mockup_motor(m) for m in motor_list]

        self.compute_angle_limit()

    def update(self):
        for i, m in enumerate(self.motor_list):
            angle_limit = self.angles[i]
            if (min(angle_limit) > m.present_position) or (m.present_position > max(angle_limit)):
                m.compliant = False
            else:
                m.compliant = True

    def compute_angle_limit(self):
        self.angles = []
        for m in self.motor_list:
            ang = numpy.asarray(m.angle_limit) if m.direct else -1 * numpy.asarray(m.angle_limit)
            ang = ang - m.offset
            self.angles.append(ang)

I also had a management of the torque_limit to avoid the augmentation of the motors temperature. We do not care a lot about the precision of the motion, so we can reduce the torque if we are close to the target:


TORQUE_MIN = 20
TORQUE_MAX = 95
MAX_ERROR = 10

class ProtectPoppy(pypot.primitive.LoopPrimitive):
    def __init__(self, poppy_robot, freq=20):
        pypot.primitive.LoopPrimitive.__init__(self, poppy_robot, freq)
        self.poppy_robot = poppy_robot

    def update(self):
        for m in self.poppy_robot.motors:
            self.adjust_torque(m)

    def adjust_torque(self, motor):
        target = motor.goal_position
        pos = motor.present_position
        dist = abs(target - pos)

        if dist > MAX_ERROR:
            motor.torque_limit = TORQUE_MAX
        else:
            motor.torque_limit = TORQUE_MIN + dist/MAX_ERROR * (TORQUE_MAX - TORQUE_MIN)

    def teardown(self):
        for m in self.poppy_robot.motors:
            m.torque_limit = TORQUE_MAX

The applied torque is limite is linearly tuned in function of the error. Thanks to this primitive, I managed to keep temperature below 40°C for all motors.

Experimentation:

After several minutes of intense physical interaction between Poppy and Marie Aline, testing the smart compliance features, she managed to break the fixation between the leg and the r_hip_z motor:

This problem is due to lack of compatibility between some Robotis part. Fortunately, we have already replaced this robotis part by a printed one in the current open source distribution so it should not be a problem for other people.

In our case, it was just 10min of repair, just the time needed to change some screws.

We continued all the day working on the choregraphy and the music with Jean Marc Weber and Marie-Aline:

And we began to create arms motions to be interfaced with the leap motion. Marie-Aline did the choreography of left arm and I did the right one.

We finally managed to run for the first time the whole representation! This first trial took 50 min, way more than the 15-20min targeted yet it was really promising.

Unfortunately, we were not able to do a second trial, the communication problem raised up again. It was impossible to make the robot works again. I was not able to ping any motor on the upper body communication bus. One USB2AX was broken, but even change it, was not effective. The problem was specific to the motors in the upper body.

Later in the evening, I have found a damaged wire connecting the 2 motors of the left shoulder:

However, it was only the 12V wire, so it should not cause such communication problem…

#Day #8

Thanks to the help of @Fdepraetre and @Alexandre, we managed to have the two Poppy repaired and ready in morning. Thus we will have a security if the communication problem arrived during the representation.

During our repair, the artists installed the canvas in the chapel:

The afternoon was reserved to a workshop with several students of the high school. There was a “master class” meaning we suggest to student to participate to our residency by doing the same experiments. So they had the chance to “dance” in front of the Jean-Marc Weber system and produce composed sound with their body mouvements but also programming Poppy for both producing leap motion sound and creating some ground choreography.

Then we were free to work on the last adjustments of the dance performance:

Here two videos, took by Nicolas Clement, showing the choreography created by Marie Aline:

There was no problem with Poppy, everything worked really fine. We were able to do the representation 4 times in a row, allowing the adjustment of everything needed for the next day.

1 Like

D-Day

During the night, I have prepared a python module with all pypot primitives needed to perform the dance choreography:

https://github.com/poppy-project/poppy-software/blob/artist_residence_etres_et_numerique/etres-et-numerique/scenography.py

and an ipython notebook to control the switch between the different scenes during the representation:

https://github.com/poppy-project/poppy-software/blob/artist_residence_etres_et_numerique/etres-et-numerique/representation.ipynb

@Pierre came to help me resolve the last bugs I had and we performed again 3 times in a row the full choreography with Marie Aline Villard and Jean Marc Weber. Again no problems occurred with our Poppy. Everything was ready for the evening representation ? It seemed to be the case.

2 Likes

All that experimentation sounds to have be greats for many improvements.
About the https://grabcad.com/library/poppy-beta-2/files/rapid_prototyping/Connector%20HN07-N101_FR05-S101.SLDPRT# This printed part is more strong than the robotis one?
About the 12V wire, maybe it should be fine to use something like https://www.titeflex.com/fr/industrial/products/PTFE/index.html

The performance

Poppy was waiting to begin its first art performance in front of a hundred of people.

We managed to do the performance 4 times in a row, Poppy was great and no communication problems occurred during the evening.
A video will be soon available.

Claire Sémavoine came back to took a second video of our residency, she shot the whole performance and interviewed @oudeyer:

1 Like

And the TV7 report “modes d’emplois” special art and science.
http://www.tv7.com/economie/modes-d-emplois,b4e9cedaf94s

A teaser has been made by Amandine Braconier: