Project tutorial
Wolf: Search and  Rescue Multi-Terrain Robot

Wolf: Search and Rescue Multi-Terrain Robot © MIT

Wolf is an IoT multi-terrain robot running on the Arduino 101 platform.

  • 49 respects

Components and supplies

Necessary tools and machines

3D Printer (generic)
09507 01
Soldering iron (generic)

Apps and online services

About this project

The concept of this robot design is to create a quadruped that can easily transform between walking mode and rover mode (aka wheel traversing). The walking mode will be used for operations that are not ideal for wheels such as scaling a vertical wall or traversing over extremely uneven terrain. The rover mode is used for flat terrain and faster traveling time. The robot is controlled wirelessly via Wifi through a web page that I made exclusively for this robot. Beside the transforming capabilities, I also added an IMU sensors, GPS, and Lidar for self-orientation and autonomous functionality.

In this project, the Arduino 101 is used as the muscle control cortex. The Arduino 101 do calculation and control all the servo on the robot and transmit and share this data with the Raspberry Pi 2. The Rapsberry Pi 2 on the other hand will focus on transmitting video to the webpages and broadcast sensor data to the cloud for analyzing.

All the data is logged via IBM Watson and Node Red services and can be easily review in graph format for data analytics.The goal of this project is to create a low-cost multi-terrain traversing robot prototype for search and rescue operation.

Video In Action

Rover Mode

Walking Mode

User Interface

IoT watson data analyst

Printed Parts

A) Body

  • 1x Body Plate Bottom
  • 1x Body Plate Top
  • 1x Front Shield
  • 2x Side Shield

B) Internal Parts

  • 1x Turnigy Battery Cover
  • 1x Pi Stand
  • 1x MPU Case

C) External Parts

  • 1x Motor Stand
  • 1x Lidar Stand
  • 1x Camera Base
  • 1x Camera Body
  • 1x Camera Top
  • 1x Camera Mount
  • 1x Camera Cover
  • 1x GPS Top
  • 1x GPS Bottom
  • D) Leg Module
  • 2x Leg
  • 2x Leg Reverse
  • 4x Wheel
  • 4x Motor Hub

Note : If you wanted you can also 3D printed the all the Servo bracket that I listed in the Bill of Materials if you don't want to buy them. I have makes 3D files for those part too. Look in the Servo Bracket folder. ( refer to Attachement for downloading)

Constructing the Leg

So for the leg of the robot, I will divide this section into 3 part as describe: coxa, femur, tibia.

Constructing the Leg : Coxa

First take 2 aluminum bracket and joined them together as shown in the first pictures. Make sure that the bracket is secure tightly and they do not move around.

  • Next, install a servo onto the bracket and secure them onto the bracket using 2 screws as shown in the third picture.

Constructing the Leg : Femur

  • Take two C Servo Bracket and connect them together with screws.
  • Then connect the newly make femur to the coxa as shown in the second picture. Remember not to forget to put in the ball bearing or the leg won't move smoothly.
  • Next, put in a servo on the empty bracket and secure it.

Constructing the Leg : Tibia

  • First, connect the motor to the wheel, just make sure that you already solder the 2 wires for powering before began this step.
  • Next, add the motor hub to the motor as shown in the second picture. In addition, you can also cover the wire with heating tubing to make the wiring more organized.
  • Then, added the entire section you just build onto the leg.
  • Make sure the motor is secured to the leg with a screw.
  • Take another servo bracket and connect it to the other end of the femur.
  • Attached a servo into the empty bracket and secured it with screws.
  • Then take the leg section that you just constructed and attached it to the lower leg.
  • Finally, an entire leg should be finished. Repeat this until you have constructed four legs.

Constructing the Body

  • Put the battery on the small square that is on the lower body
  • Make sure the face with protruding rectangle is facing down.
  • Need use the battery cover and put it on top of the battery. Secured this part using two screws
  • In addition, put 2 more standoff to the side with height to the top part of the battery
  • put the Raspberry Pi on top of the battery cover.
  • Secure the Pi onto the standoff and battery cover using around 3cm standoff.
  • Attached the Servo Stand on top of the raspberry Pi and secure it down onto the standoff with screws.
  • Then attached the Mini Maestro onto the Servo Stand piece.
  • Attached the Servo Stand on top of the raspberry Pi and secure it down onto the standoff with screws.
  • Then attached the Mini Maestro onto the Servo Stand piece.
  • Attached the two Side Shield on the along the two side of the robot
  • Attached the Front Shield onto the front side of the robot.
  • Attached the four leg onto each corner
  • Finally, put the Top Plate onto each shield and use screws to secure it
  • Put on the Anker battery as shown.
  • Next, place the motor driver on the on top of the Anker battery and secure it down to the two standoff as show.
  • Then placed the Arduino 101 on top of the motor driver and secure it with two standoff screws.
  • Put on the camera module and the GPS module.

