Keywords

These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.

The GrabberBot we built in Chapter 15 performed its tasks by lifting and bringing the scroll back. The bot for this next challenge will perform its tasks by doing the opposite—pushing the figurines into their proper locations.

Why pushing? Well, lifting the figurines is definitely a possibility. And you might choose to attack the problem using a lifting motion again. But for the purposes of designing my bot, I’ve decided that I want to keep the figurines in contact with the floor to avoid dropping them as well as reduce the risk of tipping my bot over if the statues are heavy. With that in mind, let me walk you through the planning and design of my PushBot.

PushBot Planning and Design

In Chapter 19, you can view my final solution for the PushBot . I have a dozen different ideas for how I plan on completing this challenge, and they all involve exerting a pushing force on the figurines. But I’m not going to lock myself into any particular design just yet. So get out a blank Design Journal page and a pen and follow along with me as I begin to design this new bot.

Note

There should be one blank Design Journal page left in the back of this book (if you used one each for Chapters 2, 6, 10, and 14). If you need more pages, feel free to make photocopies of the Design Journal page or visit the Source/Download section of the Apress web site ( http://www.apress.com ) to download the page in PDF format.

In the Robot Name box, write PushBot or another name for your new bot; once you’ve decided on your bot name, move on to the description.

The Robot Description

This little bot has some repeatable actions to perform. There are a variety of ways for it to complete the challenge, but until we better understand some of the problems the bot will encounter, it will be difficult to be too specific on which sensors it will use. Because of this, I’m going to keep my description as generic as possible and avoid specifying which components might be used.

Take a look at my Robot Description in Figure 18-1. Keep in mind that I have plenty of time to provide more specifics later on the Design Journal page.

Figure 18-1.
figure 1

The PushBot description isn’t specific yet

It’s very generic, isn’t it? I haven’t specified how the bot will detect the figurines or how it will push the figurine. I haven’t even decided how it will know when the figurine is on the black pressure plate. These are things I will definitely need to decide, but I don’t have a complete picture of my bot in action just yet.

As with the GrabberBot design process in Chapter 14, I want to complete the Design Journal page before I actually begin to do any kind of building or testing. Why try to begin designing when you haven’t even begun to consider the limitations the bot will encounter? To be truthful, my mind is already considering various options, but again, I’m not going to start building until I’m done with the planning and design process.

Now, that doesn’t prevent me from giving my robot’s description a little more thought. Let’s walk through a couple of my bot’s description sentences in more detail.

Consider the very first sentence: “The PushBot will start from the pedestal and move toward the first figurine (leftmost figurine).” I might as well take advantage of the fact that I can point my bot in the direction of the first figurine, right? If I were unable to see the first figurine, I’d probably need to add a sentence such as “The PushBot must start from the pedestal and FIND the first figurine,” but luckily I won’t have to do this. I can see the figurines the bot will move, and I’ll use this to my advantage to get the bot off to a good start.

Take a look at the second sentence: “The bot must detect the figurine and not bump it or tip it into the back wall (pressure plate).” Although I didn’t specify it, for the bot to detect the figurine without touching it will force me to use the Infrared Sensor. That’s fine. I didn’t specify the Infrared Sensor in the description, but just considering the statement has already helped me define how one sensor will work with my PushBot.

My next sentence is “The bot must push the figurine onto the black pressure plate without tipping the figurine.” Well, since I know I’m going to push the figurine, I know my bot will need to move forward and actually touch the figurine. Now, imagine a figurine that’s about one foot tall and has a small round base. If you want to push it along the floor, what do you think is the best location on the figurine to push so it won’t tip over? The answer is obvious—the base. Pushing from the bottom of the figurine will reduce the risk of it tipping . . . but not completely. It is still possible that pushing at the bottom will make the figurine tip toward the bot. Don’t believe me? Try it.

Place an object like a bottled drink or something similar in size to the figurine (about one foot tall and three to four inches in diameter). Push quickly at the bottom of the object and see whether it doesn’t tip back toward your hand.

What does this tell me about using my bot to push an object? It tells me that I’ll need my bot to push slowly. It also tells me that I might want to consider some sort of cage or other construction that will surround the object and prevent it from tipping forward or backward. But again, I don’t need to consider the details just yet—I’ll wait until the Mindstorm section before I start considering any details for accomplishing these tasks.

The remaining items for the bot’s description are simply variations—find a figurine and push it. I’ll need to do this for the two additional figurines near the wall and then for the figurine at the foot of the ramp.

What I need to do next is put the steps my bot will perform into the ordered Task List.

The Task List

I’ve broken down the PushBot’s tasks in Figure 18-2.

Figure 18-2.
figure 2

The PushBot Task List has a lot of repetitive actions

I’m not going to cover every task in the list; as you can see, there’s a lot of duplication of steps. This is a good thing, though. It should make programming the bot fairly straightforward when you get to Chapter 20. When you’ve got a bot that performs a lot of similar actions, you can look for ways to simplify the programming.

For now, though, let’s look at a few of the tasks in more detail.

The first task is “Move from pedestal to first figurine without touching it.” I know the distance from the edge of the pedestal to the first figurine. Just as I demonstrated in Chapter 16, I can program my bot later to move a specific distance forward before it begins trying to detect the figurine.

The next task, “Detect the figurine and push it onto pressure plate,” is still a little vague. I mentioned earlier that the Infrared Sensor would be useful to keep the bot from having to touch the figurine. But once the figurine is detected, I’ll also need to somehow stop the bot from continuing to push the figurine beyond the pressure plate. I’m left with the Touch Sensor, the Color Sensor, and the Infrared Remote—any of these could possibly be configured to assist the bot with stopping properly. Right now, though, I don’t need to decide which one. I’m going to put off making that decision until I begin to build.

The last task I want to cover is “Reverse direction and move to second figurine.” This will involve some careful programming, but given that I know the measurements from one figurine to another, I should be able to program my bot to make the proper turns to put it in front of the two remaining figurines.

The other tasks in the Task List are, again, just variations of the same movements. After the bot has pushed the three figurines near the back wall, I’ll have to get it placed properly so it can move up the ramp and push the final figurine.

With all the movements the bot will make, are there any obstacles to overcome? Let’s consider those in the next section.

Limitations and Constraints

When I was considering the constraints my bot would be facing, I took another look at the burial chamber. But the bird’s-eye view you saw in Figure 17-2 doesn’t tell the entire story. Take a look at Figure 18-3, and you’ll see the constraints and limitations I believe my bot will encounter.

Figure 18-3.
figure 3

The constraints on the PushBot

Because my bot will need to fit on the ramp, it must be less than 2 feet in width. While there doesn’t appear to be a limitation on how tall the bot can be, conservative design tells us to minimize the robot’s height. Keeping the bot’s components lower to the ground will reduce the risk of it tipping over when it moves up the ramp.

A very important observation from Figure 17-2 is that the measurements are not 100% exact. Take a good look at it, and you can see that many of the notes are estimates. It’s difficult to measure the exact distance between the figurines, but by observation two feet appears to be a safe guess. I’ll make sure my bot has plenty of room to turn and move so it doesn’t accidentally bump one figurine while turning and/or pushing another figurine.

We know that the maximum weight of an adult spider monkey is approximately 10 pounds. None of my robots have exceeded that weight so far, but I’ll need to be careful to keep this bot under that weight as well or the pressure plate on the floor will trigger the trap.

It might not seem like a lot of constraints, but every constraint puts more limitations on my bot’s final design.

These will come into play when I begin the Mindstorm section of my Design Journal page in the next section.

Mindstorm

Now I can start putting down into words some of the images that are forming in my mind when I begin to think about the design of my PushBot. I’ve put my collection down on my Design Journal page, and you can see it in Figure 18-4.

Figure 18-4.
figure 4

The Mindstorm entries for the PushBot help us start developing the final design

Let’s go through some of the Mindstorm items and explain the reasoning behind them. The second one, “I’ll program my bot with distances-to-travel to get it into position for the three figurines,” will allow me to position the bot in front of each figurine without worrying about touching or tipping them over. As long as I program my bot to stop before the maximum distances shown in Figure 17-2, I should be safe. I’ll have the bot back away from each figurine a good distance so it has plenty of room to safely turn and navigate to the next figurine.

The next Mindstorm item, “Since the bot is pushing the figurines onto a black obsidian rock, I might be able to use the Color Sensor again to detect the change in color,” is a tried-and-true method I used with the SnapShotBot. The Color Sensor will be programmed to detect the change in color when the bot pushes a figurine onto the black pressure plate (black obsidian rock). This will require placing the Color Sensor on or very near the cage mechanism I intend to use so it detects the black pressure plate quickly.

Another Mindstorm item I find important is this one: “To avoid bumping the figurines, I’ll place the cage mechanism on the back of the bot until it is needed and then spin the bot around to approach the figurine.” What I’m envisioning is a grasping-type mechanism that will surround the figurine like a shell to protect it as it is being moved. This shell will need the ability to open and close; because of this, I think the shell will be fairly wide when it is fully open (but less than two feet—remember the constraints). I’m concerned that the cage mechanism might bump another figurine if the bot should turn left or right, so I’m going to try to place the mechanism on the back of the bot. When the Infrared Sensor detects a figurine, the bot should stop (and possibly back up a little bit), spin around, and then approach the figurine slowly. And how will it know when to stop and close the cage on the figurine?

For the answer, consider the next Mindstorm item, “I might be able to use the Infrared Remote to help the bot correctly position itself near figurines.” I used the Infrared Remote to tell the StringBot when to stop, so why can’t I use it here? What I’ll do is watch my bot approach the figurine (slowly). When it is in position, I’ll yell “STOP,” push the button on the Remote, and the bot will then close the cage and proceed with pushing the figurine forward until the Color Sensor is triggered by the black pressure plate.

I do this four times for four figurines, and the burial chamber is ready to be explored by the team. All that’s left before I begin to build my PushBot is for me to consider the best placement for the sensors, motors, Brick, and cage mechanism. This is where the final section of my Design Journal page comes into play.

Sketches

This is going to be a strange-shaped little robot. But, then again, all the bots have been a little unusual. (And admit it, that’s the best thing about building robots—they’re all unique!)

With this bot, it appears I’ll be using every sensor—Color, Infrared, and Touch (for the Start button again—my favorite). I’ll also be using all three motors and constructing some sort of cage mechanism.

I have some ideas on the placement of all these items, so take a look at Figure 18-5 and you’ll see some of my initial thoughts on the PushBot’s shape.

Figure 18-5.
figure 5

Side view of the bot approaching the figurine

I’ll use basic shapes again to represent the motors, Brick, and sensors. I just want to start developing an idea so when I actually start building, I’ll have a “target shape” to shoot for. My final design might not be exactly what is drawn, but the overall shape should be close.

Now that the sketches are done, it’s time to start building and testing. In Chapter 19, I give you the steps to build my version of the PushBot.