| |
| |
Foreword | |
| |
| |
What's on the CD-ROM? | |
| |
| |
| |
Background Software and Concepts | |
| |
| |
| |
Measure Twice, Cut Once | |
| |
| |
Determinism | |
| |
| |
Rule-based systems, state-driven systems, and other potential tar pits | |
| |
| |
Defining an open architecture | |
| |
| |
| |
A Brief History of Software Concepts | |
| |
| |
Assembly language | |
| |
| |
Early conventional languages | |
| |
| |
Compilers vs. interpreters | |
| |
| |
The GUI revolution | |
| |
| |
The great rift | |
| |
| |
Object-oriented programming | |
| |
| |
Robots and robot subsystems as objects | |
| |
| |
Network languages | |
| |
| |
| |
The Basics of Real-time Software (For Mere Mortals) | |
| |
| |
Threads | |
| |
| |
Interrupts and stacks | |
| |
| |
Context | |
| |
| |
Kernels and tasks | |
| |
| |
Task switching | |
| |
| |
Interrupt events | |
| |
| |
Time slicing | |
| |
| |
Reentrance | |
| |
| |
Interrupt masking and interrupt priority | |
| |
| |
Inter-task communications | |
| |
| |
Visual Basic and real-time controls | |
| |
| |
VB events | |
| |
| |
DoEvents | |
| |
| |
Freddy as a VB form | |
| |
| |
Modal controls | |
| |
| |
Some other tips on using VB for real-time applications | |
| |
| |
Setting up a structure | |
| |
| |
Creating a library | |
| |
| |
| |
Thinking More Clearly Through Fuzzy Logic | |
| |
| |
Trapezoidal fuzzy logic | |
| |
| |
Fuzzy democracy | |
| |
| |
Adaptive fuzzy logic | |
| |
| |
Weighting trapezoids in response to other parameters | |
| |
| |
Multipass and fratricidal fuzzy logic | |
| |
| |
Summary | |
| |
| |
| |
Closed Loop Controls, Rabbits and Hounds | |
| |
| |
Basic PID controls | |
| |
| |
Predictive controls | |
| |
| |
Combined reactive and predictive controls | |
| |
| |
Various PID enhancements | |
| |
| |
Robot drive controls | |
| |
| |
Tuning controls | |
| |
| |
Rabbits chasing rabbits | |
| |
| |
Conclusions | |
| |
| |
| |
Communications and Control | |
| |
| |
Popular networks | |
| |
| |
Rigid protocols and other really bad ideas | |
| |
| |
Flexible protocols | |
| |
| |
Communications architectures | |
| |
| |
Wrappers, layers, and shells | |
| |
| |
Drivers, OCXs and DLLs | |
| |
| |
Improving communications efficiency | |
| |
| |
Timing issues and error handling | |
| |
| |
Other issues | |
| |
| |
| |
Basic Navigation | |
| |
| |
| |
Basic Navigation Philosophies | |
| |
| |
The academic school of thought | |
| |
| |
The industrial school of thought | |
| |
| |
Area coverage robots | |
| |
| |
Virtual path following vs. goal seeking | |
| |
| |
A practical starting point and "a priori" knowledge | |
| |
| |
| |
Live Reckoning | |
| |
| |
Understanding why good dead reckoning is crucial | |
| |
| |
Picking coordinate systems | |
| |
| |
Tick calculations | |
| |
| |
Live reckoning interaction with other processes | |
| |
| |
| |
The Best Laid Plans of Mice and Machines | |
| |
| |
Path planning and execution | |
| |
| |
Are we there yet? | |
| |
| |
Running on | |
| |
| |
Bread crumbs and irregular path following | |
| |
| |
The Z axis, maps, and wormholes | |
| |
| |
Summary | |
| |
| |
| |
Navigation as a Filtering Process | |
| |
| |
Filtering for the truth | |
| |
| |
The importance of uncertainty | |
| |
| |
Modeling uncertainty | |
| |
| |
Reducing uncertainty | |
| |
| |
Learning to be accurately uncertain | |
| |
| |
Uses of uncertainty | |
| |
| |
| |
Hard Navigation vs. Fuzzy Navigation | |
| |
| |
Sensor data and maps | |
| |
| |
Navigation features | |
| |
| |
Hard navigation | |
| |
| |
The concept of fuzzy navigation | |
| |
| |
Other profiles | |
| |
| |
The referenced state | |
| |
| |
Reducing uncertainty | |
| |
| |
| |
Sensors, Navigation Agents and Arbitration | |
| |
| |
Sensor types | |
| |
| |
Guidelines for selecting and deploying navigation and collision avoidance sensors | |
| |
| |
Navigation agents | |
| |
| |
Agent properties and methods | |
| |
| |
Arbitration and competition among agents | |
| |
| |
Who to believe | |
| |
| |
Changing one's mind | |
| |
| |
Summary | |
| |
| |
| |
Instilling Pain, Fear and Confidence | |
| |
| |
Pain and annoyance | |
| |
| |
Virtual pain | |
| |
| |
Avoiding pain and humiliation | |
| |
| |
The purpose of virtual confidence | |
| |
| |
Calculating virtual confidence | |
| |
| |
Summary | |
| |
| |
| |
Becoming Unstuck in Time | |
| |
| |
Getting past sequential thinking | |
| |
| |
Thinking of a mobile robot as multiple robot time-places | |
| |
| |
Managing the time dimension | |
| |
| |
| |
Programming Robots to Be Useful | |
| |
| |
Preprogramming vs. teaching paths | |
| |
| |
Embedding data into maps | |
| |
| |
Map interpreters | |
| |
| |
Events and targets | |
| |
| |
Text-based programming | |
| |
| |
Graphical generation of text programs | |
| |
| |
Conclusions | |
| |
| |
| |
Command, Control, and Monitoring | |
| |
| |
Unmanaged and self-managed systems | |
| |
| |
Ping-pong job management | |
| |
| |
Dispatched job management | |
| |
| |
Exceptions | |
| |
| |
Exception decision making | |
| |
| |
Expert assistance | |
| |
| |
Status monitoring | |
| |
| |
Taking control | |
| |
| |
Some GUI rules | |
| |
| |
Robustness and context preservation | |
| |
| |
Conclusions | |
| |
| |
| |
The Law of Conservation of Defects and the Art of Debugging | |
| |
| |
The law of conservation of defects | |
| |
| |
The art of debugging | |
| |
| |
Types of bugs | |
| |
| |
Summary | |
| |
| |
| |
"What the Hell Happened?" | |
| |
| |
Logging | |
| |
| |
Data mining using relational techniques | |
| |
| |
Incident reporting | |
| |
| |
Summary | |
| |
| |
| |
The Industry, Its Past and Its Future | |
| |
| |
The history of robotics | |
| |
| |
The mobile robotics industry | |
| |
| |
Industry segmentation for autonomous mobile robots | |
| |
| |
The government sector | |
| |
| |
Why aren't the robots here yet? | |
| |
| |
The future | |
| |
| |
| |
Referenced Laws and Formulas | |
| |
| |
Law of Sines and Law of Cosines | |
| |
| |
Simple 2D Vector Addition | |
| |
| |
Linear Regression | |
| |
| |
About the Author | |
| |
| |
Index | |