Robot follow person

Hi,

I wanted to know what is the best way to setup a robot to follow a person. This will some sort of autonomous bot that will have wheels and follow a person. What type of sensors would you recommend? A friend recommended a ultrasound transmitter, but i think that the bot will get confused if something were to cross its path and essentially loose the person. PLease lend your advise.

Thanks

You may want to search the old forum for golf caddie as there was some lengthy discussion there to make a golf bag caddie that followed the golfer around.

I am reading over what that person did right now and it is some pretty intense coding. He used some type of GPS module for his. I was thinking something along the lines of mounting something on the person and having the robot follow that signal. I was thinking IR, but it seems to have a lot of noise.. Would i be able to get off with an IR transmitter and receiver? Is a GPS my best bet?

search the old forum for ir beacon.

and it is some pretty intense coding

It's a suprisingly difficult problem.

Would i be able to get off with an IR transmitter and receiver?

Caution: scroll down to "Marathon Robot - October 1997" http://www.theregister.co.uk/2000/07/04/home_truths_bionic_man_takes/

mounting something on the person and having the robot follow that

A serial cable ? :wink:

I would go for sound beacon, and let the robot do sweep scans with a microphone.

AWOL:

and it is some pretty intense coding

It's a suprisingly difficult problem.

Would i be able to get off with an IR transmitter and receiver?

Caution: scroll down to "Marathon Robot - October 1997" http://www.theregister.co.uk/2000/07/04/home_truths_bionic_man_takes/

Well what if i were to operate this thing only inside for the time being. Keep in mind that it would be a well lit room where sunlight could come in. Would the IR work?

robtillaart:

mounting something on the person and having the robot follow that

A serial cable ? ;)

I would go for sound beacon, and let the robot do sweep scans with a microphone.

Wouldn't this give a huge amount of noise to the receiver, given that this would be operated in a room where there may be people talking loudly?

Well what if i were to operate this thing only inside for the time being. Keep in mind that it would be a well lit room where sunlight could come in. Would the IR work?

You could start by testing with a simple IR receiver module like below using a TV IR remote control as the beacon. The IR signals are modulated at ~38khz, which makes them generally immune from normally occurring IR sources. I think I've seen the receiver modules on bots mounted on servos that panned left and right to find where the IR transmitter is located.

http://www.radioshack.com/product/index.jsp?productId=2049727

I've been considering a similar project. However, if you use anything IR-related, as soon as you go outside, you'll be bombarded with noise.

I have a few tests to do with a few sensors... not sure how it'll go (probably won't work) and I'll undoubtedly lose this thread when I do finish the tests. However, an IMU may be something worth looking into.

KE7GKP: Remember that after you solve the "BEARING" (which direction?) problem (IF you can solve it!), you then have the "RANGE" (how far?) problem which is even WORSE. How does the robot know when to slow down or stop to avoid running over the person? These are far more difficult problems that you probably realize. People have been working on them for years.

good point. Ill try to see if i can work with the IR for now and see what i get. For the range, i was thinking an ultrasound, or if the IR reading receives a signal higher than a certain amount, which would be the case if it were right next to the person, then it would stop. Anybody have any other ideas i could use? im sure in the end it will not be as sophisticated as i want, given that i only have the semester to do it. But I will try! hahah

You could have two of the IR detectors on a bar on the servo like a pair of eyes. Put little blinder tubes on the detectors so they only see sraight ahead. Rotate the servo and when the first detector has a peak, record the servo position. When the second servo has a peak, use triangulation with the first servo position to calculate a distance.

I am working on a sketch to have a robot follow me. It uses a ping sensor. I decided against IR, since I wanted it to work outside as well as inside. My first test was to have the sensor look forward and follow me in a straight line until it gets within a specific distance and then it will stop. If I walk too close to the robot, it will back up. This works reasonably well. The problem I am having is when I rotate the sensor left, forward, and right to detect the closest object. The code is straight forward and should work, except it doesn't. Has anyone else tried this approach?

Jerry

jadkins: The problem I am having is when I rotate the sensor left, forward, and right to detect the closest object. The code is straight forward and should work, except it doesn't.

Post your code. I assume you are panning the ping sensor with a servo and storing an array of ping results in order left-to-right or right-to-left, then using the closest result to get a bearing on the human?

Keep in mind that if you block the source, your bounces will have the strongest signal. I was debating a similar project because I'd love to have my luggage follow me on its own, but I couldn't work out how to judge distance either. And GPS don't work inside.

I have changed the code to take several reading from the servo driven ping sensor sweep. I capture the readings into an array. I then use a function that returns the reading that represents the closest object in inches. Now, I have to figure out how to use the reading to make precise turns with DC motors. If it were continuous rotation servos driving the wheels, it would probably be easier, but with DC motors, even a variation of the batteries driving the DC motors will make a difference in the turn. I am using the vehicle in this YouTube tutorial, which is using an obstacle avoidance sketch.

http://www.youtube.com/watch?v=dKHN3Ue4K1I

jadkins: I capture the readings into an array. I then use a function that returns the reading that represents the closest object in inches. Now, I have to figure out how to use the reading to make precise turns with DC motors.

Check which array element you get the closest reading from. Lower numbered will be left (or right, depending on which way the servo was panning) and higher numbered array indexes will be right (or vice versa).

with DC motors, even a variation of the batteries driving the DC motors will make a difference in the turn.

If you need really tight precision, then quadrature encoders on the wheels or motor shafts will let you measure movement. But that's rather expensive/complicated and there's an easier way: you can use empirical measurements to determine how much battery voltage affects motor speed.

Add a resistor voltage divider between battery + and - and connect it to an analog pin. Select resistor values such that on full batteries the voltage divider reads about 1.0 to 1.1V (make sure both resistors are over 1K):

http://www.raltron.com/cust/tools/voltage_divider.asp

Set the Arduino analog reference to the internal 1.1V:

http://arduino.cc/en/Reference/AnalogReference

Now in software you can measure battery voltage. Time (with a stopwatch) how long it takes to execute a 90° turn on both fully charged and almost dead batteries (also note the analog pin readings for both cases). Using this information, you can write a simple equation to decide how much to adjust turn times based on the battery reading. The actual battery discharge graph will be a curve rather than linear, so you might want to take another sample with half-charged batteries, depends on how accurate you want to be.

I've been doing the same project. So far I'm using two laser distance sensors (As Pings were unreliable outdoors) to detect objects left and right. If both are actvated it means there is an object dead ahead. Then I use a pir sensor to check if the object is a person or inanimate. The issue being the cooldown. IS there a way to remove the cooldown by using a transistor switch to cut power on and off rapidly?

The issue being the cooldown.

What are you talking about? I've never heard PIR sensor and cooldown used in the same sentence, or paragraph, before.

PaulS, PIR sensors have a cooldown. The time varies with each sensor but usually about 8 seconds. Meaning once they read high they will stay high for that long. If you go on any website that sells them you will read PIR and cooldown in the same sentence. If you find one with an instant on/off time, please share the link. It would save me a lot of time trying to workaround the problem

Hi,

The issue being the cooldown. IS there a way to remove the cooldown by using a transistor switch to cut power on and off rapidly?

From what I have seen if you turn the PIR OFF, then ON, you have to wait a length of time for it to stabilise, that is establish the steady state or cool-down level before it can again detect a rise in IR energy.

Tom..... :)