Previous: [Learning Computing with Robots](Learning Computing with Robots.ipynb) Next: [Chapter 2](Chapter 2.ipynb)

# 1: The World of Robots¶

Mars Rover. Photo courtesy of NASA/JPL-Caltech

I wouldn't ever want them to be brought back to Earth. We built them for Mars, and Mars is where they should stay. But Spirit and Opportunity have become more than just machines to me. The rovers are our surrogates, our robotic precursors to a world that, as humans, we're still not quite ready to visit.

Steve Squyres in Roving Mars, Hyperion, 2005.

The rim of Victoria Crater on Mars. The rover Opportunity has been superimposed on the crater rim to show scale. Photo courtesy of JPL/NASA/Cornell University, October, 2006.

The picture above is among one of thousands sent back by Spirit and Opportunity from the surface of Mars. It goes without saying that it will probably be several years, decades or even more, before a human ever sets foot on Mars. The rovers Spirit and Opportunity landed on Mars in January 2004 as robot geologists whose mission was to analyze rocks and soils of the red planet in search for clues to past presence of water on the planet. The two robots were expected to last about 90 days. Years later, they were still exploring the planet's surface and sending invaluable geological and pictorial data from the planet. Only in the spring of 2011 did NASA suspend operations on Spirit but its twin, Opportunity, is still continuing to explore the planet while NASA is getting ready to send another rover, Curiosity, to explore Mars.

Back on Earth, the same month as the rovers landing on Mars, the Tumbleweed robot rover traveled 40 miles across Antarctica’s polar plateau transmitting local meteorological data back to its base station via satellite. Besides surviving adverse conditions on Mars and Antarctica, robots are slowly becoming household consumer items. Take for instance, the Roomba from iRobot Corporation. Introduced in 2002, more than 6 million Roombas have been sold to vacuum and clean floors.

## What is a robot?¶

The Merriam-Webster Online Dictionary gives the following definitions of the word robot:

1. a machine that looks like a human being and performs various complex acts (as walking or talking) of a human being; also a similar but fictional machine whose lack of capacity for human emotions is often emphasized; and also an efficient insensitive person who functions automatically
2. a device that automatically performs complicated often repetitive tasks
3. a mechanism guided by automatic controls

In today's world, the first two definitions will probably be considered archaic (the third interpretation in the first definition notwithstanding). Robots were originally conceived as human-like entities, real or fictional, devoid of emotions, that performed tasks that were repetitive or full or drudgery. Today's robots come in all kinds of shapes and sizes and take on all kinds of tasks (see below for some examples). While many robots are put to use for repetitive or dull tasks (including the Roomba; unless you enjoy the therapeutic side effects of vacuuming :-), robots today are capable of doing a lot more than implied by the first two definitions above. Even in fictional robots the lack of emotional capacity seems to have been overcome (see for instance Steven Spielberg’s movie, Artificial Intelligence). For our purposes, the third definition is more abstract and perhaps more appropriate. A robot is a mechanism or an artificial entity that can be guided by automatic controls. The last part of the definition, guided by automatic controls, is what we will focus on in this course. That is, given a mechanism capable of such guidance, what is involved in creating its controls?

"I want a Roomba to vacuum my floors, Scooba to wash my floors, Verro to clean my pool, Looj to clean my gutters."

From www.irobot.com web site, 2011.

### A Short History of Robots¶

Modern robots were initially conceived as industrial robots designed to assist in automated manufacturing tasks. The first commercial robot company, Unimation, was created nearly 50 years ago. As the use of robots in industrial manufacturing grew, people also started experimenting with other uses of robots. Earlier industrial robots were mainly large arms that were attached to a fixed base. However, with the development of mobile robots people started to find uses for them in other domains. For instance, in exploring hazardous environments ranging from radioactive sites, volcanoes, finding and destroying mines, military surveillance, etc. We started this chapter by introducing you to two Mars rover robots. The first ever planetary rover landed on Mars in 1997. Increasingly in the last decade or so robots have ventured into newer and more exciting areas like medicine (Google: robotic surgery, robot wheelchair, etc.), toys and entertainment (Google: Pleo, SONY Aibo, LEGO Mindstorms, etc.), and even education (Google: IPRE). Some of the most exciting developments in robotics are still in research stages where, for example, in Artificial Intelligence research people are trying to develop intelligent robots and also using robots to understand and explore models of human intelligence. Here we have provided some pointers (do the searches mentioned above) for examples of various robots and their uses. There are numerous web sites where you can look up more about the history of robots. We will leave that as an exercise.

Today, it is hard to imagine life without a web search engine. While there are several search engines available, the one provided > by Google Inc. has become synonymous with web searching. So much so that people use it as a common phrase: “Google it!”

