The objective of this project is to add an additional camera and array of ultrasonic sensors to the base model car. These additional sensors will interface with the donkeycar software and allow the car to identify and react to common city driving events. The following steps were taken to accomplish this task:
- Brushless to Brushed DC Motor drive train conversion
- Interface two Raspberry Pi 3 Model Bs
- Use OpenCV to identify and classify common road signs
- Install an array of ultrasonic sensors to avoid road obstacles
- Implement all tasks into the DonkeyCar framework
- 1 Team Members
- 2 Drivetrain Conversion
- 3 Interfacing the Pi's
- 4 Identifying Road Signs
- 5 Obstacle Avoidance
- 6 Modifying the DonkeyCar Framework
William Liu - firstname.lastname@example.org
The brushless DC motor (BLDC) provided on the original chassis has one fundamental problem, it cannot be controlled effectively at low speeds. This makes it difficult accurately emulate congested city driving environments. While the BLDC performed well for high speed driving, its lack of accuracy and precision was not ideal for this project. We found two solutions for this project. One, use a Sensored BLDC for improved control while maintaining top end performance. Two, use a Brushed DC Motor for improved control, but sacrifice top end performance.
The Brushed DC Motor was chosen as its top end performance was adequate for the scope of the project and, more importantly, its cost is an order of magnitude less compared to a Sensored BLDC.
Designing the Shaft Adapter
Proof of Concept
Tuning for Performance
Interfacing the Pi's
While a Raspberry Pi is a widely available and affordable platform for an autonomous vehicle, it does have hardware limitations that required our team to use a second Pi. One Pi will be used to run the DonkeyCar software to autonomously drive the car. The second Pi will be used to process traffic signs, and read data from the ultrasonic sensors. We needed a way to interface the two Pi's so that they could effectively communicate with each other. There were many solutions to this problem, we considered communication over WiFi, Ethernet, I2C and UART. We ended up choosing UART since the implementation seemed easy and straightforward.