Line Following + Counting Navigation

When using line following + counting navigation, the robot follow a line while counting other lines it crosses, and then turns at a specific line number to start driving on a new line. The robot's path is programmed as an ordered sequence of specific line counts and turns.

  • ADVANTAGE: You can create complex line patterns with straight paths, curved paths, and loops. Even if the robot's turns aren't perfect, the robot will usually self-correct its direction as it starts to follow its new line path.

  • DISADVANTAGE: The robot can only stop or turn at a line intersection. You have to create a continuous line for each path.

Line following + counting navigation is similar to the directions that a person might give you to get to a destination in the country (such as "Follow this road as it curves around. At the second stop sign, turn right...").

Example Task Scenario

In this task scenario, a restaurant robot will deliver a food order from the kitchen to Table 2 (red rectangles are cardboard boxes representing a wall), drive around the table (delivering each person's order), and then return to the "Start" line marker in the kitchen.

For the purposes of the demonstration, the distances traveled are much shorter than what would be required in an actual restaurant environment.

Example Code

Here is a possible way to code a custom function to perform this task scenario:

void task1() {
  // Example of Line Following + Counting Navigation

  // drive out of kitchen from Start towards Table 2
  followCountLine(2); // 2nd line will be path to Table 2
  pivotAngle(-90); // turn left
  followCountLine(1); // next line is circle around table
  doubleBeep(); // alert guests that food has arrived
  pivotAngle(-90); // turn left
  followCountLine(1); // drive once around table

  // turn and return to kitchen
  pivotAngle(-90); // turn left
  followCountLine(1); // next line is main path
  pivotAngle(-90); // turn left
  followCountLine(1); // drive back into kitchen, next line is Start
  tripleBeep(); // alert staff that robot is ready for next order

  // at end of this task, reset for next task
  started = false;
  nextTask = 2;
}