You may have your own personal preference for a search engine. Go ahead use it and search for the items suggested here.

## Robots and Computers¶

A Postage stamp titled World of Invention (The Internet) was issued by UK’s Royal Mail on March 1, 2007 honoring the development of the World Wide Web.

In the last few decades computers have become increasingly ubiquitous. Most likely you are reading this sentence on a computer. If you’re reading this text online, the text itself is coming to you from another computer (located somewhere on the western banks of the Delaware River in south-eastern parts of the state of Pennsylvania in the United Stated of America). On its journey from the computer in Pennsylvania to your computer, the text has probably traveled through several computers (several dozen if you are outside the state of Pennsylvania!). What makes this journey of this text almost instantaneous is the presence of communication networks over which the internet and the World Wide Web operate. Advances in the technologies of wireless communication networks make it possible to access the internet from nearly any place on the planet. The reason that you are sitting in front of a computer and learning about robots is primarily because of the advent of these technologies. While robots are not quite as ubiquitous as computers, they are not too far behind. In fact, it is precisely the advances in computers and communications technologies that have made it feasible for you to become more familiar with the world of robots.

The relationship between robots and computers is the basis for the use of the phrase automatic controls in describing a robot. Automatically controlling a robot almost always implies that there is a computer involved. So, in the process of learning about and playing with robots you will also uncover the world of computers. Your robot has a computer embedded in it. You will be controlling the robot through your computer. Moreover, you will do this over a wireless communication technology called bluetooth. Initially, for our purposes, learning to automatically control a robot is going to be synonymous with learning to control a computer. This will become more obvious as we proceed through these lessons.

Automating control involves specifying, in advance, the set of tasks the robot or the computer is to perform. This is called programming. Programming involves the use of a programming language. Today, there are more programming languages than human languages! Perhaps you have heard of some of them: Java, C, Python, etc. In this course, we will do all our robot programming in the programming language Python. Python, named after the popular Monty Python TV shows, is a modern language that is very easy to learn and use.

While we are talking about computers and languages, we should also mention the Myro (for My robot) software system. Myro was developed by us to simplify the programming of robots. Myro provides a small set of robot commands that extend the Python language. This makes it easy, as you will see, to specify automatic controls for robots.

## A Robot of Your Own: The Scribbler¶

The Scribbler 2 Robot.

The scribbler robot, shown here, is also a rover. It can move about in its environment. The wheels, and its other functions, can be controlled through a computer via a wireless interface. Your laboratory assistants will provide you with a Scribbler and the required components to enable wireless communication. Once configured, you will be able to control the robot's movements (and all other features) through the computer. Besides moving, your robot can also play sounds (beeps) and, with the help of a pen inserted in its pen port, it can draw a line wherever it goes (hence its name, Scribbler). The robot can move forward, backward, turn, spin, or perform any combination of these movements giving it adequate functionality to travel anywhere on the surface of an environment. Besides roving, the Scribbler robot can also sense certain features of its environment. For example, it is capable of sensing a wall or an obstacle, or a line on the floor. We will discuss the Scribbler's sensing capabilities later

### Do This¶

The first few activities show you how you to set up the computer and the robot and will help you get familiarized with your Scribbler. This will involve the following four activities:

1. First things first: Setup Myro
4. Explore a little further

You may need the assistance of your instructor for the first activity to ensure that you know how to set up and use your robot for the remainder of the text.

#### 1. First things first: Setup Calico and Myro¶

The Fluke 2 adds Bluetooth and other capabilities to the Scribbler.

The Scribbler robot with the Fluke Dongle.

At the time you received your robot, its software and hardware was configured for use. The software we will be using for controlling the robot is called, Myro (for My Robot) which works in conjunction with the Python language. In this, the first exercise, we will start the robot and the software and ensure that the software is able to successfully communicate with the robot through your computer. If Myro has not been installed on your computer, follow the instructions on the wiki to install the software.

You may also use a simulated robot. When connecting to a robot, you can use "sim" to use the robot simulator.

In this exercise, we will connect to the robot and make it do something simple, like make it beep. Then, we will give the robot a name to personalize it. These tasks can be performed by using the following steps:

2.1 Start Calico
2.2 Connect to the robot
2.3 Make the robot beep
2.4 Give the robot a name

Since this is your very first experience with using robots, we will provide detailed instructions to accomplish the task outlined above.

2.0 Connect gamepad: If you have a gamepad or joystick, connect it now, before starting Calico. If you do not have one, you can use a virtual one.

2.1. Start Calico: When you installed the software, two files called icalico and calico were created. Calico is a self-contained computer progrma called an IDE (Integrated Development Environment). The other icalico lets us write and run programs directly from the this textbook in your web browser.

You can run ipython code cells by selecting them and clicking the play button or by pressing shift+enter.

