<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.bespokerobotsociety.org/index.php?action=history&amp;feed=atom&amp;title=Activity%3ADead_Reckoning_Navigation</id>
	<title>Activity:Dead Reckoning Navigation - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bespokerobotsociety.org/index.php?action=history&amp;feed=atom&amp;title=Activity%3ADead_Reckoning_Navigation"/>
	<link rel="alternate" type="text/html" href="https://wiki.bespokerobotsociety.org/index.php?title=Activity:Dead_Reckoning_Navigation&amp;action=history"/>
	<updated>2026-04-25T10:15:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.bespokerobotsociety.org/index.php?title=Activity:Dead_Reckoning_Navigation&amp;diff=10&amp;oldid=prev</id>
		<title>John: Claude edited based on my notes, prompt, and SimpleBot code repository</title>
		<link rel="alternate" type="text/html" href="https://wiki.bespokerobotsociety.org/index.php?title=Activity:Dead_Reckoning_Navigation&amp;diff=10&amp;oldid=prev"/>
		<updated>2025-10-11T15:22:01Z</updated>

		<summary type="html">&lt;p&gt;Claude edited based on my notes, prompt, and SimpleBot code repository&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Activity&lt;br /&gt;
|name=Dead Reckoning Navigation&lt;br /&gt;
|difficulty=Beginner&lt;br /&gt;
|real_world=GPS-denied indoor navigation, precision positioning in manufacturing, submarine navigation, spacecraft navigation&lt;br /&gt;
|capabilities=[[Capability:Optical Odometry]] or [[Capability:IMU Sensing]], [[Capability:Differential Drive]]&lt;br /&gt;
|behaviors=[[Behavior:Dead Reckoning]]&lt;br /&gt;
|robots=[[SimpleBot]]&lt;br /&gt;
|status=Fully Documented&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Dead reckoning navigation&amp;#039;&amp;#039;&amp;#039; is a fundamental technique for determining a robot&amp;#039;s current position by continuously tracking its motion from a known starting point. The term &amp;quot;dead reckoning&amp;quot; comes from nautical navigation, where it originally meant &amp;quot;deduced reckoning&amp;quot; - calculating your position based on your previous position, speed, and direction traveled.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Dead reckoning works by:&lt;br /&gt;
# Starting from a known position (often set as the origin: x=0, y=0, heading=0°)&lt;br /&gt;
# Measuring incremental movements (distance traveled, turns made)&lt;br /&gt;
# Computing the new position by adding those movements to the previous position&lt;br /&gt;
# Repeating this process continuously as the robot moves&lt;br /&gt;
&lt;br /&gt;
This creates a running estimate of where the robot is relative to its starting point, without needing external references like GPS, cameras looking at the environment, or beacon systems.&lt;br /&gt;
&lt;br /&gt;
== Real-World Applications ==&lt;br /&gt;
&lt;br /&gt;
Dead reckoning is essential in environments where external positioning systems are unavailable or unreliable:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Indoor Navigation&amp;#039;&amp;#039;&amp;#039;: GPS signals don&amp;#039;t penetrate buildings, so robots use dead reckoning combined with other sensors&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Submarine Navigation&amp;#039;&amp;#039;&amp;#039;: Underwater vessels cannot receive GPS signals and rely heavily on inertial navigation&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Spacecraft Navigation&amp;#039;&amp;#039;&amp;#039;: Between ground station updates, spacecraft use dead reckoning to maintain position estimates&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Manufacturing&amp;#039;&amp;#039;&amp;#039;: Automated guided vehicles (AGVs) use dead reckoning for precise positioning on factory floors&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Mining Operations&amp;#039;&amp;#039;&amp;#039;: Underground vehicles navigate without GPS using odometry and inertial sensors&lt;br /&gt;
&lt;br /&gt;
== Required Capabilities ==&lt;br /&gt;
&lt;br /&gt;
Dead reckoning requires two fundamental capabilities:&lt;br /&gt;
&lt;br /&gt;
=== Motion Measurement ===&lt;br /&gt;
The robot must measure how it moves. This can be achieved through:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Capability:Optical Odometry]]&amp;#039;&amp;#039;&amp;#039;: Tracking wheel rotations to measure distance traveled&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Capability:IMU Sensing]]&amp;#039;&amp;#039;&amp;#039;: Using accelerometers and gyroscopes to measure acceleration and rotation rates&lt;br /&gt;
&lt;br /&gt;
=== Controlled Movement ===&lt;br /&gt;
The robot must execute controlled movements to follow planned paths:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Capability:Differential Drive]]&amp;#039;&amp;#039;&amp;#039;: Enables precise forward motion and turning by independently controlling left and right wheels&lt;br /&gt;
&lt;br /&gt;
== How Dead Reckoning Works ==&lt;br /&gt;
&lt;br /&gt;
The core concept is &amp;#039;&amp;#039;&amp;#039;integration&amp;#039;&amp;#039;&amp;#039; - continuously adding small changes to build up a complete picture of motion:&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Measure&amp;#039;&amp;#039;&amp;#039; the change since the last update (e.g., &amp;quot;moved 5cm forward, turned 2° right&amp;quot;)&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Calculate&amp;#039;&amp;#039;&amp;#039; how this affects your position in global coordinates&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Update&amp;#039;&amp;#039;&amp;#039; your position estimate: new_position = old_position + change&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Repeat&amp;#039;&amp;#039;&amp;#039; at a high frequency (typically 10-100 times per second)&lt;br /&gt;
&lt;br /&gt;
For example, if a robot:&lt;br /&gt;
* Starts at position (0, 0) facing north (0°)&lt;br /&gt;
* Drives forward 1 meter&lt;br /&gt;
* Its new position is (0, 1) still facing north (0°)&lt;br /&gt;
&lt;br /&gt;
If it then:&lt;br /&gt;
* Turns 90° right (now facing east at 90°)&lt;br /&gt;
* Drives forward 1 meter&lt;br /&gt;
* Its new position is (1, 1) facing east (90°)&lt;br /&gt;
&lt;br /&gt;
The robot continuously performs these calculations to maintain its position estimate.&lt;br /&gt;
&lt;br /&gt;
== Types of Dead Reckoning ==&lt;br /&gt;
&lt;br /&gt;
=== Odometry-Based Dead Reckoning ===&lt;br /&gt;
&lt;br /&gt;
Uses wheel encoder measurements to estimate position:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Advantages:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Simple and intuitive&lt;br /&gt;
* Works well for short distances on smooth surfaces&lt;br /&gt;
* Relatively inexpensive hardware&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Disadvantages:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Sensitive to wheel slippage&lt;br /&gt;
* Affected by uneven floors or carpets&lt;br /&gt;
* Wheel diameter variations cause systematic errors&lt;br /&gt;
&lt;br /&gt;
=== IMU-Based Dead Reckoning ===&lt;br /&gt;
&lt;br /&gt;
Uses inertial measurement units (accelerometers and gyroscopes):&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Advantages:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Not affected by wheel slip&lt;br /&gt;
* Works on any terrain&lt;br /&gt;
* Can detect external forces (being pushed)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Disadvantages:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Must integrate acceleration twice (position error grows very quickly)&lt;br /&gt;
* Requires careful calibration&lt;br /&gt;
* Sensitive to sensor bias and drift&lt;br /&gt;
&lt;br /&gt;
=== Hybrid Approaches ===&lt;br /&gt;
&lt;br /&gt;
Most practical systems combine both:&lt;br /&gt;
* Use odometry for position tracking&lt;br /&gt;
* Use gyroscope for accurate heading measurement&lt;br /&gt;
* Compensate odometry with IMU data when slip is detected&lt;br /&gt;
&lt;br /&gt;
== Error Accumulation ==&lt;br /&gt;
&lt;br /&gt;
The fundamental limitation of dead reckoning is &amp;#039;&amp;#039;&amp;#039;drift&amp;#039;&amp;#039;&amp;#039; - errors accumulate over time:&lt;br /&gt;
&lt;br /&gt;
=== Sources of Error ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Measurement errors&amp;#039;&amp;#039;&amp;#039;: Sensors aren&amp;#039;t perfectly accurate&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Integration errors&amp;#039;&amp;#039;&amp;#039;: Small measurement errors compound with each update&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Systematic errors&amp;#039;&amp;#039;&amp;#039;: Wheel diameter mismatch, sensor bias&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Environmental factors&amp;#039;&amp;#039;&amp;#039;: Floor friction, carpet texture, debris on wheels&lt;br /&gt;
&lt;br /&gt;
=== Error Growth ===&lt;br /&gt;
* Errors are &amp;#039;&amp;#039;&amp;#039;cumulative&amp;#039;&amp;#039;&amp;#039; - each error adds to all previous errors&lt;br /&gt;
* Position error typically grows &amp;#039;&amp;#039;&amp;#039;proportionally with distance traveled&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Heading errors are particularly problematic because they cause position errors that grow with time&lt;br /&gt;
* After driving in a square and returning to start, the robot will likely be offset from its true starting position&lt;br /&gt;
&lt;br /&gt;
=== Practical Implications ===&lt;br /&gt;
* Dead reckoning is excellent for short-term navigation (seconds to minutes)&lt;br /&gt;
* Useful for relative positioning (&amp;quot;move 1 meter forward from here&amp;quot;)&lt;br /&gt;
* Must be corrected periodically using external reference points for long-term accuracy&lt;br /&gt;
&lt;br /&gt;
== SimpleBot Challenges ==&lt;br /&gt;
&lt;br /&gt;
[[SimpleBot]] provides an excellent platform for learning dead reckoning concepts through hands-on challenges.&lt;br /&gt;
&lt;br /&gt;
=== Challenge A: Out and Back ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Objective:&amp;#039;&amp;#039;&amp;#039; Navigate a configured path forward, then return to the starting point by executing the path in exact reverse.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# Configure a multi-segment path (e.g., forward 1m, turn 45° left, forward 0.5m, turn 90° right, forward 0.75m)&lt;br /&gt;
# Robot executes the path while tracking each movement&lt;br /&gt;
# Robot must return home by reversing each step in the opposite order&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Learning Goals:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Understanding position tracking&lt;br /&gt;
* Implementing movement reversal logic&lt;br /&gt;
* Observing error accumulation even on a carefully reversed path&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Expected Outcome:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Students will notice that even with careful reversal, the robot doesn&amp;#039;t return exactly to the starting position. This demonstrates cumulative errors in dead reckoning.&lt;br /&gt;
&lt;br /&gt;
=== Challenge B: Hypotenuse Return ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Objective:&amp;#039;&amp;#039;&amp;#039; Drive an L-shaped path (forward then turn and forward), then return to start via the straight-line hypotenuse.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# Drive forward X meters (e.g., 1 meter)&lt;br /&gt;
# Turn 90° (e.g., right)&lt;br /&gt;
# Drive forward Y meters (e.g., 1 meter)&lt;br /&gt;
# Calculate the required heading to return to start&lt;br /&gt;
# Calculate the straight-line distance (hypotenuse)&lt;br /&gt;
# Execute the direct return path&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Learning Goals:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Using position estimates for path planning&lt;br /&gt;
* Calculating angles and distances from position data&lt;br /&gt;
* Comparing actual vs. expected final position&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Expected Outcome:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This challenge requires students to:&lt;br /&gt;
* Maintain a position estimate throughout the L-shaped path&lt;br /&gt;
* Calculate return_distance = sqrt(X² + Y²)&lt;br /&gt;
* Calculate return_angle = atan2(Y, X) + 180° (relative to current heading)&lt;br /&gt;
* Execute the calculated return maneuver&lt;br /&gt;
* Measure how far off they are from the true starting position&lt;br /&gt;
&lt;br /&gt;
=== Bonus Challenge: Quantifying Error ===&lt;br /&gt;
&lt;br /&gt;
After completing either challenge:&lt;br /&gt;
* Place a marker at the robot&amp;#039;s actual starting position&lt;br /&gt;
* Measure the error between where the robot thinks it ended and where it actually ended&lt;br /&gt;
* Repeat the challenge multiple times and plot error vs. distance traveled&lt;br /&gt;
* Investigate which factors contribute most to error (turning vs. straight-line motion)&lt;br /&gt;
&lt;br /&gt;
== Limitations and When to Use Sensor Fusion ==&lt;br /&gt;
&lt;br /&gt;
Dead reckoning alone has significant limitations:&lt;br /&gt;
&lt;br /&gt;
=== When Dead Reckoning Is Sufficient ===&lt;br /&gt;
* Short-duration tasks (under 1 minute)&lt;br /&gt;
* Short-distance navigation (under 5 meters)&lt;br /&gt;
* Relative positioning tasks (&amp;quot;move 30cm forward&amp;quot;)&lt;br /&gt;
* Smooth, predictable surfaces&lt;br /&gt;
* When approximate positioning is acceptable&lt;br /&gt;
&lt;br /&gt;
=== When Additional Sensors Are Needed ===&lt;br /&gt;
* Long-duration autonomous operation&lt;br /&gt;
* Precise positioning requirements&lt;br /&gt;
* Environments with wheel slip (carpet, loose surfaces)&lt;br /&gt;
* Tasks requiring return to exact locations&lt;br /&gt;
* Mission-critical navigation&lt;br /&gt;
&lt;br /&gt;
=== Sensor Fusion Approaches ===&lt;br /&gt;
&lt;br /&gt;
To overcome dead reckoning limitations, combine it with:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Visual landmarks&amp;#039;&amp;#039;&amp;#039;: Periodically detect known features to correct position&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Capability:LIDAR Sensing]]&amp;#039;&amp;#039;&amp;#039;: Match scans to known maps&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Beacon systems&amp;#039;&amp;#039;&amp;#039;: Triangulate position from known transmitters&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GPS&amp;#039;&amp;#039;&amp;#039;: When available outdoors&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Motion capture systems&amp;#039;&amp;#039;&amp;#039;: For laboratory environments&lt;br /&gt;
&lt;br /&gt;
The combination is often called &amp;#039;&amp;#039;&amp;#039;sensor fusion&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;probabilistic localization&amp;#039;&amp;#039;&amp;#039;, where dead reckoning provides continuous estimates that are periodically corrected by absolute position measurements.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Behavior:Dead Reckoning]] - The behavior implementation used in this activity&lt;br /&gt;
* [[Capability:Optical Odometry]] - Measuring motion through wheel encoders&lt;br /&gt;
* [[Capability:IMU Sensing]] - Measuring motion through inertial sensors&lt;br /&gt;
* [[Capability:Differential Drive]] - Movement control for dead reckoning&lt;br /&gt;
* [[SimpleBot]] - Educational robot platform implementing this activity&lt;br /&gt;
* [[Activity:Line Following]] - Another beginner navigation activity&lt;br /&gt;
&lt;br /&gt;
[[Category:Activity]]&lt;br /&gt;
[[Category:Navigation]]&lt;br /&gt;
[[Category:Beginner Activity]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
</feed>