The SCORPIO Robotics Project: An Example of Hardware-
Software Codesign
John K. Estell
Computer Science and Engineering Department
The University of Toledo
Toledo, Ohio 43606-3390
phone: (419) 537-3532
E-mail: estell@cse.utoledo.edu
Abstract
The purpose of the SCORPIO robotics project was to develop a
microcontroller system for an inexpensive, small-scale, walking
robot. This was performed as a class project by the students in
the Microcomputer Systems II course during the Spring 1993
Quarter at The University of Toledo. The students were required
to handle all aspects of the design process, from the initial
planning stages to the delivery of a finished product. In order to
accomplish this task, the collaborative efforts of both hardware
and software designers using an embedded systems approach
was required. By focusing on the use of the codesign
methodology, one promotes more thoroughly thought out
designs, encourages communications between design groups,
and requires understanding of the problem prior to solving it. In
addition, the codesign methodology encourages the use of
computer tools to facilitate the design process. This instructional
format allows students enrolled in the course to gain actual
codesign experience while solving a "real-world" problem within
a limited amount of time.
1. The Codesign Process
The word "codesign" reflects an approach to the development
of a system through the simultaneous, integrated development of
modules from more than one design area. In the field of
embedded controllers, this specifically refers to the concurrent
use of both hardware and software design. In an embedded
controller system, one typically has processors dedicated to the
performance of specific functions. These functions are
implemented using a combination of hardware and software
modules. Using the traditional approach, development of the
hardware and software modules would be performed almost
independently of each other. The lack of communication
between the groups working on the design would often lead to
incompatibilities between hardware and software modules,
requiring modifications to be performed before a final design
could be approved. By adopting the codesign methodology, one
stresses communication and interaction between the hardware
and software development groups, which helps in avoiding
pitfalls such as schedule and cost overruns caused by such
communication problems.
Paradigms for codesign are currently being investigated [1-4],
and the methodology is still in its infancy. However, there are
some general principles involved with the process. First, one
needs to adopt a flexible design strategy, where the system is
initially modeled as a composition of functional units. Members
of both the hardware and software development teams work on
the stepwise refinement of the system model. The design teams
perform appropriate design evaluations for each of the functional
units, such as cost, reliability, and performance. Team meetings
are frequently held to promote communication and interaction
between the development groups. Once the design evaluations
have been analyzed and the functional units have been broken
down into hardware and software units, further meetings are held
between the groups in order to maintain communication and to
assist in the fine tuning of the system design. By using
paradigms that promote concurrency and group cooperation
among those involved in the process, the codesign methodology
promotes more thoroughly thought out designs, encourages
better communication between project members, and forces the
participants involved to fully understand the problem being
evaluated prior to solving it.
As applied to the SCOPRIO robotics project, the codesign
process starts with extensive planning of the problem statements
and specifications, as these serve as an overall guide to the
project. Failure to spend sufficient time here can be catastrophic
later on, as misunderstandings on the part of one group can
adversely affect the operations of other groups. This can be
partly handled by requiring students to analyze the possible
failures in their design and to make their designs flexible enough
to accept changes without major revisions. Misunderstandings
are kept to a minimum through the remainder of the codesign
process by requiring all groups to maintain good
communications. This can be best handled by the instructor,
whose role in the course is not that of a lecturer but instead that
of a project manager. The group members must regularly meet
with the instructor; this is done during the time at which the class
is scheduled. Prior to the meeting, each group is required to
submit a memorandum indicating the current status of their
work. The memorandum is then distributed to all students in the
class and is put on the agenda for discussion. This fosters good
documentation practices as well as allowing the students to
improve their written and oral communication skills.
All this planning is of little use unless students have access
to tools appropriate to the task. Ideally, one would have
available for use computer simulation tools that would allow
both hardware and software components to be handled as
abstract, functional entities that can be easily manipulated and
tested. Unfortunately, the current state of codesign technology
has not yet reached that level. It should be noted here that
current developments with application-specific integrated
circuits makes it likely that CAD systems supporting embedded
systems design will be available in the near future [5]. These
systems, as they appear, will be very beneficial for students
learning the codesign process. The students enrolled in this class
had access to such laboratory equipment as in-circuit emulators
and logic analyzers. These tools are highly valued for the time
that they save in the design process.
2. The SCORPIO Robotics Project
The SCOPRIO robot designed in this course is based on the
Stiquito robot developed by Jonathan Mills of Indiana University
[6]. The Stiquito robot is an inexpensive six-legged "creature"
that uses nitinol actuator wire, formed from a nickel-titanium
alloy, for its propulsion mechanism. Wire made from this alloy
can be stretched as much as 8% when cool, and will return to its
shorter length when sufficiently heated. The contraction of the
wire can thus be used as a mechanism for providing force to an
object in order to perform work. This "deform/reform" cycle can
be repeated many times [7]. The legs of the Stiquito robot are
made from piano wire, with the nitinol actuator wire being
connected to the "knee" of the leg. When current is passed
through the nitinol wire, power is dissipated in the form of heat.
The heat contracts the nitinol wire, causing the leg to move.
When the nitinol wire cools to a temperature below the transition
point, it is stretched out by the tension present in the piano wire.
This system results in a working, movable leg possessing one
degree of freedom. The goal of the SCORPIO robotics project
was to design a microcontroller board could be placed on the
Stiquito robot, thereby freeing it from the restriction of being
attached to another device for intelligent applications. An
additional goal for the design was to have the capability of
transferring the controller to other platforms with a minimum of
design modifications.
The first step in the codesign process undertaken by the
students was to develop the general requirements for the system,
in order to better define the problem and to limit its scope. It was
decided that the robot must be a self-contained entity possessing
the ability to make simple decisions based on a sensory input.
For future reference, a name was given to this project:
SCORPIO, which is an acronym for "Stiquito Controller using
On-board Resources to Provide for Independent Operation." A
formal proposal was then presented to the instructor, covering the
problem and the general system requirements necessary for the
solution. At this point the instructor must closely scrutinize the
proposal in order to make sure that it is possible for the students
to accomplish the task within the time allotted for the course.
Once the instructor's approval was received, the students
continued with the design.
3. Hardware System Specification and Implementation
The design decision having the greatest impact was the
selection of the microprocessor. This is one of the most critical
steps in the codesign process, as the selection of the
microprocessor strongly influences both the hardware and
software design. Unfortunately, it is also that portion of the
design that is most subject to constraints, primarily financial. In
the academic environment, the selection of a microprocessor is
usually determined by the emulation systems already available
within the department. In our case, approval was received for the
purchase of a new PC-based emulation system, with restrictions
to the total cost. It was eventually decided that a 8051-family
microcontroller would be chosen for the project. The arguments
for this selection were that 8051-family emulator systems are
relatively inexpensive, and several of the 8051-family
microcontrollers are both cheap and easy to obtain. In addition,
this family is used extensively in the embedded systems field.
For example, in 1992 the number of 8051-family
microcontrollers shipped to American customers by Intel and
Philips was 74 million [8]. Having exposure to such a popular
device would be beneficial to a student when looking for a job in
the embedded systems area. After further study, it was decided
that the 80C32 microcontroller [9] would be selected for the
project. The 80C32 is an 8-bit CMOS single-chip
microcontroller which is backwardly compatible with the 8051.
It contains an on-chip 256 byte RAM, four 8-bit ports, three 16-
bit timer/counters, a six-level interrupt structure, a full-duplex
serial channel, and a Harvard architecture capable of supporting
up to 128 KB of external memory. Once the processor was
selected, the memory specifications were straightforward. Due
to cost and weight constraints, it was decided that one 32 KB
static RAM IC and one 32 KB EPROM IC would be used. While
the software design group indicated that for their code they
would only need a couple kilobytes of memory, it was deemed
sensible to make the full addressing space of the 80C32 available
for any future growth in either executable programs or the
operating system. The decoding circuitry was designed such that
the system can be used as a von Neumann machine if so desired,
thereby allowing for greater programming flexibility.
Once the microcontroller was selected, the specifications for
the system were addressed. In the hardware specifications there
are two major design constraints that must be confronted: power
limitations, and weight limitations. The power limitations stem
from the need for SCORPIO to carry its own power supply.
While solar cells can provide some assistance, the need for a
battery was readily apparent once the requirements for nitinol
activation were considered [7]. In order to use the nitinol wires
they must be heated, and this heat comes in the form of power
dissipation through the wire. It is recommended that, for the
diameter of nitinol wire being used, 180 mA of current be used
for activation. Therefore, when each leg is moved, 180 mA is
demanded from the power supply for a short amount of time.
The weight constraints also have an effect on the power
supply. SCORPIO must be able to carry its own weight, and the
weight that it can carry is a function of the number of legs
present in the design. This was a problem because of the piano
wire used for the legs. As the Stiquito robot has a stated loading
capacity of 50 g [6], a design based on this structure must assume
that each leg can support roughly 8 g. The component causing
the greatest loading effect on the body of the robot is the battery.
In addition, the weight must be reasonably distributed over the
body of the robot. Considering the weight and stability issues, it
was decided that a new body had to be designed that would
support a heavier payload. The stability was increased by
widening the distance between each pair of legs. The width of
the separation was made large enough to make room for holding
either a 9 V transistor battery or two 1.5 V AA batteries located
side-by-side. The length of the body was such that there is
sufficient room for two batteries or sets of batteries. The loading
capacity was increased by incorporating styrene rods into the leg
design. The result was an eight-legged body that operated under
the same principles as the original Stiquito robot design, but with
the ability to support a load of over 400 g. Figure 1 is a photo of
the SCORPIO robot taken apart to show the body, the power
supply (consisting of one 9 V transistor battery and two 1.5 V
AA batteries), and connections to the controller board.
The leg controller circuitry presented the students with
additional questions. The simple solution was to design the
controller to handle eight legs, each possessing one degree of
freedom. However, it might be desirable to incorporate into a
future version of SCORPIO either more legs, or more degrees of
freedom per leg, or both. For this portion of the design,
flexibility was a key issue. After some discussion and analysis, it
was decided that the leg controller circuitry would be given the
ability to control up to 40 nitinol actuator wires, using
multiplexed memory-mapped I/O organized in five banks of
eight outputs each. The controller outputs not used for
controlling a leg can be used to operate other related devices,
such as a set of pinchers for grabbing objects.
4. Software System Specification and Implementation
The software group determined that, in the long run, it
would be best if a control language were developed for the
SCORPIO system. Programs written in the SCORPIO Control
Language (SCL) would be compiled on a PC, then downloaded
to SCORPIO. The robot would have a monitor program written
in 8051 assembly language that would include an interpreter
used for executing the control language programs. The primary
benefit of this approach is that the control language is
independent of the actual implementation of SCORPIO. If a new
version of SCORPIO were designed using a different
microcontroller, all that would be needed is a new monitor
program. The programs written in the control language would
not have to change. The use of a high-level language (in
particular, C) was considered, but was rejected. While there
would be a reduction in the coding time, the efficiency of a high-
level language is less than that found in an assembly language
program. This is even more significant when using a
microcontroller from the 8051 family. The architecture used
here results in convoluted approaches to data handling by a C
compiler [10].
Many things were considered when developing SCL. First
was the need for simplicity in the construct of the language.
With this in mind, a language was developed with few
commands and only two addressing modes. Another goal was to
have complete control over SCORPIO's movement with the
language. Finally, it was desired that the language possess
sufficient robustness such that elaborate programs could be
written. It was decided that the language would be implemented
using an interpreter residing on-board SCORPIO that would
operate on code generated by an assembler. This approach
allows SCL to be independent of the hardware used to control the
robot. Consequently, if a hardware change is made, only the
interpreter and subsequent assembly language routines will need
modification.
The current version of SCL is similar to assembly language.
The elements of the language are mnemonic and are usually
followed by a single operand. The reason behind this is that it is
much easier to write an assembler for an assembly-like language
than it is to write a compiler for a structured language. For this
particular design, only a minimal set of language elements were
implemented. SCORPIO's movements are controlled by
commands for going forward and turning either left or right.
Decision making ability is available from the jump, test, and
compare instructions. Furthermore, the language allows the user
to call subroutines written in machine language from a user
program. The user-supplied routine can be assembled using any
8051 assembler and then loaded into memory using the
SCORPIO communications package. This feature was added for
testing and debugging new SCORPIO functions and for
implementing custom-designed hardware drivers. At the present
time, plans are being made to expand SCL to include
"intelligent" or "self-awareness" commands such as the need for
battery recharging and performing proximity detection using IR
sensors.
Programs written in SCL are parsed by the SCORPIO
Language Assembler (SLA). Written in C for portability, the
assembler breaks down the mnemonics and operands into eight-
bit codes. The difference is that, in other assemblers, the values
represent the machine code for a particular processor while the
codes produced by the SLA represent routines and data to be
handled by the interpreter. Figure 2 shows the listing file
generated by the assembler from an example of SLA code. The
first column in the listing file contains the address of the current
instruction. To the right of the address is the hexadecimal
opcode(s) of the instruction; these opcodes are also stored in an
object file. Finally, an address table is printed listing the address
of each label present in the program. Note that, with the
exception of the target address for a machine language
subroutine call, all addresses are relative addresses.
The SCORPIO kernel is composed of three items: the
interpreter, the monitor, and the communications package. All of
these items reside in EPROM on the controller's microprocessor
board. The SCORPIO interpreter is a program that reads SCL
opcodes from external RAM and executes the corresponding
machine language procedures stored in ROM. The interpreter
parses each instruction before executing the appropriate routine;
therefore, a program written in SCL will not be as fast as one
written entirely in the machine language of the microprocessor.
The interpreter should be as efficient as possible so the
performance of SCORPIO is not adversely affected. Due to this,
the interpreter was written entirely in 8051 assembly language
instead of a high-level language. This optimizes the operation of
the interpreter, resulting in increased speed and efficiency.
The development of the interpreter evolved into a virtual
processor for SCL. The interpreter has three registers: an
accumulator, an instruction pointer, and a step-size register. It
also has three flags: carry, negative, and zero. All instructions
referencing the accumulator use the SCORPIO accumulator,
while all instructions referencing or setting flags use the
SCORPIO flags. This is another portable aspect of SCORPIO.
The interpreter's registers are independent of the architecture
used; therefore, the interpreter can be implemented on any
system. This also reserves the actual registers of the
microprocessor for use exclusively by the interpreter, which
makes writing the interpreter much easier. Error checking is also
performed by the virtual processor to ensure that the SCORPIO
hardware is not damaged accidentally by an SCL program. A
prime example where error checking is essential is the movement
commands. If a leg is activated for too long, or not given enough
time to return to its original position, the nitinol wire actuators
can be severely damaged. In this case, only the interpreter
controls how long the leg is "turned on" and also waits for the leg
to return to its original state before executing the next instruction.
Therefore, the hardware is protected from any accidental damage
that could be directly caused by an SCL instruction.
The monitor program controls the main processes of the
SCORPIO robot. It is the routine executed upon powering up the
device, and it has the task of initializing all of the registers,
timers, and interrupts required for its operation. At this point the
monitor waits to receive a command via the modem connection.
Data transfers for the modem are handled by using the
XMODEM-CRC protocol. The protocol was chosen primarily
for convenience; as there are many PC-based communications
packages available that use this protocol, only the 8051 portion
of this code had to be implemented.
The procedure for writing and executing a SCORPIO
program is straightforward. First, a PC platform is used to
develop the SCL program code in a text editor. The SLA
assembler takes the code and converts it into an object file
containing interpreter instructions. The XMODEM-CRC
protocol is used to transfer the object file to the SCORPIO robot.
This is done by instructing the monitor to load the data it receives
into a specified location in memory. Finally, the monitor invokes
the interpreter, thereby executing the program controlling the
robot.
5. Conclusion
The effects of the codesign process used in this course are
evident in the results: Figure 3 shows the assembled SCORPIO
robot, which is now operational. The students successfully
implemented their design decisions. As part of the experience,
the students were required to write technical papers describing
their project along with the traditional documentation reports.
Their papers have been accepted for publication in a book to be
published by IEEE Press on nitinol-powered robots. This
exposes them to another aspect of design: communicating the
results of research with one's professional colleagues. The
students worked effectively as a group, with progress being made
concurrently in both the hardware and software areas during the
tenure of the course.
The anonymous reviews submitted at the end of the course
attest to the student's enthusiasm for classes of this type. They
found the openness of the class to be beneficial to their efforts.
They were able to test their design and knowledge capabilities
according to productivity and accomplishment instead of scores
derived from homeworks and exams. The experience of having
an integrated hardware and software project was found to be a
positive one. On one of the course evaluation sheets, a student
wrote that "[t]his class was very useful in learning what real
engineering is all about." The course has incorporated many
features considered as vital portions of the computer science and
engineering design curriculum [11]. The problem selected was
open-ended. Students were required to formulate the design
problem statements and specifications. Various solutions were
considered with regard to such factors as cost, feasibility, and
reliability. Detailed system specifications were produced, and
good communication channels in the form of oral presentations
and written documentation were established in order to adhere to
the specifications.
One of the benefits of having a class undertake such a
project is that it exposes them to real-world issues. Students
have to look at such things as the efficiency and the cost of the
design. The open-endedness of the problem gives students the
opportunity to apply creative solutions to each portion of the
problem. It also allow students to obtain a greater view of how
the hardware and software components interact. The codesign
process is ideally suited to students in a computer science and
engineering curriculum. Their knowledge of both computer
science and computer engineering allows them to possess a
deeper understanding of the overall situation, thereby allowing
for more informed decisions to be made. This exposure to the
codesign process will be a valuable tool in their future careers.
References
[1] G. Borriello, K. Buchenrieder, R. Camposano, E. Lee, and
W. Wolf, "A D&T Roundtable: Hardware/Software
Codesign," IEEE Design & Test of Computers, Vol. 10, No.
1, pp. 83-91, March 1993.
[2] D. E. Thomas, J. K. Adams, and H. Schmit, "A model and
Methodology for Hardware-Software Codesign," IEEE
Design & Test of Computers, Vol. 10, No. 3, pp. 6-15,
September 1993.
[3] S. Kuman, J. H. Aylor, B. W. Johnson, and W. A. Wulf, "A
Framework for Hardware/Software Codesign," IEEE
Computer, Vol. 26, No. 12, pp. 39-45, December 1993.
[4] P. Subrahmanyam, "Hardware-Software Codesign: Cautious
Optimism for the Future," IEEE Computer, Vol. 26, No. 1, p.
84, January 1993.
[5] G. De Micheli, "Extending CAD Tools and Techniques,"
IEEE Computer, Vol. 26, No. 1, pp. 85-87, January 1993.
[6] J. Mills, "Stiquito: A Small, Simple, Inexpensive Hexapod
Robot," Computer Science Department, Indiana University,
Technical Report No. 363a, September 1992.
[7] R. Gilbertson, Motorless Motion! Working With Shape
Memory Wires, 2nd ed. San Anselmo, CA: Mondo-tronics,
Inc., 1992.
[8] T. Sperry, "Tools for 8051 Development," Embedded
Systems Programming, Vol. 6, No. 3, pp. 49-60, March 1993.
[9] Intel, Embedded Microcontrollers and Processors, Volume
1. Mt. Prospect, IL: Intel Corporation, 1992.
[10] J. Ganssle, The Art of Programming Embedded Systems.
San Diego: Academic Press, 1992.
[11] T. Booth, T. Brubaker, T. Cain, R. Danielson, R. Hoelzeman,
G. Langdon, D. Soldan, and M. Varanasi, "Design Education
in Computer Science and Engineering," IEEE Computer,
Vol. 19, No. 6, pp. 20-27, June 1986.
=====================================================
.start
0000 31 0A START: STS #0A ;set step- size to 10
0002 01 28 FWD #28 ;forward 40 steps
0004 11 0F RGT #0F ;turn right 15 steps
0006 97 00 LOOP: LDA #00 ;clear the accumulator
0008 48 CA B0 JSR &CAB0 ;jump to 8051 subroutine at CAB0h
000B A1 32 CMP #32 ;compare the accumulator to 50
000D 71 04 JEQ STOP ;stop if they're equal
000F 00 FWD A ;forward # of steps in accumulator
0010 42 F5 BCH LOOP ;loop again
0012 40 STOP: RET ;return to monitor
.end
-- Labels --
START - 0000
LOOP - 0006
STOP - 0012
Figure 2. Example of an SLA listing file containing SCL code.