Robot Skiing

Project Start: January 2015

Project End: May 2015

Presented at ICRA Humanoid Application Challenge, May 2015 in Seattle, USA

Won first place

Highlights of our research into small-scale humanoid robotic skiing.

This video was used during our presentation at the 2015 ICRA conference.


After the 2014 ICRA Humanoid Application Challenge was cancelled, the competition returned for the 2015 conference to be held in Seattle.

Ever since our success with the hockey project in 2012 the idea of trying other winter sports lingered in the back of my mind. I had already tried snowshoeing, but I felt that this was too similar to standard walking to be sufficiently novel for the competition.

However, alpine skiing was one of the winter sports I wanted to try that was novel (there have been some attempts at alpine skiing robots, but all are large-scale and use complex sensors), had complex challenges (balancing on uneven terrain, control and release of stored energy, low-contrast environment for vision), and was visually-appealing.

Making the Skis

Jennifer posing with her skis

Jennifer posing with her skis

With the project settled on, my father and I once again descended into his workshop to build robot-sized skis and poles.

The skis were made by steam-bending lengths of wood to form the curved tips, with final shaping done by hand on a bandsaw. We drilled and counter-sunk holes in the bottom of the skis so that we could screw them directly to the robot's feet; the skis do not have a free-heel binding like those used for cross-country or telemark skiing. Finally we treated the skis with wax, just as one would a real wooden ski.

The poles were a similarly simple construction; a length of dowel was sharpened to a point using a pencil sharpener, with a large-diameter disc affixed just above the point to form the snow basket.


Given its superficial similarity to walking and skating, we chose to tackle cross-country skiing first. We used the same basic walking gait that we use for HuroCup and RoboCup (and indeed for our skating gait as well), only with the stride height lowered and the stride length and period dramatically increased. The result was a long, fluid motion that mimicked traditional cross-country skiing fairly well.

A comparison of walking, skating, and skiing gaits

The biggest challenge with the cross-country skiing was controlling the robot's balance; because snow compacts unevenly underfoot the robot was constantly losing its balance. The small size of the robot meant that small changes in terrain elevation (just a few cm) were enough to topple the robot over. However, by adapting the PID controllers developed for the bongo board to work in three dimensions we were able to improve the robot's balance. (More on this below.)

However, on hard, icy snow, the robot could cross-country ski very well without the need for any additional active balancing, as this early video shows:

Our early attempts at cross-country skiing on hard snow

Alpine Skiing

Alpine skiing (aka downhill skiing) was the primary focus of this research. While cross-country served as a small introduction, the majority of our efforts were on allowing the robot to

  1. ski down a hill without falling over,
  2. demonstrate simple steering, and
  3. autonomously navigate a simple obstacle course using vision

As with the hockey project, we started with small, static tests; equip the robot with skis, design a fixed pose to test gliding/steering/braking, go to a nearby hill, push the robot down said hill, and see what happens. Conveniently there was a decorative embankment with a steep incline just outside E2-EITC, the building on campus in which our lab was located. Packing up the robot, some spare batteries, and my laptop, we ventured out into the snow and tested out whether the robot's skis could glide downhill, and whether or not they could provide enough surface area along the edges to allow the robot to carve left/right and brake.

Our keyframe tests proved successful. With time running out to get our entry submitted for the competition, we braved the cold once more to film our progress so far. Our official submission video, showing cross-country skiing on different kinds of snow and alpine skiing using static keyframes is below.

Our qualification video for the 2015 ICRA Humanoid Application Challenge

The apline skiing portions of this video used static keyframes

With our competition entry locked in, work continued on improving the robot's alpine skiing algorithms. We quicky identified balance as the key concern; if the robot cannot stay upright on its skis it cannot hope to steer, let alone navigate around obstacles.

Based on my thesis research on active balancing on dynamic terrain -- which by this point was essentially complete and I was into the final revisions of my thesis -- I developed a three-dimensional version of the PID controller we used at the 2013 ICRA challenge.

Left inclination Flat inclination Right inclination

Frontal views of the robot showing compensation for lateral inclination

Shallow inclination Normal inclination Steep inclination

Side views of the robot showing compensation for different hill inclinations

