Posted 26 August 2018
It’s been a year and a half since I last described the status and challenges in my ongoing campaign to create Wall-E2, an autonomous wall-following robot. The name ‘Wall-E’ was taken from the 2006 movie of the same name. In the movie, Wall-E was an autonomous trash-compactor robot that had all sorts of adventures, and my Wall-E2 autonomous wall-following robot certainly fills that bill!
From the previous system status report in early 2017, I described the following tasks:
Its been a year and a half since I updated the status of my ongoing campaign to create an autonomous wall-following robot. The robot system consists of the following main subsystems:
- Battery and charging subsystem
- Drive subsystem (wheels, motors and motor drivers)
- IR homing subsystem for charging station
- LIDAR for front ranging and ultrasonic SONAR for left/right ranging
- I2C Sensor subsystem (MPU6050 6DOF IMU, FRAM, RTC)
- Operating system
Battery and charging subsystem:
Since the last update, the battery and charging system has been updated from dual 1-Amp single-cell Adafruit PB1000C chargers utilizing a 5V source to a TP-5100 2-amp dual-cell charger utilizing a 12V source. This significantly simplified the entire system, as now the battery pack doesn’t have to be switched between series and parallel operation. Also, now the charging and supply leads are independent so the supply leads to the rest of the robot were upgraded to lower gauge wire to reduce the IR drops when supplying motor drive currents. See this post for details.
Drive subsystem (wheels, motors and motor drivers):
The motors were upgraded to provide a better gear ratio, although this was done before I realized that most of the traction issues were caused by IR drops in the battery wiring. The motor driver modules are unchanged, but I may later swap them out for more modern 3V-capable drivers so that I can swap in an Arduino Due microcontroller for the Mega (the Due has the same footprint/IO as the Mega, but has a much faster CPU and more memory)
IR homing subsystem for charging station:
The IR homing subsystem utilizes a pulsed IR beacon on the charging station coupled with dual IR sensors in a flared sunshade housing, backed by a Teensy 3.5 CPU configured as a null pattern matched-filter. The Teensy reports left/right homing error as a value between -1 and 1 over an I2C bus to the main microcontroller, which drives the motors to null out the signal. As the system stands today, the operating system can successfully home in on the charging station and connect to the charger. The robot knows its current battery voltage (charge condition) and therefore can decide to connect to the charger or to avoid it.
LIDAR for front ranging and ultrasonic SONAR for left/right ranging:
The front/left/right ranging subsystem is one of the most mature subsystems on the robot. The subsystem can successfully follow walls, and detect/recover from ‘stuck’ conditions. The only thing this subsystem lacks is the ability to make consistent turns on different terrain, due to the lack of heading information (this will be supplied by the new tri-sensor module)
I2C Sensor subsystem (MPU6050 6DOF IMU, FRAM, RTC):
The I2C sensor subsystem is a new addition since the last update, and has yet to be fully integrated into he system. The subsystem consists of a Inversense MPU6050 6DOF solid-state accelerometer, and Adafruit FRAM (Ferromagnetic RAM) and RTC (Real-Time Clock) modules. The MPU6050 gives the robot the ability to sense relative heading changes, which makes it capable of executing consistent N-degree turns on both hard flooring like the kitchen and atrium areas and the carpet in the rest of the house. The FRAM and RTC units should allow the robot to remember its charge/discharge history, even through power ON/OFF cycles.
The relative heading capability has been tested off-line from the main operating system, but has not yet been integrated into the OS. Same for the FRAM/RTC modules. Integration of this subsystem was stalled for quite a while due to problems with the Arduino I2C (Wire) library, but these problem were just recently resolved by switching to a more robust I2C library (SBWire). See this post for details.
The operating system has evolved quite a bit over the course of this adventure, but its current state seems pretty stable. The OS is implemented as a set of modes, as follows:
- MODE_CHARGING: Occurs when the robot is physically connected to a charging station
- MODE_IRHOMING: Occurs when a charging station beacon signal is detected
- MODE_WALLFOLLOW: Occurs when the robot isn’t in any other mode.
- MODE_DEADBATTERY: Occurs when the sensed battery voltage falls below DEAD_BATT_THRESH_VOLTS volts
Future Work Plans:
- Complete the integration of the tri-sensor module: This entails adding the hardware and software required to sense loss of power so that the current date/time stamp can be written to the FRAM, along with the complementary ability to read out the last power cycle date/time stamp from the FRAM on power-up. In addition, the current timed turn routines need to be replaced by the new heading-sensitive turn algorithms.
- Investigate the idea of multiple charging stations with different IR beacon frequencies. The current matched filter algorithm forms a very narrow-band filter, to discriminate the desired IR beacon signal from unwanted ‘flooding’ from overhead lighting sources and sunlight. The center frequency of the filter is set in software on the Teensy microcontroller, so it should be possible to have the Teensy routinely check for beacon signals at other signals, as long as the frequencies are far enough apart to prevent overlap. The current filter center freq was more or less arbitrarily set to 520Hz – high enough to be well away from, and not a multiple of, 60Hz, but low enough for the Teensy processing rate. Something like 435Hz (60*7.25) would probably work just as well, and is far enough away from 520Hz to be well outside the filter bandwidth (about +/- 10Hz IIRC).
Complete the implementation of the fixed charging station.
This task has been completed, and along the way the charging voltage was changed from 5V to 12V, to accommodate the new 12V on-board battery charging system. See this post for details
Integrate the IR homing software from the 3-wheel robot into Wall-E2’s code base:
This task has also been accomplished. See this post for details.