Away on co-op and anticipating the upcoming ENPH 253 Autonomous Robot Competition, a couple of friends and I decided to get our feet wet in the realm of autonomous vehicles. We hit up Craigslist and upgraded a toy RC car to the modern era. Since our work on this project, we learned many new ideas and issues that would have influenced our development.
Needless to say when venturing out to something new, problems are bound to occur. Despite all this, in which I will list later, we managed to capture moments in which the car could avoid some simple obstacles and later worked to avoid multiple objects sequentially.
Some very important statistics:
- Top speed: 25cm/s
- Turn radius: 15 cm
- Maximum sonar sensor distance: 3 m
- Maximum IR sensor distance: 10 cm
- Total development cost: $40
And now on to the story:
Our journey begins off by disassembling the RC car to investigate how we would modify the chassis to accommodate a microcontroller and other components to give us greater control over our new toy. The car had a single "motherboard" that was responsible for radio signal processing, motor control, steering, and most importantly, the car lights. Given how we spent something like $20, we had expected loose wires and hot-glued components (which by the way is perfect for simple disassembly). Once we had deemed it was possible to make the car work, we began tackling some major challenges:
We spent a good chunk of time, without consulting the wizards of the internet too much, to come up with our own idea of how we would implement some sort of navigation system so that the car would be able to navigate a particular room. We had planned for our car to follow a certain fixed path, and deviate from it when it needed to avoid an object. One idea we had included using external beacons as references, but due to its complexity we decided to go with inertial navigation.
One other major component we implemented was PID, to be able to follow a relatively straight line using a gyroscope. The idea was that if the car detected an object, it would make a sharp turn left or right around the object and then continue on its original straight-line path.
The original car had its own servo and gear train to control steering. Since we didn't have any reference to be able to interface with this particular servo and that the steering axle had its own little peg, we were able to fit the common SG-90 servo onto the chassis.
The original car was powered by 3 AA batteries in series (~4.5V), and our microcontroller of choice, the Arduino, was powered by 7-12 V on the standard inputs (DC in/Vin) or 5V from USB. Supplying power directly to +5V pin on the Arduino was not recommended, as it bypasses the internal voltage regulator. We also needed some way to control the power that was being delivered to the rear motors.
Not having access to an oscilloscope, knowledge of motor noise, decoupling capacitors and ways to combat this interference, we attempted two ways of managing our power system:
- Powering all components by the 3 AA batteries. We found some USB-A to USB-B cable from an e-waste bin and made our own wiring to power the Ardunio.
- Powering the Arduino and its digital components from an external 9V battery pack and having the motor on the 3 AA batteries, then connecting the two circuits via common ground.
We will find out later neither solution solved our noise problem, but both worked in terms of power.
With a simple object-avidance goal in mind, combined with inertial reference, the car needed to detect objects without any external sources to guide it. We tested the distances and versatility of various sesnsors, including both infrared and sonar, and eventually used the combination of the two (mostly due to the available parts we had). The sonar module would detect objects in-front of the car at a long distance (30+ cm) and the infrared sensors gave us proximity information with respect to the left and right sides of the car.
We encountered numerous issues with both modules. The infrared sensor, did not have any filtering modules and was very sensitive to the surrounding ambience. The sonar module was sensitive to the acoustics of the objects it aimed at. Since these were fundamental flaws of the components themselves, we opted to reduce the scope of our project and focused on more idealized situations.
This project gave us rudimentary knowledge in the design of an autonomous vehicle, and should help us immensely in the development of our robot during the ENPH 253 summer course.