CSC 297 Robot Construction: Assignments
Assignments may be posted here after the day's class,
along with the due date.
Assignments are due at the beginning of class on the due date.
In general, no credit will be allowed for late assignments.
Turn in what you have for partial credit.
There may be assignments given in class that are not listed here.
Since class attendance is a course requirement, this should not
pose a problem.
For any written assignment, I expect a well organized
report-style writeup that describes in detail what you did, why you did it,
and what the results were. This includes negative results.
Scratch work and computer code, if requested should be appended to the main
writeup with appropriate pointers.
Attribute ANY work that is not your own, including software off the
web, text cribbed from other sources, etc.
You are encouraged to look for resources, but not to the extent that
it negates the point of the assignment.
This is sometimes a fine line, especially in programming assignments.
I will try to be specific as to what I expect you to write
as a minimum. If in doubt, ask.
In any case, use of UN-attributed material is plagiarism, and a violation
of the University's academic honesty policy.
Plagiarism is taken VERY seriously in this department. DON'T DO IT.
If in doubt, reference.
Specifically, text taken from web pages, even a single sentence,
is plagiarism. Text paraphrased from web pages is plagiarism.
Sentences from web pages cut up into phrases and re-arranged are
If you want to avoid possible problems, my suggestion is
never write while looking at text. Generate everything from your
own understanding of the subject.
Use of unattributed text in any written assignment will result in
zero credit for that assignment.
Text that comes from an outside source should appear in quotes.
Too much use of quoted material will tend to reduce your credit
for an assignment, as the point of written assignments is to
convey your understanding of a subject.
In general, you should consider written assignments for this course
to be public documents - just as published research papers are public
documents. As such I may place them in a forum where they may be
scrutinized by your colleagues for accuracy, clarity, and for
You are encouraged to discuss general techniques and specific approaches
to general problems with your fellow students, or anyone else.
Unless specifically directed in an assignment, however, you are not to
share code you have written, or your written solutions to specific
Thursday, January 18, 2018
- Class canceled. Prof on Jury duty.
Thursday, January 23, 2018
- Class activity: Introductory material:
- Class activity: Initial questions for discussion:
- 1. What is a robot?
- 2. Why is a robot?
- 3. Robot revolution. Should we worry?
By hook or crook, get hold of a copy of "The Cyberiad" by Stanislaw Lem,
English translation by Michael Kandel, and read the story "How the world was
Saved". The book is out of print, but you can get it for the Kindle, and I
expect there exist "unofficial" versions online, though I think it is not
legal for me to point at any of them.
Due Thursday, January 25, 2018.
prof's constructor persona on facebook (profrc nelson).
Join the "297 constructors" group, which will serve as a discussion forum.
You are welcome to "friend" profrc.
You might want to create a yahoo or gmail email account and create a special
FaceBook persona especially for the purposes of this class, rather than use
a FB account you care about.
Due Thursday, January 25, 2018.
Find five cool robots that have actually been made. Describe them briefly
in a writeup, and provide pointers to full descriptions or videos.
If the full descriptions or videos are online, have your facebook constructor
persona share them.
Due Thursday, January 25, 2018.
Thursday, January 25, 2018.
- Class activity: Quiz (Letter N)
- Class activity: The Three Laws of Robotics
- Assignment: Go to profrc's facebook page, and the 230 Robot Constructors
group, and watch all the robot videos posted by the class. If it's
too boring, feel free to terminate a video after 30 seconds, but take
a look at them all. If you have not shared your videos yet, share them
with the 230 Robot Constructors group.
- Assignment: Read "Trurl's Machine" in "The Cyberiad".
Due Tuesday, January 30.
- Assignment: Read the "Bones" and "Scaling" pages in the "Robot Manual".
Learn something about structural materials.
Due Tuesday, January 30.
- Assignment: Find a useful object made of metal. Determine what
metal it is made of. Estimate the (minimum) applied blunt
force that would damage your object so that it would no longer
function for its intended purpose (e.g. if it were squeezed
between two plates or bent over a bar). Use of a sharp edge or
cutting tool is not included (that is a separate issue).
Justify your estimate in your writeup.
Due Tuesday, January 30.
Laboratory Exercise 1
- Assignment: Lab 1. Meet with your team and disassemble your consumer
robotic device as completely as possible without breaking, cutting or
desoldering components. Try to figure out how each mechanical component
contributes to the functionality of the device (i.e. figure out how it
works mechanically). Take one or more pictures of the disassembled
components and post to the class facebook page. Count the number of
separate components you have (including individual screws etc.)
Then reassemble the device
making sure that it operates at least as well as it did originally.
- Individually, prepare a writeup of the experience.
(what was hard, what was surprising, what you learned, etc.)
Turn in on Tuesday (Feb 6, 2018),
Tuesday, January 30, 2018.
- Class activity: Mystery
- Class activity: Quiz (Trurl's Machine)
- Class activity: Discussion of materials and scaling mechanics.
- Class activity: Testing object strength.
- Assignment: Read the story "How Trurl and Klapaucias Created a
Demon of the Second Kind to Defeat the Pirate Pugg" in "The Cyberiad".
- Assignment: Read the "Assembly" segment in the "Robot Manual"
Thursday, Feb 1, 2018.
- Class activity: Mystery object
- Class activity: Discussion of assembly methods
- Assignment: Read the story
"The First Sally, or Trurl's Electronic Bard" in "The
- Assignment: Read the "Articulation etc." section of the "Robot Manual"
Laboratory Exercise 2
- Assignment: Lab 2. You will make and assemble a small metal "T" part,
exercising layout, sawing, filing, drilling and tapping skills.
- Individually, turn in a short writeup describing difficulties
encountered and ways around them.
Due Tuesday, Feb 7, 2017.
Tuesday, Feb 6, 2018.
- Class activity: Mystery
- Class activity: Daily quiz
- Class activity: Discussion of joints, wheels, bearings, gears, etc.
- Assignment: Read the "Nerves" "Power" and "Diodes etc." sections of the
Thursday, Feb 8, 2018.
- Class activity: Discussion of basic electronic components.
Laboratory Exercise 3
- Assignment: Find how to implement a flashing LED using basic
components (transistors, resistors, capacitors, etc.
but not, e.g., op-amps, 555 timer chips, or Arduinos).
Wire it up on a breadboard using components in the robot lab,
You may work in teams of two if you wish.
Try not to burn out LEDs -- i.e. don't hook them to power without
an appropriate current-limiting resistor in series.
Individual writeups as usual.
Due Tuesday, Feb 20, 2018.
Tuesday, Feb 13, 2018.
- Class activity: Discussion of electronic components cont.
- Assignment: Read the Robot Manual section on "Brains", especially the
material on the Arduino.
- Assignment: Go to the Arduino home page and learn what you can about the
Arduino boards and their use.
Download the Arduino IDE onto your computer and explore the
interface. Bring your computer to the next lab. (If you do not have
a portable laptop, send me email).
- Assignment: If you have time, also read the "Muscles" section of the
"Robot Manual" (motors and other actuators).
Thursday, Feb 15, 2018.
- Class activity: Discussion of "brains" (central control,
microcontrollers, and the Arduino system)
- Assignment: Read the "Muscles" section of the "Robot Manual"
(motors and other actuators)
Laboratory Exercise 4
- Assignment: Lab 4. You will implement some simple control
systems involving LEDs and switches using an Arduino Uno.
- 1. Bring up the Arduino environment, plug in your Arduino,
and get the "blink" program to work.
- 2. Wire up your own (red) LED (with a ~300 Ohm resistor so it doesn't
burn out) and make it blink using another output pin.
- 3. Wire up a second (green) LED and get it to blink alternatively
with the first one.
- 4. Modify your program so a "while" loop is used to implement
red LED blinking, rather than just falling off the end of
the "loop" function and rerunning.
- 5. Use a pushbotton switch to provide a signal to the Arduino
to exit the loop. Don't forget to use a "pulldown" resistor (~10kOhm).
Put a second such loop blinking the green LED after the first.
Your push-button switch should now toggle between the two modes.
(press it once, red, press it again, green, press it again, red...)
You could think of them as forward and reverse driving modes.
- 6. Use a Potentiometer with analog input to the Arduino
to vary the blinking speed between one and 10 times a second.
- Write up the experience: What was hard, what was easy, what you
need to learn more about. Then go learn it.
Due Tuesday, Feb 28, 2017.
Tuesday, Feb 20, 2018.
- Class activity: Introduction to motors and how they work
- Assignment: Read the "Driving Motors" section of the "Robot Manual"
Thursday, Feb 22, 2018.
- Class activity: Motor control and power issues.
"Magic" RC standard servo units.
Laboratory Exercise 5
- Assignment: Lab 5: Control of servo with Arduino
- A few things we have discovered.
i. servo.write(angle) does not work accurately or reliably with our servos
(especially using a Mac).
You need to use servo.writeMicroseconds(microseconds).
This a better choice in any case, since it gives you direct
control that can be related to servo specifications rather than having to
correct inaccurate "degrees" defined by a software guess.
ii. You need to power your servo externally using a 6V battery pack
(4 AA cells), and separately from the Arduino, which you should
power from the USB connection.
If you don't, the motor pushes spiky feedback into the Arduino which can
make it do strange, random things.
You DO need to connect the arduino ground
to the battery-pack negative/ground (black wire)
- 1. Wire up the flashing-light Arduino circuit from last week
(push-button toggles between read and green flashing LEDs).
Look up the servo library using the IDE reference section, and find out
how to use the library function to set a servo position. Pay attention
to initialization code and procedures that must be performed.
- 2. Hook up your servo using an external battery (make sure the battery
and the Arduino share a common ground). Using one of the PWM (~) ports,
modify your program so that when the red LED is flashing, the servo
is sent a 1500 us signal (midrange position), and when the green LED is
flashing, the servo is 30 degrees counter-clockwise (viewed from above)
from the 1500 us position. The difference between the two positions will be
somewhere around 300 us. Verify the angle using a protractor, and show you
can toggle between the two positions with the push-button switch.
- 3. Modify your program so that the potentiometer is read in the
green loop every 50 ms, and use the value to set the position of
the servo so that it is center - 30 degrees on one end of the POT range,
and center + 30 degrees on the other. The desired effect is that the
servo tracks the potentiometer. Note you need to change the delays in
the loop so that the total elapsed time is 50ms rather than the 1-2s
you had last week. The LED should flicker rapidly.
You will need to take some care so that the servo does not behave in
a "glitchy" manner at the ends of the range (recall that the pulse
width needs to be between about 1000us and 2000us, and that out-of-range
values may produce undefined results)
- 4. Modify the program again so that in the "green" mode, the
servo moves smoothly back and forth between -30 and +30 degrees,
taking about 1 second each way. This will involve rapidly setting
the servo to a lot of intermediate positions. Note that doing this
more than 50 times a second is pointless, since the servo only receives
an update pulse every 20ms in any case. You now have the basis for
a "walking" motion.
- 5. Finally, use the value of the POT to change the walking speed
between (say) 1 step every 2 seconds and 2 steps per second.
Again, design your system so there is no strange behavior at either
end of the range.
Tuesday, Feb 27, 2018.
- Class activity: BlobBot.
- Assignment: Read the "Sensors" section of the Robot Manual.
Thursday, March 1, 2018.
- Class activity: Discussion of simple sensors
- Assignment: Read the "Sensors" section of the Robot Manual if
you haven't done so.
Laboratory Exercise 6: Soldering
- We will practice soldering and solder-joint examination and remediation
on printed circuit boards, and between free components.
Laboratory Exercise 7: Use of milling machine and other power tools
- We will learn to use the bandsaw and milling machine in the process
of fabricating Blob-Bot components.
Tuesday, March 20, 2018.
- Class activity: Discussion of graph isomorphisms and automorphisms
and their application to the icosahedral rotation group and blob-bot.
Laboratory Exercise 8: Assembly of node boards
- We will use a diamond tile saw to cut PCB board and header components
to exact sizes, and glue these up into custom boards, which will be
marked for component placement.
We will then solder components in place for 15 boards.
Since each board supports dozen of components and jumpers, and contains
nearly 200 solder joints, systematic staged assembly and independent
checking and testing of solder connections at each stage will be practiced.
Tuesday, March 27, 2018.
- Class activity: Discussion of board design
Thursday, March 29, 2018.
- Class activity: Discussion of serial communication and BlobBot
- Assignment: Figure out how to use the serial communication protocol
for the Arduino, and demonstrate your understanding by using a "master"
Uno to tell a "slave" micro board to turn the yellow, green, and blue LEDs
on and off as instructed while the heartbeat program (handed out in class
and available at the link below) continues to run, flashing the red LED
once per second.
Commands should be three bytes, and take the form
("X") ("Y"|"G"|"R") ("T"|"F"), where X is a command flag, Y,G,B refer to
and LED, and T,F refers to turn on (T) and turn off (F). For example
"XGT" says turn on the green LED.
Unos and Micro boards with LEDs for testing your code are in boxes on
a bench in the lab. Please do not take them home
You may work in teams of two if you wish.
In class demos of programs on Tuesday 4/3, Due on Thursday.
Laboratory Exercise 9: Various fabrication, assembly, and testing procedures.
- Completion of board soldering. Board testing. Fabrication of
- Initial rough assembly of Blob-bot cyto-structure from actuators,
u-joints, and node disks. Measurement of secondary freedoms.
Techniques/designs for stabilizing secondary freedoms.
Tuesday, April 3, 2018.
- Class activity: Demo of Arduino Serial communication light flashing
- Class activity: Discussion of timing, bandwidth, and buffer/queuing
issues in serial communication.
- Discussion of node state/mode/behaviors.
Thursday, April 5, 2018.
Class activity: Demo of Arduino Serial communication light flashing
Class activity: Discussion and decisions on heartbeat timing and
serial coding/transmission protocols for blob-bot node and brain
Preliminary heartbeats: Brain, 10 Hz; Nodes, 100 Hz.
Preliminary serial coding: 4-byte codes.
Bytes with leading 1 are command flags.
LED flag, 10000001; motor command flag, 10000010.
Motor command format:
10000010 * actuator index (0-29) * position MS7bits * position LS7bits.
Discussion of brain state/mode/behaviors.
Possibilities: Stopped, Compact, Midsize, Breathe, Poke-back, Ooze, ...
Assignment: Figure out how to use the serial communication protocol
to control 3 servos: two controlled by node 0, one by node 1.
Brain sends "breathe" commands (5-expand, 5 seconds contract) at 2 Hz.
Nodes receive codes, and generate interpolated motor-control commands
at 50 Hz. Interpretation of recieved command (index, position) is
that servo[index] should be at specified position in 1/2 second.
There are boards and servos in the lab to test on. Due, demos on
Thursday, April 13.
Updated Node (slave) heartbeat program:
Tuesday, April 10, 2018.
- Discussion of graph edge remapping and application to transformation of
cannonical poses and motions for Blob-bot.
- Assignment: Write a C program that, provided with an ordered pair
(A,B) of nodes that define a directed edge on Blo-bot's icosohedron,
outputs an edge permutation that is a member of the icosohedral
rotation group and maps directed edge (A,B) to directed edge (0,1)
(which is edge 0 in our indexing). Refer to the class handout for
the specific edge and node labelings we are using.
(Remember, as mentioned in class, that the outer edge 25 is a misprint,
and should be numbered 20.
Due, Tuesday, April 17, 2018
Thursday, April 12, 2018.
- Class activity: Demo of decentralized triangle "breathing" behavior.
- Class activity: Discussion of central behavior modes for Blob-bot
(e.g., stop, rest/breathe, move, hibernate, etc...)
Discussion of behavior finite state machine abstraction and perceptual
transition graph. Discussion of use of proximity sensors to provide
- Assignment: Propose states and a transition graph defining high-level
Due, Tuesday, April 17.
Tuesday, April 17, 2018.
- Class activity: Design decisions for Blob-bot behaviors.
Start, Rest, Breathe, Crawl, Freeze, Hibernate
Thursday, April 19, 2018.
- Technical issues and algorithms for mapping canonical behaviors
to general poses.
- Dropbox Blob-bot directory:
Here. Contains Arduino code and board design images.
Back to CSC 297 main page