Image of Salamander, a spherical rolling robot, with a backdrop of a water fountain. Salamander Rolling Robot


Salamander is an amphibious rolling robot which is capable of travelling on land and water.

It is equipped with Bluetooth control, GPS position and speed tracking, and two wifi cameras facing forward and downward. It could be used for search-and-rescue missions and marine biology surveys. Check out the videos below to see it in action.


This project was initiated as part of an Engineering Design course project during my undergraduate studies in SUTD in 2015 where I worked with Stevanus Satria and Jia Wen Lee.

I developed Salamander’s wireless control and designed its flexible 3D-printed sleeve for enhanced land traction and water propulsion.


Wireless Control

I programmed the wireless Bluetooth control for Salamander on the Romeo V2 Board (Arduino Leonardo) microcontroller using Arduino software (C/C++) and the mobile controller on Android smartphones using MIT App Inventor.

Salamander uses a two-axis pendulum mechanism to move (Figure 1). It has a servo motor for steering left or right and a powertrain motor for moving forward or backward. These motors shift the center of mass of the robot to propel it to the intended direction.

Two diagrams of Salamander. The left diagram is a simplified illustration of the pendulum mechanism. The right diagram shows a 3D-rendering of the mechanism with models of the components.
Diagram and 3D rendering of Salamander’s two-axis pendulum mechanism

The controller app allows the user to first establish the Bluetooth connection with the robot and has a trackpad for controlling the robot’s movement (Figure 2).

The controls are more similar to a joystick. You start with holding on the center of the trackpad with your thumb (Figure 2). Dragging your thumb to the top half of the trackpad moves the robot forward. Dragging to the upper left or right moves the robot left or right respectively. Dragging to the bottom half of the trackpad moves the robot backward. The speed of the robot is directly proportional to how far you drag your thumb from the trackpad’s center.

Screenshot of the app controller. Top of the screen has 'Connect' button to establish the Bluetooth connection. The middle of the screen has a square grid with a single cross that divides the square into four equal quadrants.
App controller for Salamander

The controller app sends information for controlling the powertrain and servo motors as bytes (8-bit values from 0 to 255) via Bluetooth communication. Every time the trackpad controls are touched (Figure 3, under block function named “when Canvas1 Dragged”), the function “updateMotors” is constantly called (Figure 4) and 3 sequential byte numbers are sent:

  1. Byte value for powertrain motor (named as global motor). Value of 127 signals the robot to stop, 0 signals to move forward at maximum speed, 254 signals to move backward at maximum speed.
  2. Byte value for servo motor (named as global servo). Value of 127 signals for servo to be in default 90° position, 0 signals robot to move left and 254 signals robot to move right.
  3. Byte value to signal end of the motor update. Value was set as 255.
Screenshot of the block functions as shown in MIT AppInventor 2 interface.
Block functions in MIT AppInventor 2 for Salamander controller app: Bluetooth connection and trackpad (Canvas) functions
Screenshot of the updateMotors function as shown in MIT AppInventor 2 interface.
The updateMotors block function in MIT AppInventor 2

Salamander’s microcontroller was then programmed (Figure 5) to receive the bytes as serial data input (Serial1). Variable a stores the byte value for the powertrain motor and variable b stores the byte value for the servo motor. These values are mapped to control the powertain motor rotation direction (forward/backward) and speed, and the servo motor rotation angle (0° to 180°).

Screenshot of the Arduino IDE interface with the data reading function.
Snapshot of the Bluetooth serial data reading function in the Arduino code for Salamander

3D-Printed Sleeve

The Salamander robot required a sleeve to propel itself in water and act as a seal to prevent water from entering the gap between the hemispheres of it’s clear outer shell (Figure 6).

Image shows the 3D printed sleeve on the left and Salamander with just the clear outer shell on the right.
Salamander with clear outer shell and 3D-printed sleeve

I chose to use a flexible, stretchy and 3D-printable filament material called NinjaFlex for the sleeve. The initial sleeve design (Figure 7) was thicker, had more extended ridges and covered a smaller surface area of the robot. This design had a number of issues:

  • If the sleeve was too thick, it would be too difficult to stretch it around the robot.
  • The extended ridges are good for water propulsion but not so much for land movement and further adds to the sleeve thickness.
  • If the surface area covered was too small and the thickness of the sleeve too large, the sleeve would be too bulky and cause the robot to tilt to and stay on the side.
3d rendering of Salamander with the initial sleeve design.
Initial 3D rendering of the sleeve

Given these issues, I designed, printed and tested several iterations of the sleeve. The final design (Figure 8, right sleeve) had a thickness of 0.75 mm, ridge length of 1 mm and width of about 10 cm such that it did not obstruct the camera views.

Image of two iterations of the sleeve on a desk.
3D-printed sleeves. Sleeve on the right shows the final design.
Image of Salamander floating on water.
Salamander robot in the water with the 3D-printed sleeve


Salamander’s design was published and presented in the IRC Conference on Science, Engineering and Technology (IRC-SET 2015).

The Salamander project was demonstrated in Europe Maker Faire 2015 in Rome (view slides) and featured on Discovery Channel Canada (first video at the top).