2.2. Connect to the robot: Make sure your robot and the computer have their Bluetooth dongles inserted and that your robot is turned on. To connect to the robot enter the following command into the Python shell:

In [1]:
from Myro import *


That is, you have now informed the Python Shell that you will be using the Myro library. The import statement/command is something you will use each time you want to control the robot. After issuing the import, some useful information is printed about Myro and then the Shell is ready for the next Python command. Now it is time to connect to the robot by issuing the following command:

In [2]:
initialize("/dev/tty.scribbler")

You are using:
Fluke, version 3.0.9
Scribbler2, version 1.1.6
Hello, my name is 'Scribby'!


where the name inside the quotes is the port name which your computer is using to communicate with the robot. For example, COM2, COM3, or COM42 on Windows, if you need help figuring out the port number, consult with your instructor.

As mentioned, you may also use "sim" instead of "/dev/tty.scribbler" in the example above. This will allow you to do all of the robot examples using a simulator rather than a real robot.

When you issue the initialize command, the computer attempts to communicate with the robot. If this is successful, the robot responds with the Hello... line shown above. As you can see, the robot's name is RedRover. You can give your robot whatever name you like. We will do that later. First, let us give it a command to make a beep so that we know that we are in control of the robot:

2.3. Make the robot beep: In the Python Shell, enter the command:

In [15]:
beep(1, 880)


The command above directs the robot to make a beeping sound at 880 Hertz for 1 second. Go ahead and try it. Your robot will beep for 1 second at 880 Hz. Go ahead and try the following variations to hear different beeps:

In [16]:
beep(0.5, 880)

In [17]:
beep(0.5, 500)

In [10]:
beep(1.5, 1000)


So now, you should realize that you are in control of the robot. By issuing simple commands like the ones above, you can make the robot perform different behaviors. Now, we can learn the command to give the robot a new name.

2.4. Give the robot a name: Suppose we wanted to name the robot Shrek. To do this, all you have to do it give it the following command:

In [11]:
setName("Shrek")


Whatever name you decide to give your robot, you can specify it in the command above replacing the words Shrek. From now on, that will be the name of the robot. How do we know this for a fact? Go ahead and try asking it its name:

In [12]:
getName()

Out[12]:
Shrek

It will also report that name each time you connect to it using the initialize command:

In [13]:
init('/dev/tty.scribbler')

You are using:
Fluke, version 3.0.9
Scribbler2, version 1.1.6
Hello, my name is 'Shrek'!


Congratulations! You have now completed the first Exercise and you are well on your way to more fun and exciting things with your robot. Before we move on, it would be a good idea to review what you just did. Each session with a robot begins by starting the Python software (Step 1 above), followed by importing the Myro library and initializing the robot. From then on, you can issue any command to the robot.

The Myro library contains dozens of commands that enable various kinds of robot behaviors. In the next few weeks we will be learning several robot commands and learning how to use them to program complex robot behaviors. One thing to remember at this juncture is that all commands are being issued in the Python language. Thus, as you learn more about your robot and its behaviors, you will also be learning the Python language.

One characteristic of programming languages (like Python) is that they have a very strict way of typing commands. That is, and you may already have experienced this above, the language is very precise about what you type and how you type it. Every parenthesis, quotation mark, and upper and lower case letter that makes up a command has to be typed exactly as described. While the rules are strict, luckily there aren't too many of them. Soon you will get comfortable with this syntax and it will become second nature. The precision in syntax is required so that the computer can determine exactly one interpretation for the command resulting in desired action. For this reason, computer languages are often distinguished from human languages by describing them as formal languages (as opposed to natural languages that are used by humans).

### 3. Drive the robot around¶

In this exercise, we will introduce you to a way of making the robot move about in its environment manually controlled by a game pad device (see picture on right). As above, place the robot on an open floor, turn the robot on, start Python as above and connect to the robot. You may already have this from Exercise 2 above. Also, plug the game pad controller into an available USB port of your computer. At the prompt, enter the following command:

In [3]:
gamepad()

        Pad   Action
------   -------
Left/Right   turnLeft() and turnRight()
Up/Down   forward() and backward()

