BAR1

Birth Date: October 13, 2010
Origin of Name: Short for Black Acrylic Robot 1

BAR1 was created for the Silicon Valley Home Brew Robotics Club (HBRC) TableBot Challenge. The goal of the TableBot Challenge was to push a block into a goal without running off the table. To me, the interesting part of the challenge was navigating around the table, so I concentrated on developing a dead reckoning algorithm.

Components
BAR1 consists of

  • Internals of a Chumby One minus speaker. The ARM processor of the Chumby is the brains of the robot.
  • Design Peripherals BaseBoard peripheral controller. On BAR1, the BaseBoard controls the motors and handles communications with the sensors, such as PING sensors and wheel encoders.
  • TAP Plastics 3/16 inch Black Acrylic.
  • Wheel assemblies from a Neato XV-11 Robotic Vacuum Cleaner.
  • Pololu 3.5 A 5V Step-Down Voltage Regulator D15V35F5S3.
  • Pololu Motor Driver TB6612FNG.
  • Pololu Carrier with Sharp GP2Y0D805Z0F Digital Distance Sensor 5cm. These sensors are used as cliff detectors.
  • Parallax Ping))) Ultrasonic Sensors. These sensors are used for object detection.
  • 8 AA Eneloop NiMh batteries which power the electronics and the motors.

Details
To know where he needs to go, BAR1 first tries to figure out where he is on the surface of the table. He does this by finding the edges of the table. To find the first edge, BAR1 moves forward until his IR sensors detect an edge of the table. Next, he aligns his two IR sensors with the edge of the table. After squaring up against the first edge, BAR1 turns 180 degrees and tries to find another edge. He then turns 90 degrees to find the third edge, turns 180 degrees to find the fourth edge, turns 180 degrees, and stops in the center of the table, as shown in the following video:

While most robots in the TableBot Challenge turned away from the table edge, BAR1 turns into an edge so that he can orient himself perpendicular to the edge, as shown in the following slow motion video:

The wheel assemblies were graciously handed out by the Neato engineering team at the September 2010 HBRC meeting. For information about the Neato wheels, see my article Using Neato XV-11 Wheels on a Table Top Robot. Each event on the Neato wheel encoders represents 0.8 mm of travel, which is accurate enough for dead reckoning. However, I used data from only one wheel encoder. Because the wheel motors run at slightly different speeds, BAR1 sometimes veers left or right. I was able to partially compensate by running the right motor at a constant percentage (about 98.5%) of the speed of the left motor. This worked well if I the left motor ran at full speed. Unfortunately, the percentage is not constant: it varies with temperature (due to changing viscosity of the gear lubricant), amount of the wear on the gears, and even the speed of the motors. This means it’s almost impossible for BAR1 to travel in a straight line when using just one wheel encoder.

BAR1 can also detect the angle and distance of objects on the table. He begins the search for objects by turning in place 360 degrees. At approximately 1 degrees intervals, the distance data from each of the two front facing PING ultrasonic sensors is recorded. After completing the full revolution, the data is searched for the lowest numbers, which indicate the closest object. Each sensor records a slightly different angle because the sensors are spaced 15 cm apart. Averaging the angles from the left and right sensor produces the angle from the center of BAR1 to the object. Next, BAR1 rotates to the computed angle, travels the recorded distance, and stops, as shown in the following video:

Lessons Learned
Delivering enough power to the robot was a bigger problem than I expected. I started by using a 5 V power transistor that was rated at 1 A. The Chumby, BaseBoard, and sensors could boot up, but when the Chumby’s WiFi turned on, the transistor overheated and shut down. Putting a heat sink on the transistor helped a bit, but it still had problems with overheating. Eventually, I bought a $15 buck regulator from Pololu that could deliver 3 A consistently. That solved my power problem.

Next
I need to implement a PID loop to control wheel speed. Running one motor at a constant percentage of the other is good enough for a quick demo, but to travel in a truely straight line and take advantage of the accuracy of the Neato wheel encoders, BAR1 needs a closed feedback loop between the motor speed and wheel encoders.