To LUGNET HomepageTo LUGNET News HomepageTo LUGNET Guide Homepage
 Help on Searching
 
Post new message to lugnet.roboticsOpen lugnet.robotics in your NNTP NewsreaderTo LUGNET News Traffic PageSign In (Members)
 Robotics / 12048
12047  |  12049
Subject: 
Re: Autonomous Robot
Newsgroups: 
lugnet.robotics
Date: 
Wed, 9 Aug 2000 18:52:30 GMT
Viewed: 
878 times
  
in article FyyAqy.5zy@lugnet.com, Ian Warfield at ipw47@hotmail.com wrote on
8/7/00 6:56 PM:

I thought of another possibility for robot coordinate recognition.  It's
rather unorthodox, however, and requires some special equipment and setup to
make it work.  Still, in the interest of creative discussion...

That's what this is all about, after all.  Type on!


Building off the base station idea mentioned earlier, set up a single station
in the middle of the room/arena/whatever.  This station incorporates an extra
RCX, two motors, two rotation sensors, and two laser pointers, one mounted on
the tower at ground level and one mounted about two feet high.  The robot
itself sports a laser detection sensor.

There are two ways to design a laser sensor - directional or
omnidirectional.  Either way creates problems with your approach, see below.


Here's the tricky part... use polar coordinates.  Suppose the robot wants to
know where it is relative to the tower.  It stops, sends out an IR call for
help,

Hopefully, the base station is within IR range of the robot, and the robot
is facing towards the base station.  Perhaps the base station should be
stuck in a corner so its IR window faces the whole room.

and enables its laser detection sensor. The base station receives the
call, turns on the ground-level laser pointer, and starts rotating the tower.
As soon as the robot detects the ground-level laser it signals again, and the
tower stops rotating.  Next the base station switches off the ground-level
laser and switches on the high-level laser.  The high-level laser zeroes
itself perpendicular to the floor and starts sweeping upward towards
parallel.  When the robot detects this laser, it signals again, and the tower-
based laser stops.

Now the base station records the orientation of the tower via the turntable
rotation sensor and the angle of the high-level laser via the laser rotation
sensor.  The base RCX stores the turntable orientation provides the angle
reference.  It then multiplies the height of the tower (two feet in this case)
by the tangent of the angle of the tower-based laser to get the distance from
the base station to the robot.  Finally, it sends the ordered coordinate pair
to the robot, which updates its internal odometry and continues on its way.


This is a really cool idea.  I wonder if it will be accurate enough at large
distances from the tower, where small changes in angle of the laser create a
large movement of the laser spot.

One way to get around this is to use an internal RCX timer with its
millisecond (?) resolution.  The base station will have only one laser, at
ground level.  First it does a fast scan to discover the approximate angle
of the robot.  Then it does a slower scan across the robot again, which does
two things: gets a better fix on the location of the robot, and gives the
robot a chance to measure HOW LONG it takes for the beam to transit the
detector.  The knowledge of how wide the detector is, combined with
knowledge of how fast the tower was rotating (angle sensor and IR broadcast
from tower), should allow the robot to calculate its distance from the
tower.  The accuracy limitation here is not the resolution of the angle
sensor, but the latency issues of the RCX firmware and your code.  (And the
smoothness with which the base station can rotate.  Oil your turntable!)

But my main concern is the issue of the orientation of the robot.  If it has
a directional sensor, the robot has to be pointed right at the base station
to see its laser.  If you solve that problem by using an omnidirectional
sensor (shaped like a cylinder, for example), then your robot doesn't know
which direction it's pointing!  (Of course if your robot uses synchro drive,
perhaps this isn't much of a problem.)

I think the robot needs a way to be able to point itself at the base
station.  I like the previously-posted idea of a strobe light, flashing at a
particular frequency.  Or perhaps you could have the base station constantly
sweep the laser beam around like a radar.  When the robot gets confused it
starts rotating slowly until it sees the laser sweep past.  Now the laser
sensor has two different and incompatible tasks - precise determination of
the direction to the base station (which requires a narrow aperture) and
precise determination of the time it takes for a beam to transit the sensor
(which requires a wider aperture).  Two sensors?  A moveable shade or "gun
barrel"?  Something else, more clever than I can come up with?  Or back to
the two-laser base station you describe above?

