This benchmarks aims at developing a computer program that controls a humanoid robot to walk as fast as possible on a 10-meter track. The programming language is Python and the humanoid robot model is an Aldebaran NAO robot.

t = 00:00:00

The benchmark metric is the time t spent by the robot to cover the 10-meter distance. The stopwatch starts as soon as the simulation starts. When the robot passes in front of the stopwatch, a sensor detects the presence of the robot and stops the timer. At this point, the time displayed on the stopwatch is recorded as the performance of the robot. If the robot falls down or tries to go on all fours, the robot is disqualified. Such a situation is detected if the vertical position of the center of its body falls below 20 cm.

How to make the NAO robot walk faster?

If you look at the Python program controlling the NAO robot, you will see that this program simply plays a motion file called forward.motion:


  def run(self):
      walk = Motion('forward.motion')
      walk.setLoop(True)
      walk.play()
      while True:
          if walk.getTime() == 1360:
              walk.setTime(360)
          if self.step(self.timeStep) == -1:
              break
          

The motion lasts 1360 milliseconds (1,36 seconds) and is divided in two parts: the first part lasts 360 ms and moves the robot from the initial position to the pose corresponding to the beginning of the walk cycle. The second part is the walk cycle which lasts 1000 ms and should be repeated forever. Therefore the controller will check when the motion is over (motion time reaches 1360 ms) and it will restart the walk cycle of the motion, i.e., it will reset the motion time to 360 ms, so that a new walk cycle is started. This will be repeated again and again, so that the robot will walk forever.

The motion file contains the joint positions (in radians) for each articulation of the legs which are used in the walking motion:

The forward.motion file can be opened in a spreadsheet program such a LibreOffice Calc or Excel, modified and saved again.

In order to further improve the walk speed, you can try to:

  • Further reduce the approach phase.
  • Change the time step of the motion file to make it faster (e.g., reduce the 40 milliseconds time step).
  • Modify the motion file values by hand.
  • Move the arms of the robot (in front to hit the finish sensor earlier or balancing to try to walk faster).
  • Create equations for each joint using the mathematical sinus function (or splines) that approximate the current trajectories. Then, you will be able to control each motor individually from the Python controller using your equations (you won't need the forward.motion file any more). Instead you will use directly the setPosition() method for each motor. This will allow you to fine tune the equations parameters to try to improve the motion.
  • Use the gyro and accelerometer of the robot to create a closed loop motion using advanced control techniques.
  • Use advanced research such as Zero Moment Point (ZMP), Central Pattern Generator (CPG), or Genetic Algorithms (GA) to create a faster walk.