F16: The-Nine
Contents
- 1 Project Title
- 2 Abstract
- 3 Objectives & Introduction
- 4 Project Schedule Overview
- 5 Team Members & Responsibilities
- 6 Parts List & Cost
- 7 Bluetooth Communications (Communication Bridge)
- 8 Obstacle Detection Systems (Sensor Controller)
- 9 Localization and Positioning (GPS)
- 10 Propulsion Systems and Speed Tracking (Motor Controller)
- 11 Master Control Systems
- 12 Conclusion
- 13 Project Video
- 14 Project Source Code
- 15 References
Project Title
The-Nine: Self Driving Car
Abstract
This section should be a couple lines to describe what your project does.
Objectives & Introduction
Show list of your objectives. This section includes the high level details of your project. You can write about the various sensors or peripherals you used to get your project completed.
Show a simple table or figures that show your scheduled as planned before you started working on the project. Then in another table column, write down the actual schedule so that readers can see the planned vs. actual goals. The point of the schedule is for readers to assess how to pace themselves if they are doing a similar project.
Project Schedule Overview
Task # | Start Date | End Date | Team Task Description | Bluetooth Communications | Obstacle Detection Systems | Localization and Positioning (GPS) | Propulsion Systems and Speed Tracking | Master Control Systems | Status | Actual End Date |
---|---|---|---|---|---|---|---|---|---|---|
1 | 9/14/2016 | 9/20/2016 | Assigned tasks to one another and strategized approach. Read Previous Reports | Completed | 9/20/2016 | |||||
2 | 9/21/2016 | 9/27/2016 | Set up Version Control System and Basic Project Documentation Research Project Components |
Research of web application frameworks for mobile. | Research of sensor systems and sensor types needed. | * Researched and decided upon the GPS module and Compass module. * Ordered GPS module and compass module. |
Work with team leader to devise version control strategy. | Research different RC cars for the project. | Completed | 9/27/2016 |
3 | 9/28/2016 | 10/04/2016 | Discuss controllers' responsibilities and communication | Started development of DBC and finalized hardware choices. | Completed | 10/04/2016 | ||||
4 | 10/05/2016 | 10/19/2016 | Order Project Components Individual Prototyping and Module Design |
Research Bluetooth device HC-06 for the RC car. | Interface IMU and ultrasonic sensors to board. | * Parse GPS data and format the data to be transmitted * Test code to get compass reading information |
Research what encoders and/or tachometers to use, help the team leader choose an RC car to purchase, and decide what motor driver to use | Implement Decision Tree for obstacle detection/autonomous car control. Decide on Message ID system over the CANBUS/Types of Data being Transmitted | Completed | 10/19/2016 |
5 | 10/20/2016 | 10/27/2016 | Status Update: Demoing first round of Prototyping to the group | Develop Bluetooth serial receiver library & web application. | Develop IMU and ultrasonic sensor libraries. | Interface GPS module and compass module to SJOne board. | Make the motors spin and the servo control the steering. Receive can signals and control the motor and steering servo. | * Implement Decision Tree for obstacle detection/autonomous car control. Decide on Message ID system over the CANBUS/Types of Data being Transmitted * Program obstacle detection/autonomous car control algorithms |
Completed | 10/27/2016 |
6 | 10/28/2016 | 11/18/2016 | Adding a level of complexity to designs: Interfacing Motor, Sensor, GPS, and Bluetooth Modules with the Master Controller over CAN bus | Integrate web application, SJOne board and DBC messages | Use implemented DBC to transmit sensor data over CAN. | * Calibrating the compass module.Integration of GPS and compass module. Interfacing of GPS and compass module to Android. * Integration with Master through CAN bus. |
* Validate and calibrate the motor controller and steering code. Receive the Tachometer and magnetic polarity strip. * Merge motor_test/tach with master. * Reorganize code for readability. * Finalize and test speed feedback system. |
* Program obstacle detection/autonomous car control algorithms * Test RC car obstacle detection and autonomous control interfaced with Sensor Module over CAN * Interface GPS module with Master Controller * Interface Android/Bluetooth module with Master Controller.Test Waypoint System |
Completed | 11/18/2016 |
7 | 11/19/2016 | 11/25/2016 | Integration Testing between Modules, System Validation | Fine-tuning of web application | Debug sensor library and work on integration | Testing and calibrating with other modules. | Test with the rest of the group * Fine tune nominal speed. Add LCD to display debug information. |
* Interface Android/Bluetooth module with Master Controller.Test Waypoint System * Debug any issues with Master controller and other modules |
Completed | 11/28/2016 |
8 | 11/26/2016 | 12/02/2016 | Overall System Optimization | Fine-tuning of sensor readings | Testing and calibrating with other modules. | * Replace motor driver with higher amperage driver. * Adjust steering offset to reduce error. |
* Debug any issues with Master controller and other modules * Final debug/testing of RC CAR |
Completed | 12/04/2016 | |
9 | 12/03/2016 | 12/09/2016 | Finalization, Preparing for Demonstration | In Progress |
Team Members & Responsibilities
Application & Control Interface
- Khalil Estell
Bluetooth Communications
- Khalil Estell
Obstacle Detection Systems
- Charles MacDonald
- John Strube
Localization and Positioning (GPS)
- Sara Sepasian
Propulsion Systems and Speed Tracking
- Derek Tran
- Matthew Boyd
Master Control Systems
- Steven Hwu
- Adam Iglesias
Parts List & Cost
Give a simple list of the cost of your project broken down by components. Do not write long stories here.
Item # | Part Description | Vendor | QTY | Cost |
---|---|---|---|---|
1 | RC Car | 1 | ||
2 | SJSUOne Board | Preet Kang | 5 | $400.00 |
3 | HC-06 Bluetooth Module | Amazon | 1 | $8.99 |
4 | Magnetic Tachometer | Digikey | 1 | $8.53 |
5 | Radial Magnet cube magnets | Digikey | 10 | $8.80 |
6 | High Power Motor Driver | Polulu | 1 | $39.95 |
Bluetooth Communications (Communication Bridge)
Schedule
Task # | Start Date | End Date | Task Description | Status | Actual End Date |
---|---|---|---|---|---|
1 | 9/14/2016 | 9/20/2016 | Assigned tasks to one another and strategize approach. | Completed | 9/20/2016 |
2 | 9/21/2016 | 9/27/2016 | Research of web application frameworks for mobile. | Completed | 9/27/16 |
3 | 9/28/2016 | 10/04/2016 | Started development of DBC and finalized hardware choices. | Completed | 10/04/2016 |
4 | 10/05/2016 | 10/19/2016 | Research Bluetooth device HC-06 for the RC car. | Completed | 10/19/2016 |
5 | 10/20/2016 | 10/27/2016 | Develop Bluetooth serial receiver library & web application. | In Progress | |
6 | 10/20/2016 | 11/18/2016 | Integrate web application, SJOne board and DBC messages | In Progress | |
7 | 11/19/2016 | 12/02/2016 | Fine-tuning of web application | Not started | |
8 | 12/03/2016 | 12/09/2016 | Final integration | Not started |
Design & Implementation
The design section can go over your hardware and software design. Organize this section using sub-sections that go over your design and implementation.
Hardware Design
Discuss your hardware design here. Show detailed schematics, and the interface here.
Hardware Interface
In this section, you can describe how your hardware communicates, such as which BUSes used. You can discuss your driver implementation here, such that the Software Design section is isolated to talk about high level workings rather than inner working of your project.
Software Design
Show your software design. For example, if you are designing an MP3 Player, show the tasks that you are using, and what they are doing at a high level. Do not show the details of the code. For example, do not show exact code, but you may show psuedocode and fragments of code. Keep in mind that you are showing DESIGN of your software, not the inner workings of it.
Implementation
This section includes implementation, but again, not the details, just the high level. For example, you can list the steps it takes to communicate over a sensor, or the steps needed to write a page of memory onto SPI Flash. You can include sub-sections for each of your component implementation.
Testing & Technical Challenges
Describe the challenges of your project. What advise would you give yourself or someone else if your project can be started from scratch again? Make a smooth transition to testing section and described what it took to test your project.
Include sub-sections that list out a problem and solution, such as:
My Issue #1
Discuss the issue and resolution.
Obstacle Detection Systems (Sensor Controller)
Schedule
Task # | Start Date | End Date | Task Description | Status | Actual End Date |
---|---|---|---|---|---|
1 | 9/14/2016 | 9/20/2016 | Assigned tasks to one another and strategized approach. | Complete | 9/20/2016 |
2 | 9/21/2016 | 9/27/2016 | Research of sensor systems and sensor types needed. | Complete | 9/27/2016 |
3 | 9/28/2016 | 10/04/2016 | Started development of DBC and finalized hardware choices. | Complete | 10/04/2016 |
4 | 10/05/2016 | 10/19/2016 | Interface IMU and ultrasonic sensors to board. | Complete | 10/19/2016 |
5 | 10/20/2016 | 10/27/2016 | Develop IMU and ultrasonic sensor libraries. | In progress | |
6 | 10/20/2016 | 11/18/2016 | Use implemented DBC to transmit sensor data over CAN. | In progress | |
7 | 11/19/2016 | 11/25/2016 | Debug sensor library and work on integration | Not started | |
8 | 11/26/2016 | 12/02/2016 | Fine-tuning of sensor readings | Not started | |
9 | 12/03/2016 | 12/09/2016 | Final integration | Not started |
Design & Implementation
The obstacle detection system covers two areas: detecting obstacles and determining vehicle orientation.
Obstacle detection is performed using ultrasonic sensors placed around the perimeter of the vehicle, concentrated at the front (three sensors) and less so in the back (one sensor) as the vehicle is primarily driven in the forward direction.
Vehicle orientation is accomplished using an inertial measurement unit, which is used to determine the speed and bearing of the vehicle.
Hardware Design
Ultrasonic sensors
Ultrasonic sensors are controlled using GPIO. The sensor consists of a trigger-input signal which causes it to emit sound at a specific frequency, and a echo-output signal which is pulsed when a reflection of the same frequency is received. The echo response is detected by the edge-sensitive GPIO interrupt, and the trigger is produced by a software-generated pulse.
Compass
A magnetometer is used to calculate the heading of the car. The magnetometer being used is the HMC5883L. The magnetometer measures the magnetic field of The Earth in units of Tesla as scalars in the X, Y and Z axis. The SJOne board communicates with the magnetometer using I2C at address 0x3C. An accelerometer onboard the SJOne board is used for tilt compensation.
Hardware Interface
In this section, you can describe how your hardware communicates, such as which BUSes used. You can discuss your driver implementation here, such that the Software Design section is isolated to talk about high level workings rather than inner working of your project.
Software Design
Show your software design. For example, if you are designing an MP3 Player, show the tasks that you are using, and what they are doing at a high level. Do not show the details of the code. For example, do not show exact code, but you may show psuedocode and fragments of code. Keep in mind that you are showing DESIGN of your software, not the inner workings of it.
Implementation
This section includes implementation, but again, not the details, just the high level. For example, you can list the steps it takes to communicate over a sensor, or the steps needed to write a page of memory onto SPI Flash. You can include sub-sections for each of your component implementation.
Testing & Technical Challenges
Describe the challenges of your project. What advise would you give yourself or someone else if your project can be started from scratch again? Make a smooth transition to testing section and described what it took to test your project.
Include sub-sections that list out a problem and solution, such as:
Ultrasonic sensors
RS-232 testing
The MaxBotix LV-MaxSonar-EZ1 (P/N# MB1010) has several interfaces used to indicate the distance to an obstacle that it has sensed. One of the simplest is a RS-232 output which is enabled by grounding the BW pin or leaving it unconnected (floating). The output is logic-level compatible with RS-232 (where a logic '1' is 0V and a logic '0' is Vcc) but not voltage-level compatible. MaxBotix designed the RS-232 output like this to allow direct connection to a RS-232 compliant serial port, but it means the logic levels are inverted with respect to the LPC1758 which has no on-chip provisions for inverting the logic level. Therefore an inverter (such as the 74LVC1G04) is required between the TX output of the MB1010 and the LPC1758's UART RX input for proper operation.
My Issue #1
Discuss the issue and resolution.
Localization and Positioning (GPS)
Schedule
Task # | Start Date | End Date | Task Description | Status | Actual End Date |
---|---|---|---|---|---|
1 | 9/16/2016 | 9/22/2016 | Researched and decided upon the GPS module and Compass module. | Completed | 9/22/2016 |
2 | 9/23/2016 | 9/30/2016 | Ordered GPS module and compass module. | Completed | 9/30/16 |
3 | 10/01/2016 | 10/14/2016 | Parse GPS data and format the data to be transmitted Test code to get compass reading information |
In Progress | |
3 | 10/15/2016 | 10/25/2016 | Interface GPS module and compass module to SJOne board. | In Progress | |
4 | 10/26/2016 | 10/30/2016 | Calibrating the compass module.Integration of GPS and compass module. Interfacing of GPS and compass module to Android. | Not started | |
5 | 11/01/2016 | 11/13/2016 | Integration with Master through CAN bus. | Not started | |
6 | 11/15/2016 | 12/10/2016 | Testing and calibrating with other modules. | Not started |
Design & Implementation
The design section can go over your hardware and software design. Organize this section using sub-sections that go over your design and implementation.
Hardware Design
Discuss your hardware design here. Show detailed schematics, and the interface here.
Hardware Interface
In this section, you can describe how your hardware communicates, such as which BUSes used. You can discuss your driver implementation here, such that the Software Design section is isolated to talk about high level workings rather than inner working of your project.
Software Design
Show your software design. For example, if you are designing an MP3 Player, show the tasks that you are using, and what they are doing at a high level. Do not show the details of the code. For example, do not show exact code, but you may show psuedocode and fragments of code. Keep in mind that you are showing DESIGN of your software, not the inner workings of it.
Implementation
This section includes implementation, but again, not the details, just the high level. For example, you can list the steps it takes to communicate over a sensor, or the steps needed to write a page of memory onto SPI Flash. You can include sub-sections for each of your component implementation.
Testing & Technical Challenges
Describe the challenges of your project. What advise would you give yourself or someone else if your project can be started from scratch again? Make a smooth transition to testing section and described what it took to test your project.
Include sub-sections that list out a problem and solution, such as:
My Issue #1
Discuss the issue and resolution.
Propulsion Systems and Speed Tracking (Motor Controller)
Schedule
Task # | Start Date | End Date | Task Description | Status | Actual End Date |
---|---|---|---|---|---|
1 | 9/14/2016 | 9/20/2016 | Assigned tasks to one another and strategized approach. | Completed | 9/20/2016 |
1 | 9/21/2016 | 9/27/2016 | Work with team leader to devise version control strategy. | Completed | 9/27/2016 |
2 | 9/28/2016 | 10/04/2016 | Started development of DBC and finalized hardware choices. | Completed | 10/04/2016 |
3 | 10/05/2016 | 10/19/2016 | Research what encoders and/or tachometers to use, help the team leader choose an RC car to purchase, and decide what motor driver to use | Completed | 10/22/2016 |
4 | 10/23/2016 | 10/27/2016 | Make the motors spin and the servo control the steering. Receive can signals and control the motor and steering servo. | Completed | 10/25/2016 |
5 | 10/26/2016 | 11/04/2016 | Validate and calibrate the motor controller and steering code. Receive the Tachometer and magnetic polarity strip. | Completed | 11/05/16 |
5 | 11/06/2016 | 11/11/2016 | * Merge motor_test/tach with master. * Reorganize code for readability. * Finalize and test speed feedback system. |
Completed | 11/11/2016 |
5 | 11/12/2016 | 11/18/2016 | validate the wheel speed control system and calibrate. | Completed | 11/18/2016 |
6 | 11/19/2016 | 11/25/2016 | Test with the rest of the group * Fine tune nominal speed. Add LCD to display debug information. |
Completed | 11/28/2016 |
7 | 11/29/2016 | 12/02/2016 | * Replace motor driver with higher amperage driver. * Adjust steering offset to reduce error. |
Completed | 12/04/2016 |
8 | 12/06/2016 | 12/09/2016 | Test with the rest of the group, and fix any minor issues that come up. * Finalize code and merge into master. |
In progress |
Design & Implementation
Hardware Design
The motor controller board takes charge of two main systems: motoring and steering.
To accomplish motoring, a high power motor driver from Polulu is used to drive the RC car's motor. It takes a simple digital signal for direction and a PWM signal for speed. To help control speed accurately, a tachometer and a set of magnets in a wheel are used to feed back rotations per second (rps). For debugging, a TFT display was connected to the SJSUOne board and displayed tachometer readings versus commanded readings. The figure on the right shows how the SJSUOne board is connected to the display and the motor driver. In addition, the block diagram also shows power connections from the battery.
Steering controlled as simply as the motor. A single wire is needed to feed a PWM signal to the servo. The figure below the motor connections image shows how the servo is connected.
Hardware Interface
Motor
The interface to the motor consists of two sections: feedback and output. The feedback section involves connecting the SJSUOne board to the FAULT and Current sense pins. This allows the board to stop or slow down the motor if problems or overcurrent situations appear. Then the output section consists of a simple digital signal and a PWM signal. The simple digital output controls the direction of the motor: HIGH motors the car forward and LOW motors the car in reverse. To manipulate speed, the duty cycle of the PWM signal is changed according to a PI control algorithm in the SJSUOne board. In order to avoid overcurrent problems, the PWM signal is kept at a high frequency such as 20 kHz.
Tachometer
The tachometer provides information about wheel rotation speed by pulling the its output line low every time the tachometer passes over the south pole of a magnet.
Servo
Controlling the servo requires just one PWM signal. Instead of the duty cycle, the on-time of the signal determines how far the servo turns the car to the left or right. For the servo on this car, the range is 1.300 to 1.900 ms, where 1.5 ms means straight. With this time range, the best frequency for this signal would be 50 Hz. However, since the SJSUOne board provides only one PWM module, a software PWM module was implemented to produce the signal.
TFT Display
A board from Adafruit, the TFT display used for this project communicates with the SPI protocol. However, the board also provides a reset pin and an SD card, so there are a couple of extra pins to choose which device to connect to. The SD card port may be used to log debugging information. For drawing the actual characters, a library from Adafruit was imported.
Software Design
Show your software design. For example, if you are designing an MP3 Player, show the tasks that you are using, and what they are doing at a high level. Do not show the details of the code. For example, do not show exact code, but you may show psuedocode and fragments of code. Keep in mind that you are showing DESIGN of your software, not the inner workings of it.
Implementation
This section includes implementation, but again, not the details, just the high level. For example, you can list the steps it takes to communicate over a sensor, or the steps needed to write a page of memory onto SPI Flash. You can include sub-sections for each of your component implementation.
Testing & Technical Challenges
Motor Driver control
Several times during testing, the SJSUOne board was powered up or reprogrammed while still connected to the motor driver, causing the motor to rev at full speed and destroy the motor driver. The first solution to avoid full speed upon board power up was to add a tri-state buffer between the output of the SJSUOne board and the motor driver. Later on, the team discovered that a single pull-down resistor on the line was sufficient to solve the issue. This taught the team that for future projects involving powered mechanical systems to always make sure the control line by default will keep the systems off, whether by pull-down resistors or tri-state buffers.
PWM accuracy
While testing servo control, the frequency of the generated PWM signal proved to be inaccurate. The generated signal would have a frequency 10 times greater than what is set in the program, leading to inaccurate on-times. The team soon found out that the problem was because of where the PWM object in the program was constructed. Initially, the PWM objects were created in the global scope, meaning the constructor would write to the registers before the main() function was entered. While this problem is not fully understood, it was solved by constructing the objects in init() functions, which were called after the main() function was entered. This shows that, for future drivers written for microcontrollers, driver behaviour would be much more well defined if all register manipulation happened in an init() member function rather than in a constructor. This way, client users do not have to worry about accidentally constructing driver objects in the global scope.
Master Control Systems
Schedule
Task # | Start Date | End Date | Task Description | Status | Actual End Date |
---|---|---|---|---|---|
1 | 9/14/2016 | 9/20/2016 | Assigned tasks to one another and strategized approach. | Complete | 9/20/2016 |
2 | 9/21/2016 | 9/27/2016 | Research different RC cars for the project. | Complete | 10/15/2016 |
3 | 10/16/2016 | 10/23/2016 | Implement Decision Tree for obstacle detection/autonomous car control. Decide on Message ID system over the CANBUS/Types of Data being Transmitted | Complete | 10/23/2016 |
3 | 10/24/2016 | 10/29/2016 | Program obstacle detection/autonomous car control algorithms | In Progress | |
4 | 10/30/2016 | 11/06/2016 | Test RC car obstacle detection and autonomous control interfaced with Sensor Module over CAN | Not started | |
5 | 11/07/2016 | 11/13/2016 | Interface GPS module with Master Controller | Not started | |
6 | 11/14/2016 | 11/20/2016 | Interface Android/Bluetooth module with Master Controller.Test Waypoint System | Not started | |
7 | 11/21/2016 | 11/27/2016 | Debug any issues with Master controller and other modules | Not started | |
8 | 11/28/2016 | 12/12/2016 | Final debug/testing of RC CAR | Not started |
Design & Implementation
The design section can go over your hardware and software design. Organize this section using sub-sections that go over your design and implementation.
Hardware Design
Discuss your hardware design here. Show detailed schematics, and the interface here.
Hardware Interface
In this section, you can describe how your hardware communicates, such as which BUSes used. You can discuss your driver implementation here, such that the Software Design section is isolated to talk about high level workings rather than inner working of your project.
Software Design
Show your software design. For example, if you are designing an MP3 Player, show the tasks that you are using, and what they are doing at a high level. Do not show the details of the code. For example, do not show exact code, but you may show psuedocode and fragments of code. Keep in mind that you are showing DESIGN of your software, not the inner workings of it.
Implementation
This section includes implementation, but again, not the details, just the high level. For example, you can list the steps it takes to communicate over a sensor, or the steps needed to write a page of memory onto SPI Flash. You can include sub-sections for each of your component implementation.
Testing & Technical Challenges
Describe the challenges of your project. What advise would you give yourself or someone else if your project can be started from scratch again? Make a smooth transition to testing section and described what it took to test your project.
Include sub-sections that list out a problem and solution, such as:
My Issue #1
Discuss the issue and resolution.
Conclusion
Conclude your project here. You can recap your testing and problems. You should address the "so what" part here to indicate what you ultimately learnt from this project. How has this project increased your knowledge?
Project Video
Upload a video of your project and post the link here.
Project Source Code
GitLab
References
Acknowledgement
Any acknowledgement that you may wish to provide can be included here.
References Used
List any references used in project.
Appendix
You can list the references you used.