CSC 230 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
plagiarism.
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
unattributed material.
-
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
problems.
Thursday, January 16, 2020
-
Today's Bot
- 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?
- Assignment:
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 Tuesday, January 21, 2020.
- Assignment:
Find the prof's constructor persona on facebook (profrc nelson).
Join the "230 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 Tuesday, January 21, 2020.
- Assignment:
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 Tuesday, January 21, 2020.
Tuesday, January 21, 2020.
-
Today's Bot
- 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 Thursday, January 23.
- Assignment: Read the "Bones" and "Scaling" pages in the "Robot Manual".
Learn something about structural materials.
Due Thursday, January 23.
- 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 Thursday, January 23.
Thursday, January 23, 2020.
- Class activity: Mystery
- Class activity: Quiz (Trurl's Machine)
- Class activity: Testing object strength.
- Class activity: Discussion of materials.
- 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"
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 4, 2020),
Tuesday, January 28, 2020.
- Class activity: Mystery object
- Class activity: Discussion of scaling rules and approximate
structural analysis
- Assignment: Read the story
"The First Sally, or Trurl's Electronic Bard" in "The
Cyberiad".
- Assignment: Read the "Assembly" segment in the "Robot Manual"
Thursday, January 30, 2020.
- Class activity: Mystery object
- Class activity: Discussion of assembly methods
- 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 11, 2020.
Tuesday, Feb 4, 2020.
- Class activity: Discussion of joints, wheels, bearings, gears, etc.
- Assignment: Finish reading the "Articulation etc."
section of the "Robot Manual" if you haven't already.
Thursday, Feb 7, 2019.
- Class activity: Mystery
- Class activity: Daily quiz
- Class activity: Discussion of joints, wheels, bearings, gears, cont.
- Assignment: Read the "Nerves" "Power" and "Diodes etc." sections of the
"Robot Manual"
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.
Get the LED to flash about once a second.
Then play around with components and find out how to speed it up and
slow it down by a factor of 5 or so.
Note that the most common circuit you will find flashes 2 LEDs
alternately. That's OK.
Try not to burn out LEDs -- i.e. don't hook them to power without
an appropriate current-limiting resistor in series.
It's also possible to burn out transitors if you hook them up wrong.
Refer to online documentation to find out what the emmitter, collector
and base are for your particular transistor.
Individual writeups as usual.
Show your circuit and explain how it works.
Due Tuesday, Feb 18, 2020.
Tuesday, Feb 11, 2020.
- Class activity: Discussion of basic electronic components.
Thursday, Feb 13, 2020. Class Canceled
- Class activity: Discussion of basic 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).
Laboratory Exercise 4
- Assignment: Lab 4. You will implement some simple control
systems involving LEDs and switches using an Arduino Uno.
You will need to have loaded the Arduino IDE onto your computer.
- 1. Bring up the Arduino environment, plug in your Arduino,
and get the "blink" program to work.
- 2. Wire up your own (green) 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 (red) LED and get it to blink alternatively
with the first one.
- 4. Modify your program so a "while" loop is used to implement
green 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.
You can flash red to indicate yourself you have exited.
Don't forget to use a "pulldown" resistor (~100kOhm).
It is a good idea to use a "protection" resistor (e.g. ~4.7kOhm) on
the other side of the switch, as it is possible to
burn out or otherwise negatively effect the Arduino if a raw 5V line
is accidentally attached to a port that has been initialized as OUTPUT
and set to LOW.
Put a second such loop blinking the red LED after the first.
Your push-button switch should now toggle between the two modes.
(start green, 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 about 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 25, 2020.
Tuesday, Feb 18, 2019.
- 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)
Thursday, Feb 21, 2019.
- Class activity: Introduction to motors and how they work
- Assignment: Read the "Driving Motors" section of the "Robot Manual"
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)
iii. Touching the terminals of a 100K Potentiometer while it is in use
can severely effect the readings. Your skin is slightly conductive.
- 1. Wire up the flashing-light Arduino circuit from last week
(push-button toggles between read and green flashing LEDs).
Use a 100K pulldown resistor AND a 4.7K protection resistor on your
push-button switch. (We don't need to accidentally blow any more Arduinos).
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 green LED is flashing, the servo
is sent a 1500 us signal (midrange position), and when the red 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
red 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 "red" 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 26, 2019.
- Class activity: Urchin-bot brainstorm.
- Assignment: Read the "Sensors" section of the Robot Manual.
Thursday, Feb 27, 2020.
- 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.
Tuesday, March 3, 2020.
- Class activity: Motor control and power issues.
"Magic" RC standard servo units.
Thursday, March 5, 2020.
- Class activity: Discussion of 3 Laws and design implications
for Urchin-bot.
March 7-22, 2020
- Class activity: Spring Break. Extended...
Robot Construction in the Time of COVID-19
Announcement 03/19/2020
We are going online!
By now you should have received a couple of emails from me, sketching next steps.
If you haven't, look at your official UR account. That is the contact I have.
I have not heard back from two of you (Abdel and Casey). If you two are reading this, find the emails in your UR account and respond to the contact ping as requested. The rest of you I have heard from.
Start checking the Facebook group for the class daily. I hope to use this as a discussion forum, and a place to exhibit your work.
As noted in one of my emails, UR classes start again on Monday, March 23. Please email me your Lab 6 writeup (on soldering) by that date (if you have not already). We will be starting a remote lab exercise on Monday. It will involve construction and fabrication using matboard, which we will use as the primary construction for the robot you are going to build at home. Details will be posted soon, but as noted in the email, you need to get yourself a
few tools and materials. To reiterate, these include the following:
- Matboard, at least .050" (1/20)" thick. This is an art/craft product used for
mounting pictures. You can get it at art and craft stores, framing places, or online.
(e.g. at https://www.fineartstore.com/p-11990-canson-mi-teintes-art-amp-framing-board.aspx -
a great Rochester resource btw).
Two 16" x 20" pieces, or one large sheet should be plenty.
- Utility knife and/or tinsnips - latter needed if you want to cut
curves, though the first exercise will not involve curves.
- Metal straightedge/ruler for guiding your knife.
- Masking tape (new) - for holding/aligning assemblies prior to gluing
- Super glue (not thin version) and white ("Elmers") glue.
- Protractor and compass for laying out angles. A divider (often found
in compass sets) may be useful as well.
Monday, March 23, 2020.
- Laboratory 7 at home
Due: Friday, March 27, 2020. Email write up to Prof RC,
and post a pic of your objects to the facebook constructors group.
Tuesday, March 24, 2020.
- Class activity: Quiz.
Answer the following questions and email the answers to me by 12:00 noon EST.
Find out about the Hitec HSR-2648CR servo unit.
- In what important, qualitative way is the unit different from the
units we have previously worked with in Lab?
- Give 3 numeric specifications for the unit that would be important to know if
you want to use it in a robot.
- Class activity: Mystery object.
At or around 9:40 a picture of a mystery object will be posted to the FB Constructors
group. Post your guess as a comment/reply. First correct wins!
Thursday, March 26, 2020.
- Class activity: Quiz.
Suppose you have an 18 oz robot with a single drive wheel 3 inches in diameter.
How much wheel torque is required to drive the robot up a 30 degree incline.
Recall that torque = force * radius.
Email me your answer by 12:00 noon EST.
- Class activity: Mystery object.
At or around 9:40 a picture of a mystery object will be posted to the FB Constructors
group. Post your guess as a comment/reply. Be as specific as possible.
First correct wins!
- Class activity: More materials.
For the construction phase to come, you need to acquire a few more tools and materials.
- 3/4 inch wide hook-and-loop (Velcro) tape, e.g.
this.
You don't have to buy it on Amazon, you can find it at Lowes etc.
You should have at least 2 feet of it. This is useful for
holding large components together in a way that is secure, but can be detached.
(e.g holding an Arduino assembly, breadboard, battery, etc. to a robot chassis.)
- An awl, icepick, or even a 4d-6d finishing nail attached to a handle.
This is needed to make small holes in matboard for a handful of screws used to attach
the servos and a few other components.
- A small screwdriver set that includes a 2.5 mm hex driver (or Allen wrench), e.g.
this.
If you don't already have such a set, it is something every computer scientist and
robot constructor should have.
Saturday, March 28, 2020.
- Laboratory 8 at home
Due: Friday, April 3, 2020. Email write up and design drawings to Prof RC,
and post a pic of your design drawings to the facebook constructors group.
Tuesday, March 31, 2020.
- Class activity: Quiz.
Recall how you wired a push-button switch to provide input to the Arduino, using pulldown and
protection resistors. Now suppose you have to use a power source of 6 volts rather than the
internal 5-volt supply of the Arduino. But you don't want to feed 6 volts
(or anything more than 5) into the digital port because you might damage the microcontroller.
At the same time, you don't want to draw more than milliamp (through the protection and
pulldown resistors) when you close the switch. Bearing in mind that the input impedance of the
port is on the order of 100s of kilo-Ohms, show how to choose the pulldown and protection
resistors so that the objectives are achieved (less than 1 mA current, and 5 volts or a bit less
into the port). Note this is a practical exercise for Homebot.
email me your answer by 12:00 noon EST.
BR/>
- Class activity: Mystery object.
At or around 9:40 a picture of a mystery object will be posted to the FB Constructors
group. Post your guess as a comment/reply. Be as specific as possible.
First correct wins!
Thursday, April 2, 2020.
- Class activity: Quiz.
Suppose you have a strip of your matboard 1 inches wide and 4 inches long + a bit for support.
With the strip laid flat and the ends supported 4 inches apart, how much force does it take (at center)
to cause structural failure of the element? (Hint/detail do an experiment).
If you laminated two layers together, what is the failure load of the thicker element?
(Hint/detail, compute a theoretical value on the basis the first experiment,
and then compare it to a measured failure value).
email me your answer by 12:00 noon EST.
- Class activity: Mystery object.
At or around 9:40 a picture of a mystery object will be posted to the FB Constructors
group. Post your guess as a comment/reply. Be as specific as possible.
First correct wins!
Monday, April 6, 2020
- Lab 9:
As you should know by now, the lab this week is to build the chassis for your Homebot.
Specifically, build the framework that holds the servos and install them with their wheels
and whatever balance skids, balls, or wheels are part of your design. You do not have to
mount batteries, breadboard, arduino et.c yet, but make sure there is a place to
put them.
I have looked over
the basic engineering drawings for most of you and made recommendations.
So now is the time to put the pedal to the metal. Get started early, as you will likely
have to recut and rebuild as practical issues manifest themselves.
If you encounter problems, please feel free to email me and send pics.
Writeup by Friday (including pictures of your chassis), and you should also post a pic
to the Constructors group for all to admire.
The sensor packages have been mailed out, and you should get them in a couple of days
(unless you are out of the country). They include a pair of bump switches
(and piano wire for turning them into feeler whiskers), long-range and short-range
IR distance sensors, a 2nd battery box, and as an extra, a tiny piezo-electric speaker
that you can use the tone() function in the arduino IDE to make beep. Or even play a tune.
Tuesday, April 7, 2020