How about this: both the robot and the base station have an omnidirectional
sensor and a laser.  The base station can rotate, sweeping the laser across
the room.  Also, the base station's RCX rotates with the laser so that the
IR window always looks out at where the laser is pointing.

When the robot wants a position update, it starts sweeping the room with its
laser by rotating in place.

Now when the base station detects the robot's beam, it knows that the robot
is pointing at it and it sends out an IR broadcast.  If the robot sees the
IR broadcast, it knows it's pointing at the base station, so it stops
rotating and sends its own IR broadcast to the base station.  Now the base
station starts doing its magic to determine distance and orientation.

If the base station is in a corner, or some other trick is used to ensure IR
connectivity, we're OK.  However, if not, then what?

Well, each unit will start scanning for the other one.  Every time one of
them sees the other's laser beam but fails to get an IR handshake, a portion
of its own 360 degree field of view is marked as "empty" in memory.
Eventually they will find each other by preferentially looking in the
unmarked portions of their field of view.  It shouldn't take too long - I'd
expect that with the wide field of view of the IR windows that each circle
only needs to be divided up into four or eight pieces.


In lugnet.robotics, Doug Weathers writes:
[snip lots of interesting thoughts of Cartesian coordinate recognition]
OK, let's look at the robot.

[...]

It may be possible to do good odometry with only a single angle sensor.  Set
up a Dorst adder/subtracter and hook the angle sensor to it.  Normally this
would be used to correct the robot's course while it's travelling in a
straight line, but this loses information about how far it's traveled.
However, you could adopt a policy of only running one motor at a time if you
need to know how far you've moved - if you can live with your robot lurching
along left/right/left/right.  Of course if you don't care how far you're
going you can run both motors and go straight, such as when you're following
a line or headed for a landmark.


It *is* possible to use a single rotation sensor with an adder/subtractor, but
not quite like that.  I have a robot driven by a differential transmission
(one motor fd/bk, one motor lt/rt) that has a rotation sensor attached to one
of the output shafts just before it drives the wheel.  The transmission allows
precise maneuvering in any direction, and therefore eliminates uncertainty
about what the rotation sensor is saying.

For example - when the robot is moving straight, the rotation sensor is
recording the straight motion of one wheel.  Since the transmission drives
both wheels equally, you can safely extend the sensor to the other wheel too.
When the robot is turning in place, the rotation sensor is recording the
turning of one wheel, which is an exact mirror image of the other wheel, again
eliminating the need to check the status of the other wheel.  You can set up a
formula that relates the number of turns of the wheel (varies with wheel
diameter) to the number of degrees turned.

Duh - of course.  <smacks own forehead>

What a great way to solve that particular problem!

Now we might want to turn our attention to the design of an omnidirectional
laser sensor.  I have some ideas but of course haven't tried any of them out
yet.  Sensor looking inside paper cylinder?  Sensor looking down at white
Lego "rocket nosecone" piece, or a shiny tinfoil cone?


HTH,

Ian

Thanks for the great ideas, and thanks everyone for reading such a long
post.

--
Doug Weathers, http://www.rdrop.com/~dougw
Portland, Oregon, USA
Don't spam me - I know how to use http://www.spamcop.net
"On a clear disk you can seek forever"



Message has 1 Reply:
  Re: Autonomous Robot
 
(...) You can work it out easily enough - if you know the height of the tower and the angle of the laser to the ground. For (say) a 1 meter tall tower, the error (in meters) is 1 / tan ( A ) - 1 / tan ( A + 1 ) ...so if the beam is at 45 degrees to (...) (24 years ago, 10-Aug-00, to lugnet.robotics)

Message is in Reply To:
  Re: Autonomous Robot
 
(...) a (...) the (...) reads (...) Sorry, Mario, I still didn't figure out your proposal. Could you explain that better? Did you (or anybody else?) already did that? Maybe if I can understand better looking at the code, if available... (...) that. (...) (24 years ago, 6-Aug-00, to lugnet.robotics)

37 Messages in This Thread:

















Entire Thread on One Page:
Nested:  All | Brief | Compact | Dots
Linear:  All | Brief | Compact

This Message and its Replies on One Page:
Nested:  All | Brief | Compact | Dots
Linear:  All | Brief | Compact
    

Custom Search

©2005 LUGNET. All rights reserved. - hosted by steinbruch.info GbR