The Middlesex Robotic Platform (MIRTO), version 3

MIRTO (also known as Myrtle, or Mirto-bot) is a robotic platform developed at Middlesex University in the School of Science and Technology with the help of staff and students. It has been used in teaching since 2014 and it has been improved in a number of ways during the past two years. The current platform is used not only for teaching, but also for research. In this post I will describe the basic features, some of the applications that have been built on top of it, and the structure of the platform (both software and hardware).

Mirto bot, front view

Mirto, front view

The robot has:

  • Two HUB-ee wheels (with built-in quadrature encoders)
  • Two front bump sensors
  • A small LCD screen (5 lines, 21 characters per line)
  • Infra-red sensors mounted under the base layer (they can be used to follow lines)
  • A potentiometer and a push button
  • A Raspberry Pi layer with WiFi and several other connection points: 4 USB ports, audio output, HDMI output, Ethernet and the usual Raspberry Pi slots for a video camera.

The robot is powered by a standard, rechargeable 5 V battery pack.

Mirto: rear view with battery and Raspberry Pi connections

Mirto: rear view with battery and Raspberry Pi connections

Apart from the hardware characteristics, a substantial amount of effort has been devoted to the development of software to support several programming languages and several mechanisms of interaction with the robot. First year students employ the Racket programming language (a dialect of Lisp) to control the robot. This is an example of Racket code that can be uploaded to the Raspberry Pi and run form there:

(setMotors 180 180)
(setLCDMessage "Starting wheels" 0)
(sleep 1)

Alternatively, the robot can be controlled using Java or Python, which can be running either on the Raspberry Pi or on a machine on the same network of the robot, as shown in the following Java example that simulates a simplified Roomba robot:

JMirtoRobotOverTCP robot = new JMirtoRobotOverTCP();
robot.initialize(""); // Connect to a robot on the same network
while (true) {
  if (robot.isPressed(0) || robot.isPressed(1) || (robot.getIR(1)>250)) {
    // Do something if bump sensors pressed or IR reads a value > 250
    // Now rotate for a bit
    robot.setMotors(100, 100);
    robot.setMotors(150, -150);					

Recently, we have developed new blocks for the off-line version of Scratch that can be used to control the robot. The following image shows the new blocks and a Scratch program equivalent to the Java code shown above:

mirto-scratchThe following video shows the results of a program implemented by high school students using Scratch, whose task was to develop a program to keep the robot inside a square marked with black tape (detected by infra-red sensors). The students implemented a program similar to the one in the figure above, adding control of the LCD screen and sounds:

The key software components of Mirto are:

The details of the hardware components of the robot are:

  • A Raspberry Pi. We are currently using a Raspberry Pi 2 Model B (but we are investigating the use of a Raspberry Pi 3).
  • A Teensy 3.2 microcontroller. It has a 32 bit ARM processor, you can think of it as a small but powerful Arduino board with more input and output pins.
  • A bespoke PCB that allows the connection of the Teensy to the Raspberry Pi using the Pi’s GPIO pins and makes it easy to connect all the other components (wheels, bump and infra-red sensors, LCD screen, a piezo buzzer, a potentiometer and a push button)
  • The wheels are two HUB-ee wheels. These wheels have built-in quadrature encoders and can be easily controlled using PWM pins.
  • The perspex layers are cut at Middlesex using a laser cutter. The battery pack is just a standard 9000 mAh battery pack with two USB outputs.

Please feel free to contact me if you need additional details!


Leave a Reply

Your email address will not be published. Required fields are marked *

two + = 4

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>