Class: Informatics, Computing, and the Future
Instructor: Dan Berleant
Transcriber: Brooke Yu
Date: Tuesday, April 16, 2013
Professor: Here's a diagram reminding you how to plug those in with the arrow facing outward, just so you know. So you weren't here to see it before Collin. Did you get it working?
Male Student: I mean, the lights are on.
Professor: Alright, great. Just go ahead and grab a robot. Also, robots are fun, maybe not as much fun as your next homework. But they're becoming less time consuming so you can work on your project.
So take a look at the homework to see if you have any questions.
Alright, so those who weren't here last time might have to rely on your neighbors or ask for help in this exercise, but I think you'll be able to pick up the essentials from last time.
So any questions on the next homework? Anything? Projects? Anything? Let's take a look at what we have going on. Next time we already have four people signed up for presentations, so next time we'll just have presentations.
The date after that, there's two people who have to give presentations. If we have time left over, we might talk more about robots. We might not use the real robots because of time, but we'll talk about them. This is Thursday [On board.]
Next Tuesday, a week from today. Then a week from Thursday, three presentations. Then way off on the 30th, three more presentations. There's two people in the class with the initials "R.M." On the last day of class, two more presentations are scheduled.
There will not be a final exam, and you don't have to show up unless you're making up assignments. You can hand in your project via email. If you're behind on the homeworks, you have to come the day of the final to make up assignments. Any questions? We're getting close to the end now, so I want everyone to be reasonably clear on things.
To review a couple of things- you've already got your robots hooked up. Does anyone remember what the first number that you send to the robot is?
Male Student: 121?
Professor: Close, 128. And what does it mean?
Male Student: Like "recognize me" or something like that.
Professor: Yeah, it's like the start command. Okay, so the first one is 128. The second is 131 or 132. 131 gives the robot some control over its fate, so if you tell it to roll over the edge the table it'll stop. 132 gives you full control over the robot's fate. We're going to deal more with 131 today.
If you want to run a program, you first type 128 131 or 132.
128 is start. 131 means "take partial command." And 132 is "take full Command." Any time you tell the robot to do anything, you have to preface it with these.
Male Student: Do you do these individually or put them all on the same line?
Professor: You can put them all on the same and it should be fine.
So if you try it now- try 131 this time. The little light should go off meaning that you haven't told any lights to be on, okay?
So everybody send these numbers and make the light go off.
Is everybody's little light off? Okay.
So last time we controlled the lights. Last time we made it do music and stuff too. So let's focus on motion today
What makes a robot a robot? It can move! Once you set the initialization and take partial command, you can tell it to move. Here's a movement command. Alright, someone made it work. Be ready to grab it because it'll break the cord or mess something up if you make it go too far because the wheels grip pretty well.
Try this command- it's five different numbers which I'll explain after you get it working.
And help your neighbored out if they weren't here last time.
If you run into problems and it doesn't work, just raise your hand.
It'll break your computer if you're not careful.
Male Student: It doesn't work with 131 for some reason.
Professor: Okay, let's check it.
Male Student: Oh, it was turned off.
Professor: Aha. That's easy to do. Power cycle it if it doesn't work. Turn it off and turn it back on.
Okay, let's see what's going on here with that motion command. As you know from last time, you know, as a programming language it's not very user friendly. So 137 is the command for going- or driving. It has four arguments to it which is why this line has five numbers- the command and its four arguments.
So 137 says drive. The next two numbers are two parts of one argument- 0 100 says go 100 mm/sec. So this is the one's place and this is the 256th place so if you have 100 here, that's 100, so 0 100 says go 0 times 256 + 100 mm/sec.
And then there's two more bytes. This is the direction, except it's a special direction. This is very arbitrary. 128 0 means go straight.
Male Student: If you put 100 100, it likes to go fast.
Professor: Yeah. If you put 100 here and 100 here, it should be 100 times 256 + 100 mm/sec. But there is a maximum speed.
Male Student: What's the max speed?
Professor: Well, I don't know. I have a document that says. It's not outrageous. Okay, so play around with that. Try to find not the fastest- well, you can if you want. But try to figure out the slowest speed- you'll be able to notice when it won't go at all. Try to figure out the slowest speed to make it go.
So while you're figuring that out, I'll circulate and help make sure everyone is on the right track.
Professor: Yes, you can go backwards.
How about you? How are things going?
Professor: Okay, so someone got it to go in circles. How did you do that?
Male Student: Change 128 to 0.
Professor: Since you mentioned it, I'll try it here. I don't know what the numbers are for going backwards. How slow could you make it go?
Female Student: 10
Professor: What happens when you put a 9 here?
Male Student: 8 works for me.
Professor: Alright, so your robot would handle 8 mm/sec, and others wouldn't even handle 9. I guess that's because the motors have manufacturing variability. Anyone get it below 8?
Female Student: Mine goes on 8, but it won't go on 7.
Professor: What else? How many people have tried the 158 command? A couple people did. Let's talk a little about that so it'd be nice to make so you could send the go command and not have it go until you're ready for it to go. One way to do that is the 158 command which is a "wait Command." It tells it to wait for something. There are several options for this.
Option 5 is a bump on the bumper. If you type 158 5, then the robot will not do anything until you tap it on the bumper. The bumper is right here, so if you send the 158 5 command, it'll wait until you bump it.
So here, I've strung this together with a go command. 158 5 says wait until you bump it, then 137 says go. So this robot won't do anything until you tap the bumper. When you tap it, it'll start going.
At the end of class today, it'd like to have everyone bring their robots down here and tap the bumper without the cord attached then have it do something.
Male Student: So the program will be there until you turn it off?
Professor: Right, it'll be there until you turn it off.
Male Student: So you can write something to it, unplug it, put it on the ground, and it'll do it?
Professor: Yes. You can also pull the plug out while it's doing it and it'll keep going, but please don't do that.
Okay. So give this a shot and we'll go on from there.
While you're experimenting, I'm going to make a note on the board.
How are things going over here?
Female Student: Good.
Professor: Things working out?
Male Student: Yep.
Male Student: Mine says "battery current 0."
Professor: I don't think so, because the light is on.
Male Student: Okay.
Professor: A lot of people are realizing that if the robot is a little bit off the table, this cliff sensor will be activated and it won't go. The robot will be afraid to go.
Professor: Okay, let's see what else we've got here.
Alright, well, things get even more complicated then this. So here's a small example of a complete program. Let's analyze what it does.
Actually, here's a new command, 156, which I'll explain, and 157 and 152. Let's see what they do.
152 is a script defining command. This just means we're going to define a longer program. And how long is it going to be? It's going to be 17 bytes. So the first number after 152 is the length of the program.
So it's 17 bytes, and here are the 17 bytes. It's 17 bytes long.
Okay, so what is in these 17 bytes? The first five bites are our go command. It says drive 44 mm/sec and drive straight . if there was a 1 here instead of 0, it'd be 3 meters per second.
After the go command, there's a 156 command, which has 2 arguments. It says wait until you go a certain distance- until you go 144 millimeters. This is basically going to drive until it goes 144 millimeters and then it'll go on to the next part of the program. So go 144 millimeters, then go again... notice instead of 128 0, we have... sorry, instead of 128 0, we've got 0 1 for the last two arguments.
128 0 means go straight. 0 1 means spin counterclockwise. So it'll go 144 millimeters, then it's going to go again, but this time with a 0 1, so it'll spin counter clockwise.
Then it's going to execute a 157 command which is another wait command, which says "wait until you've gone 90 degrees." Then 153 says "repeat the Script." So 153 is a loop command. Let's review
It goes 44 mm/sec. It waits until it goes 144 millimeters, then it'll spin counterclockwise until it has gone 90 degrees, then it will go back to the beginning so it goes straight again for 144 millimeters.
So it'll go for 144 millimeters, then it'll spin counterclockwise 90 degrees, go another 44 millimeters, spin counterclockwise 90 degrees, and it'll go in a square. If 144 millimeters is too much for your table, you can make it go 10 millimeters. If you knew how to do the math, you could make it go in a triangle or a pentagon or whatever you wanted to do.
152 says define a script, 153 says run a script. In essence, that's the script- go and turn, then it repeats by going back to the beginning.
To start it out, you have to do your 128 131. You might have to put it on the floor for this, or use a really small square- make it go 10 millimeters instead of 144. But you can experiment with it.
You have to run the script the first time. All this does is define the script with the 152 command. To run it the first time, you have to send a 153 to run the script. So there's a 153 here which says to run it again, but you can't repeat it unless you've already run it once so you have to use 153. If you want, you can wait for a bump and then run the script.
I know this is a lot. Just experiment with it and see what you can do.
If the cord is getting really twisted, you might want to unplug it and untwist it, then plug it back in.
While you're experimenting, I'm going to write the commands we've been using on the board for reference.
I've written all the commands we've looked at so far on the board.
Questions? Raise your hand if you have a question and I'll try to come by and help you. No questions?
The next step them is for you to connect all of these commands together. Make a script so that you can bump the bumper to run your program so we can bring them to the front of the class.
If you remember from last time, you can make it go with script, make it play music....
How are this going over here?
Female Student: I don't think mine is working.
Professor: How are things going with you? If you're sending a 131 command, you should make it stop by just picking up the side of it. Are you using 131 or 132?
Okay, yeah. So if you just pick up the side the cliff sensor will activate.
If anyone wants to see what other commands are available, raise your hand and I'll bring the document around. We only have 25 minutes left. So work on a script you can show the class at the end. Try experimenting to make it do something after you push the bumper. We'll spend the last 7 or 8 minutes of class doing that. So you have about 17 minutes left to develop your script.
Be really careful the those cables because they bend really easily. We've already had a couple bend.
Male Student: So to add more bits, does that have to match the rest of numbers?
Professor: The 17? Yes.
Male Student: Does that count spaces or just numbers?
Professor: Just numbers. If you put an 18 there but you only have 17 bytes, it won't go until it gets the 18th number.
Professor: Not really. There's no actual stop command. You just have to pick up the edge or something.
Male Student: Like the song thing. Can you not just add to the front of this and then whatever you already have?
Professor: Yeah, you could run the song and then do a 153.
Male Student: Well, can you look at this?
Professor: I guess now is a god time to make sure you can test whatever you have it to do so you can bring it up to the front and it'll work. Make sure you can tap the bumper and it'll do something. Then in a couple of minutes we'll do the demos.
Alright, if you're ready to demo it, put it up here. I realize that just spending a few minutes in one class is not enough to get it to water your plants, but that's okay.
Are you ready?
Female Student: One more try.
Professor: Haha, okay.
If you're using a 131 command, I don't think it'll let you move it or pick it up, so you might have to use a 132 command maybe we should just demo them at our seats
Alright, let's demo them at our seats.
Do you want to get up and watch each others demos?
Male Student: I'm working on mine.
Professor: Okay, just show me then.
Once you've shown your demo you can put them back and you can go.
Female Student: I got it to go at one angle, but I couldn't figure out how to turn it.
Okay. Oh, it went fast and then slow.
So how did you make it- did you have a wait?
I see. Cool, okay.