Button   Action
------   -------
1   stop()
2   takePicture()
3   beep(.25, 523)
4   beep(.25, 587)
5   beep(.25, 659)
6   speak('Hello. My name is Scribby.')
7   speak('Ouch! I'm a sensitive robot.')
8   speak('I'm hungry. Do you have any batteries?')

Gamepad is now running... Press button 1 to stop.


In response to this command, you will get some help text printed in the IDLE window showing what would happen if you pressed various game pad buttons. If you look in the picture of the game pad controller above, you will notice that it has eight (8) blue buttons (numbered 1 through 8 in the picture), and an axis controller (the big blue swivel button on the left). The axis controller can be used to move the robot around. Go ahead and try it. Pressing each of the numbered buttons will result in different behaviors, some will make the robot beep, some will make the computer speak or say things. Button#1 will result in the robot taking a picture of whatever it is currently seeing through its camera and display it on your computer screen. Button#8 will quit from the game pad control mode.

Spend some time experimenting with the various game pad control features. See how well you can navigate the robot to go to various places, or follow a wall, or go round and round something (like yourself!). You may also place the robot on a big piece of paper, insert a Sharpie pen in its pen port and then move it around to observe its scribbling. Can you scribble your name (or initials)? Try a pattern or other shapes.

Without creating a program, this is an effective remote way of controlling the movements of your robot. The next exercise asks you to try and issue commands to the robot to move.

If you do not have a gamepad or joystick, you can use a virtual one by entering:

In [ ]:
joystick()


### 4. Explore a little further¶

OK, now you are on your own. Start Python, import Myro, connect to the robot, and give commands to move forward, backward, turn left and right, and spin. Use the commands: forward(SPEED), backward(SPEED), turnLeft(SPEED), turnRight(SPEED), and rotate(SPEED). SPEED can be any number between $-1.0...1.0$. These and all other robot commands are detailed in the Myro Reference Manual. This would be a good time to review the descriptions of all the commands introduced in this section.

In [19]:
turnRight(1)

In [20]:
stop()


## Myro Review¶

In [22]:
from Myro import *


This command imports all the robot commands available in the Myro library. We will use this whenever we intend to write programs that use the robot.

In [ ]:
initialize("/dev/tty.scribbler")


or init(<PORT NAME>)

This command establishes a wireless communication connection with the robot. is determined at the time you configured your software during installation. It is typically the word com followed by a number. For example, "com5". The double quotes (") are essential and required. Use "sim" to initialize the simulator.

In [24]:
beep(1, 880)


beep(<TIME>, <FREQUENCY>)

Makes the robot beep for

In [25]:
getName()

Out[25]:
Shrek

Returns the name of the robot.

In [26]:
setName("Bender")


setName(<NEW NAME>)

Sets the name of the robot to <NEW NAME>. The new name should be enclosed in double quotes, no spaces, and not more than 16 characters long.

In [ ]:
gamepad()


Enables manual control of several robot functions and can be used to move the robot around.

## Exercises¶

1) Where does the word robot come from? Explore the etymology of the words robot and robotics and write a short paper about it.

2) What are Asimov's Laws of robotics? Write a viewpoint essay on them.

3) Look up the Wikipedia entry on robots, as well as the section in AI Topics (see links above). Write a short essay on the current state of robots.

4) Write a short essay on a robot (real or fictional) of your choice. Based on what you have learned from your readings, evaluate its capabilities.

Facsimile of the Mars
Pathfinder Postage Stamp

5) Spirit and Opportunity were not the first rovers to land on Mars. On July 4, 1997, the Mars Pathfinder landed on Mars with a payload that included the Sojourner rover. The United States Postal Service issued the stamp shown here to commemorate the landing. This is perhaps the first ever real robot to appear on a postage stamp! Find out what you can about the Mars Pathfinder mission and compare the Sojourner rover with Spirit and Opportunity.

6) Through the exercises, you have experienced a subset of capabilities of the Scribbler robot. Reflect/write about the physical capabilities of the Scribbler and the kinds of tasks you could make it perform.

7) Insert a pen (provided in your kit) in the robot's pen port. Place the robot on a surface where it is OK to write/draw. Drive the robot around with the game pad controller. It will scribble on the paper as it moves. Observe its scribbles by moving it forward and then backwards. Does it trace its path exactly? Why or why not?

8) Using the game pad operation, make your robot Scribble your name on the floor. You may find this difficult for several reasons. Try to make the robot write your initials instead. Also, see if you can guide the robot to draw a five point star. This task is in some sense not too different from controlling a robot to perform surgery. Research the capabilities of today's surgical robots and write a short paper about it.

9) Using the game pad controller draw the Bluetooth logo (see picture) using a pen inserted in the Scribbler robot. Do a web search for Harald Blåtand and read more about the runic alphabets.

Harald Blåtand Gormson What’s in a name?

The Bluetooth logo is derived from runic alphabet letters H and B juxtaposed together. HB for Harald Blåtand a Scandinavian King (from the 10th century AD) who was legendary in uniting Denmark and Norway. The wireless technology we use today is named in his honor (Blåtand means “Bluetooth”) because the technology itself was developed by Ericsson, a Scandinavian company. The technology is designed to unite computers and telecomm devices. Bluetooth devices are most commonly found in cell phones. We’re using it here to communicate between your robot and the computer.