This robot can identify terrain based on the vibrations it causes

You’ve probably noticed that your car feels different when driving on gravel, compared to what you’re used to on asphalt — even normal road asphalt can feel different than the concrete of a bridge. A lot of the feeling you detect is the result of the vibrations caused by that particular surface and the sounds they make. Dan Velarde took advantage of that to give a robot terrain-sensing capability with just an IMU and microphone.
The purpose of this system, called GRIP (Ground Recognition Intelligence Platform), is to help a robot achieve better traction and control across different terrains. Many cars also have that capability, though you normally have to manually select the terrain type. In this case, GRIP enables the robot to automatically sense if it is on a normal flat surface, snow, gravel, or grass. It can then adjust motor output to accommodate that terrain.

It does so by classifying vibrations in the chassis with an IMU (inertial measurement unit) and acoustic signatures with a microphone. An Arduino® UNO™ Q monitors the IMU data output and sound from the microphone, then determines the surface type.
That would be very difficult to program for explicitly, because there is a lot of data without clean and easily distinguished thresholds. But it is exactly the kind of thing machine learning excels at.
Velarde leveraged Edge Impulse to train and deploy the ML model. He recorded training data while driving over the different surface types, which tells the model what to expect from the IMU and microphone on each surface. Upon deployment, the model can match up what it sees from the sensors to the training data.
In testing, the accuracy varied from one surface to another. Snow was the most reliable, at 91.4% accuracy. Gravel was the least reliable at 73.8% — though that is still pretty decent.