Setting Up Nodejs

This part is to get the software for streaming and controlling the robot. Do the following step. Note, all the bold text are command line.

  • Getting Node.js . Type in the following command
  • sudo apt-get install node
  • node -v ( check node version, make sure that it is 0.12)
  • Next we going to get the necessary Node.js library. Type in these command in your Raspberry Pi 2
  • npm install serialport
  • npm install
  • npm install winston
  • npm install express
  • cd node_module
  • Now, we going to get the streaming software
  • sudo apt-get update
  • raspi-config
  • Choose Enabled Camera. It is Option 5
  • sudo apt-get install uv4l uv4l-raspicam
  • sudo apt-get install uv4l-webrtc
  • uv4l --driver raspicam --auto-video_nr --width 640 --height 480 --encoding h264 --framerate 20 --vflip yes --hflip yes (command to run the streaming software. Type in n your browser to test if the stream is working )
  • Loading the robot code from github.
  • cd Fenrir

Now you should have everything that allow you to run the Fenrir software on Rapsberry Pi 2. To start the software do this :

  • ./

Then put Raspberrypi.local:5000 on your browser to start control your robot.


Arduino 101 servo code Arduino

const int ServoNum = 12;

Servo legServo[ServoNum];
int servoPos[ServoNum];
int servoIndex;

int servoPin[ServoNum] = {23, 24, 25,
26, 27, 28,
29, 30, 31,
32, 33, 34};

void setup() {

servoIndex = 0;

// ================ Servos ==================
for (int i=0; i<ServoNum; i++){
servoPos[i] = 1500;

Serial.println(enter + to increment);
Serial.println(enter  to decrement);
Serial.println(enter n to proceed to next servo);
Serial.println(enter l to go back to last servo);


void loop(){

if ( Serial.available()) {
char ch =;

case +:
servoPos[servoIndex] += 3;
if(servoPos[servoIndex] >= 2350){
servoIndex = 2350;
Serial.println(You cant turn it up anymore (you might damage it!);

case -:
servoPos[servoIndex] -= 3;
if(servoPos[servoIndex] <= 650){
servoIndex = 650;
Serial.println(You cant turn it down anymore (you might damage it!);

case n:
if(++servoIndex >= 12){
servoIndex = 11;
Serial.println(we have reached last servo);
Serial.print(Switched to Pin );

case l:
if(servoIndex < 0){
servoIndex = 0;
Serial.println(we have reached first servo);
Serial.print(Switched to Pin );

Serial.println(Unknown Command );


coor GaitCalculate (){
//Calculate Gait positions

for (int LegIndex = 0; LegIndex < 4; LegIndex++){

if (GaitStep == GaitLegNr[LegIndex]) {
GaitPos[LegIndex].Y = -LegLiftHeight/2;
else if (GaitStep == GaitLegNr[LegIndex]+1) {
GaitPos[LegIndex].Z = 0;
GaitPos[LegIndex].Y = -LegLiftHeight;
else if (GaitStep == GaitLegNr[LegIndex]+2) {
GaitPos[LegIndex].Z = WalkLength/2;
GaitPos[LegIndex].Y = -LegLiftHeight/2;
else if (GaitStep == GaitLegNr[LegIndex]+3) {
GaitPos[LegIndex].Y = 0;
// move body forward
GaitPos[LegIndex].Z -= WalkLength/TLDivFactor;



//Advance to the next step
if (++GaitStep > StepsInGait)
GaitStep = 1;

Custom parts and enclosures



Wiring Schematics
Fzbrjhbix6g0u68 large rfdajuekuj


Similar projects you might like

Otto DIY+ Arduino Bluetooth Robot Easy to 3D Print

Project tutorial by Team Otto builders

  • 162 respects

MeArm Robot Arm - Your Robot - V1.0

Project tutorial by Benjamin Gray

  • 34 respects

VEPCRo - Vertical External Pole Climbing Robot

Project showcase by Pramod C Wickramasinghe

  • 30 respects

Make a BBot Robot Step by Step

Project tutorial by Team makersecrets

  • 5 respects

Tito - Arduino UNO 3D-printed robot

Project tutorial by Camilo Parra Palacio

  • 41 respects

OttoDIY Build Your Own Robot in One Hour!

Project tutorial by Camilo Parra Palacio

  • 296 respects
Add projectSign up / Login