beautypg.com

Position integration, Sonar, Onar – Pioneer 2 / PeopleBot User Manual

Page 44

background image

Pioneer 2 Operating System

Position Integration

Pioneer keeps track of its position and orientation based on dead-reckoning from wheel

motion, which is an internal coordinate position.

Registration between external and

internal coordinates deteriorates
rapidly with movement, due to

gearbox play, wheel imbalance

and slippage, and many other real-
world factors. You can rely on the

dead-reckoning ability of the robot

for just a short range—on the order
of several meters and one or two

revolutions, depending on the

surface. Carpets tend to be worse
than hard floors.

0

+90

+180

+270

+X

+Y

Front

Figure 21. Internal coordinate system for P2OS

Also, moving either too fast or too

slow tends to exacerbate the ab-
solute position errors. Accordingly,

consider the robot’s dead-reckon-

ing capability as a means of tying
together sensor readings taken over

a short period of time, not as a

method of keeping the robot on
course in a global map.

The orientation commands HEAD and DHEAD turn the robot with respect to its internal
dead-reckoned angle. On start-up, the robot is at the origin (0,0), pointing toward the

positive X-axis at 0 degrees. Absolute angles vary between 0 and 359. As the robot

moves, it will update this internal position based on dead-reckoning. The X,Y position is
always positive, and rolls over at about 3,000 millimeters. So, if the robot is at position

(400,2900) and moves 400 millimeters along the Y-axis and -600 millimeters along the X-
axis, its new position will be (2800,300).

You may reset the internal coordinates to 0,0,0 with the SETO P2OS command.

Sonar

When OPENed (see Opening the Servers—OPEN above), P2OS automatically begins firing
your robot’s sonar arrays in the predefined default sequence: 1

8, 9

16, 17

24, and 25

32, one sonar per array simultaneously.

20

P2OS also begins sending the sonar-ranging

results to the client via the server-information packet. Use the SONAR command to
enable (argument is "1") or disable (argument is "0") the sonar pinging. This is an all or
nothing command; you cannot disable a single array this way.

For example:

sfRobotComInt(sfCOMSONAR,0); /* Stop the pinging when not needed */

Use the sonar POLLING command to change the polling sequence of an array. Its
argument is a null-terminated string of up to 15 sonar numbers. Front sonar are

numbered \001 through \010 (octal), and the rear sonar are \011 through \100, for

38

20

See the next chapter for details on how to enable sonar arrays with p2oscf.