The new system used two independent PID systems; one to control the robot's pitch, and a second to control the robot's roll. By using lower P and D gains (and an I gain of zero) we were able to develop a system that would allow the robot to smoothly adjust its pose based on the inclination of the hill (i.e. leaning back more on steeper portions, standing straighter on flatter portions), as well as react to sudden disturbances.

Demonstration of the active balancing techniques

Vision-Based Steering

With the balancing problem largely tackled, our last obstacle -- pun marginally intended -- was to integrate some kind of reactive, vision-based steering to let the robot navigate around mock slalom gates.

Because of the small size of our hills -- Manitoba is notoriously flat, being on the prairies -- we opted to create a very simple obstacle course. A designated skiing area would be marked with pink markers on one side and blue markers on the other. The robot must stay between those markers, similar to a giant slalom.

Based on our obstacle course software for HuroCup, I implemented another PID system to control the robot's steering left and right. For every pink marker in sight the robot would turn to the left an amount proportional to the distance from the right edge of the frame (i.e. an object on the right edge would result in minimal turning, but an object on the left edge would result in maximal turning). Similarly, for every blue marker the robot would turn right an amount proportionl to the object's distance from the left edge:

\[ \begin{array}{l} B \mbox{: the set of blue markers currently visible} \\ P \mbox{: the set of pink markers currently visible} \\ l(m) \mbox{: the distance from the left frame edge to the marker $m$} \\ r(m) \mbox{: the distance from the right frame edge to the marker $m$} \\ h(m) \mbox{: the distance from the bottom of the frame to the marker $m$} \\ k \mbox{: the turning constant} \\ turnR_{i} = -kl(b_i)\frac{1}{h(b_i)} \forall b_i \in B \\ turnL_{i} = kr(p_i)\frac{1}{h(p_i)} \forall p_i \in P \\ T = \sum{turnR} + \sum{turnL} \\ \epsilon = turn - t \\ turn' = k_p\epsilon + k_i\int{\epsilon}d\epsilon + k_d\frac{d\epsilon}{dt} \end{array} \]

By using a minimal D-gain and a modest P-gain (our I-gain was set to zero) we were able to develop a system that could smoothly adjust the robot's turn as markers moved in and out of its field of view.

The actual turn was performed by using the robot's inverse-kinematic (IK) modules for the arms and legs to enter a "steering stance." When turning the skis are angled such that the edges along the inside of the turn are lower, digging into the snow. The robot shifts its entire CoM over to the inside of the turn, extending the outward arm for balance. Finally, the outward arm is rotated such that the pole does not drag in the snow.

Left turn Straight Right turn

From left: left turn stance, straight stance, right turn stance

This use of simple PID controllers for controlling the robot's pitch, roll, and steering is -- to our knowledge -- a novel development in the world on autonomous skiing humanoids. Despite the simplicity of the algorithms involved, the results proved to be a robust system for navigating simple obstacle courses when alpine skiing.

ICRA Presentation

With the snow long-gone (well, not so long; we had a late flurry in April, but it melted quickly) we packed up our robot and equipment and flew to Seattle for ICRA.

Our presentation did well; we did a combination live demo and video, since it was impossible to show actual alpine skiing indoors, in May, in Seattle for all the reasons you expect.

The judging this year was slightly different that the 2012 and 2013 competitions. There was no panel of judges in Seattle; the entries were scored entirely based on peer review from the other competitors.

As with previous years, there was a good variety of entries, including (among others) our control-theory focused skiing, to the use of a robot as an autonomous actor (complete with a live skit of "Indiana Darwin" -- I have video of that, I just need to upload it), and a cloud-based robotic testing suite where users can upload their code to a remote robot and watch it perform in real-time.

In the end however, there can be only one winner, and for the second time in four years UofM finished on top. From a personal perspective, this was my last robotics competition before graduating, so I was very happy to finish on a high note.

Related and Future Work

As with our hockey project, work never technically ended on the skiing. Eventually we'd like to adapt our small-scale algorithms for use on a larger robot. Such work has not been done yet, but as new students come to the lab one of them may take up the challenge

This work is very closely tied to my own thesis research on active balancing, and the afore-mentioned hockey project.

Jennifer skiing

Jennifer on the slopes

(Image from Winnipeg Free Press)


External Articles