From Embedded Systems Learning Academy
Self Driving Car
Abstract
Objective and Scope
Team Members & Responsibilities
- Sensor Controller:
- Chinmay Vaidya
- Manuj Shinkar
- Motor Controller:
- Viral Agrawal
- Mitesh Sanghvi
- I/O Unit:
- Communication Bridge + Android:
- Jayanth Nallapothula
- Manish Mandalik
- Kwun Fung Ng (Daniel)
- Geographical Controller:
- Ishan Bhavsar
- Tanuj Chirimar
- Sushant Potdar
- Master Controller:
- Dhaval Parikh
- Harita Dhiren Parekh
- Rutwik Kulkarni
Introduction
Schedule
Sensor Team Schedule
Sl. No
|
Start Date
|
End Date
|
Task
|
Status
|
Actual Completion Date
|
1
|
09/14/2014
|
09/20/2014
|
Understanding the logic of sensors to be used
|
Completed
|
09/20/2014
|
2
|
09/21/2014
|
10/04/2014
|
Writing the codes for the different types of sensors
|
Completed
|
10/04/2014
|
3
|
10/05/2014
|
10/11/2014
|
Testing the different sensors for accuracy and placing the order for the one we have selected.
|
Completed
|
10/11/2014
|
4
|
10/12/2014
|
10/25/2014
|
Build CAN transceiver and send data to the Master Board
|
Completed
|
10/25/2014
|
5
|
10/26/2014
|
11/01/2014
|
Place all the sensors on car and test for obstacle avoidance
|
Completed
|
10/28/2014
|
6
|
11/02/2014
|
11/14/2014
|
Work on light and tilt sensors
|
Completed
|
11/04/2014
|
7
|
11/15/2014
|
12/09/2014
|
Final testing and debugging
|
Ongoing
|
YTD
|
Motor Team Schedule
Sl. No
|
Start Date
|
End Date
|
Task
|
Status
|
Actual Completion Date
|
1
|
09/14/2014
|
09/20/2014
|
Understand the logic of Motor Controller present in the RC Car
|
Completed
|
09/20/2014
|
2
|
09/21/2014
|
09/27/2014
|
Replace on-board controller with SJSU One board
|
Completed
|
09/22/2014
|
3
|
09/28/2014
|
10/04/2014
|
Drive the DC motor with SJSU One board at different Duty Cycles
|
Completed
|
09/30/2014
|
4
|
10/05/2014
|
10/11/2014
|
Test the Servo and DC motor together for moving forward and taking turns
|
Completed
|
10/09/2014
|
5
|
10/12/2014
|
10/18/2014
|
Build CAN Transceiver and move the car as per the CAN message received
|
Completed
|
10/13/2014
|
6
|
10/19/2014
|
10/25/2014
|
Make arrangement for CAN subscription task
|
Completed
|
10/25/2014
|
7
|
10/26/2014
|
11/01/2014
|
Interface encoder and calculate the actual speed at which car is running
|
Completed
|
10/28/2014
|
8
|
11/02/2014
|
11/08/2014
|
Make compensation algorithm and make car to move at desired speed
|
Completed
|
11/04/2014
|
9
|
11/09/2014
|
12/09/2014
|
Final testing and debugging
|
Ongoing
|
YTD
|
I/O Team Schedule
Sl. No
|
Start Date
|
End Date
|
Task
|
Status
|
Actual Completion Date
|
1
|
09/14/2014
|
09/20/2014
|
Search and order GLCD module with touch screen, LEDs for headlights
|
Completed
|
09/20/2014
|
2
|
09/21/2014
|
10/04/2014
|
Study of GLCD data frame formats and design GUI
|
Completed
|
10/03/2014
|
3
|
10/05/2014
|
10/11/2014
|
Development of GLCD functions including touchscreen handler
|
Completed
|
10/11/2014
|
4
|
10/12/2014
|
10/25/2014
|
Setup CAN subscription tasks for communication with Master controller
|
Completed
|
10/27/2014
|
5
|
10/26/2014
|
11/01/2014
|
Develop hardware and code for automatic headlight control.
|
Completed
|
11/01/2014
|
6
|
11/02/2014
|
11/14/2014
|
Build hardware for switches and write interrupt handlers for the same
|
Ongoing
|
YTD
|
7
|
11/15/2014
|
12/09/2014
|
Mount GLCD, headlights, switches on car and final testing
|
Scheduled
|
YTD
|
Communication Bridge + Android Team Schedule
Sl. No
|
Start Date
|
End Date
|
Task
|
Status
|
Actual Completion Date
|
1
|
09/14/2014
|
09/20/2014
|
Google maps API research
|
Completed
|
09/20/2014
|
2
|
09/21/2014
|
10/04/2014
|
Mock locations on Google maps and simulate co-ordinates w/o gps
|
Completed
|
10/04/2014
|
3
|
10/05/2014
|
10/11/2014
|
Two way Bluetooth communication and setup RTOS tasks
|
Completed
|
10/11/2014
|
4
|
10/12/2014
|
10/25/2014
|
Raw GUI for app and setup CAN tasks for Start and Stop commands
|
Completed
|
10/25/2014
|
5
|
10/26/2014
|
11/09/2014
|
Integration with GEO module and queue for each subscribed service
|
Ongoing
|
TBD
|
6
|
11/10/2014
|
11/16/2014
|
Incorporate all essential services into Android app and test for response
|
Scheduled
|
TBD
|
7
|
11/16/2014
|
11/23/2014
|
Final setup and changes for all the CAN tasks along with XBee interfacing
|
Scheduled
|
TBD
|
8
|
11/24/2014
|
12/01/2014
|
Testing with GEO module with real-time co-ordinates and plotting way points onto Maps
|
Scheduled
|
TBD
|
9
|
12/02/2014
|
12/09/2014
|
Final Testing and verification of all components on the main field
|
Scheduled
|
TBD
|
GEO Team Schedule
Sl. No
|
Start Date
|
End Date
|
Task
|
Status
|
Actual Completion Date
|
1
|
09/7/2014
|
09/14/2014
|
Market research for GPS and Compass Modules
|
Completed
|
09/14/2014
|
2
|
09/14/2014
|
09/21/2014
|
Place order / receive the modules
|
Completed
|
09/20/2014
|
3
|
09/21/2014
|
09/28/2014
|
Interface GPS with SJ -One board via UART
|
Completed
|
09/26/2014
|
4
|
09/28/2014
|
10/05/2014
|
Interface Compass with SJ-One Board via I2C
|
Completed
|
10/03/2014
|
5
|
10/05/2014
|
10/12/2014
|
Parsing the GPS data stream
|
Completed
|
10/11/2014
|
6
|
10/12/2014
|
10/19/2014
|
Calibration and testing of compass
|
Completed
|
10/13/2014
|
7
|
10/12/2014
|
10/19/2014
|
Decide CAN message ID’s and message formats
|
Completed
|
10/28/2014
|
8
|
10/19/2014
|
10/26/2014
|
Combining UART and GPS parsing. Create task for GPS
|
Completed
|
10/25/2014
|
9
|
10/19/2014
|
10/26/2014
|
Combining compass calibration and i2c interface. Create task for Compass
|
Completed
|
10/25/2014
|
10
|
10/26/2014
|
11/02/2014
|
Distance to Destination Calculation and Algorithm
|
In-Progress
|
TBD
|
11
|
11/03/2014
|
11/10/2014
|
Basic CAN communication with Master, IO and Android
|
In-progress
|
TBD
|
12
|
11/10/2014
|
11/17/2014
|
Synchronization and Data Integrity (Semaphores/Mutex/Critical Section)
|
Scheduled
|
TBD
|
13
|
11/18/2014
|
11/25/2014
|
Final Integration of CAN Framework and Implementation of CAN communication with other modules
|
Scheduled
|
TBD
|
14
|
11/26/2014
|
12/09/2014
|
Testing and debugging on car (Re-Calibration/Bug Fixes)
|
Scheduled
|
TBD
|
Master Team Schedule
Sl. No
|
Start Date
|
End Date
|
Task
|
Status
|
Actual Completion Date
|
1
|
09/7/2014
|
09/13/2014
|
Understanding CAN Bus and API's
|
Completed
|
09/13/2014
|
2
|
09/14/2014
|
09/20/2014
|
Deciding System Flow
|
Completed
|
09/20/2014
|
3
|
09/21/2014
|
09/27/2014
|
Deciding MSG id's for all devices
|
Completed
|
10/27/2014
|
4
|
09/28/2014
|
10/11/2014
|
Testing Subscription between 2 devices
|
Completed
|
10/4/2014
|
5
|
09/28/2014
|
10/11/2014
|
Making CAN bus hardware to interface all SJOne boards
|
Completed
|
10/11/2014
|
6
|
09/28/2014
|
10/11/2014
|
Testing subscription and time sync between all devices
|
Completed
|
10/11/2014
|
7
|
10/12/2014
|
10/18/2014
|
Reading sensor data from boards at the subscription rate
|
Completed
|
10/26/2014
|
8
|
10/19/2014
|
11/1/2014
|
Algorithm for obstacle avoidance
|
Completed
|
10/27/2014
|
9
|
11/2/2014
|
11/15/2014
|
Algorithm for GPS based navigation
|
Scheduled
|
TBD
|
10
|
11/16/2014
|
11/22/2014
|
Initial testing and tweaking of the car
|
Scheduled
|
TBD
|
11
|
11/23/2014
|
12/9/2014
|
Final Testing! Showdown time!
|
Scheduled
|
TBD
|
Parts List & Cost
Qty
|
Description
|
Manufacturer
|
Part Number
|
Total Cost
|
1 |
RC Car |
- |
- |
$$$
|
10 |
CAN transceivers |
- |
- |
Free
|
1 |
GPS module |
- |
- |
$$
|
1 |
Magnetometer Module |
- |
- |
$
|
1 |
Ultrasonic Sensor |
- |
- |
$$
|
1 |
Misc Components |
- |
- |
$
|
|
Total Cost |
|
|
INCREASING!!
|
Backup Parts & cost
Qty
|
Description
|
Manufacturer
|
Part Number
|
Total Cost
|
Design & Implementation
CAN 11-bit ID Format
MSG
|
DST
|
SRC
|
5 bits (11-6)
|
3 bits (5-3)
|
3 bits (2-0)
|
Controller ID Table
Controller ID
|
Controller Type
|
001
|
Motor Controller
|
010
|
Master Controller
|
011
|
Sensor Controller
|
100
|
GEO Controller
|
110
|
Communication Bridge + Android Controller
|
111
|
I/O Controller
|
Controller Communication Table
Master Controller Communication Table
Message Number
|
Message Name (MSG_FUNCTION)
|
Data Layout of Data Sent over CAN (byte[0] = total number of data bytes)
|
0x082
|
POWERUP_SYN
|
NO DATA
|
0x102
|
POWERUP_ACK
|
Msg1 : byte[1] : (uint8_t) version
Msg1 : byte[2-3] : (uint16_t) year
Msg1 : byte[4] : (uint8_t) month
Msg1 : byte[5] : (uint8_t) date
Msg1 : byte[6] : (uint8_t) dayofweek
Msg1 : byte[7] : (uint8_t) hour
Msg2 : byte[1] : (uint8_t) minute
Msg2 : byte[2] : (uint8_t) second
|
0x142
|
HEARTBEAT
|
Msg1 : byte[1-2] : (uint16_t) rx_count
Msg1 : byte[3-4] : (uint16_t) rx_bytes
Msg1 : byte[5-6] : (uint16_t) tx_count
Msg1 : byte[7] : (uint16_t) tx_bytes
Msg2 : byte[1] : (uint16_t) tx_bytes
|
0x3CA
|
SPEED_DIR_COMMAND
|
Msg1 : byte[1] : (uint8_t) speed
Msg1 : byte[2] : (uint8_t) direction
Msg1 : byte[3] : (uint8_t) brake
|
Motor Controller Communication Table
Message Number
|
Message Name (MSG_FUNCTION)
|
Data Layout of Data Sent over CAN (byte[0] = total number of data bytes)
|
0x0D1
|
POWERUP_SYN_ACK
|
Msg1 : byte[1] : (uint8_t) version
|
0x191
|
HEARTBEAT_ACK
|
Msg1 : byte[1-2] : (uint16_t) rx_count
Msg1 : byte[3-4] : (uint16_t) rx_bytes
Msg1 : byte[5-6] : (uint16_t) tx_count
Msg1 : byte[7] : (uint16_t) tx_bytes
Msg2 : byte[1] : (uint16_t) tx_bytes
|
0x341
|
SPEED_ENCODER_DATA
|
Msg1 : byte[1] : (uint8_t) speed
Msg1 : byte[2] : (uint8_t) dir
Msg1 : byte[3] : (uint8_t) brake
|
GEO Controller Communication Table
Message Number
|
Message Name (MSG_FUNCTION)
|
Data Layout of Data Sent over CAN (byte[0] = total number of data bytes)
|
0x0D4
|
POWERUP_SYN_ACK
|
Msg1 : byte[1] : (uint8_t) version
|
0x194
|
HEARTBEAT_ACK
|
Msg1 : byte[1-2] : (uint16_t) rx_count
Msg1 : byte[3-4] : (uint16_t) rx_bytes
Msg1 : byte[5-6] : (uint16_t) tx_count
Msg1 : byte[7] : (uint16_t) tx_bytes
Msg2 : byte[1] : (uint16_t) tx_bytes
|
0x384
|
GEO_HEADING_DATA
|
Msg1 : byte[1] : (uint8_t) current_angle
Msg1 : byte[2] : (uint8_t) desired_angle
Msg1 : byte[3] : (uint8_t) destination_reached
Msg1 : byte[4] : (uint8_t) is_valid
|
0x484
|
GEO_LOCATION_DATA
|
Msg1 : byte[1-4] : (float) latitude
Msg1 : byte[5-7] : (float) longitude
Msg2 : byte[1] : (float) longitude
Msg2 : byte[2-3] : (uint16_t) dist_to_final_destination
Msg2 : byte[4-5] : (uint16_t) dist_to_next_checkpoint
Msg2 : byte[6] : (uint8_t) is_valid
|
0x2AC
|
CHECKPOINT_REQUEST
|
Msg1 : byte[1] : (uint8_t) checkpoint_num
|
Communication Bridge + Android Controller Communication Table ==
Message Number
|
Message Name (MSG_FUNCTION)
|
Data Layout of Data Sent over CAN (byte[0] = total number of data bytes)
|
0x0D5
|
POWERUP_SYN_ACK
|
Msg1 : byte[1] : (uint8_t) version
|
0x195
|
HEARTBEAT_ACK
|
Msg1 : byte[1-2] : (uint16_t) rx_count
Msg1 : byte[3-4] : (uint16_t) rx_bytes
Msg1 : byte[5-6] : (uint16_t) tx_count
Msg1 : byte[7] : (uint16_t) tx_bytes
Msg2 : byte[1] : (uint16_t) tx_bytes
|
0x1D5
|
CAR_PAUSE
|
NO DATA
|
0x215
|
CAR_RESUME
|
NO DATA
|
0x425
|
CHECKPOINT_DATA
|
Msg1 : byte[1-4] : (float) latitude
Msg1 : byte[5-7] : (float) longitude
Msg2 : byte[1] : (float) longitude
Msg2 : byte[2-3] : (uint16_t) total_distance
Msg2 : byte[4] : (uint8_t) checkpoint_num
Msg2 : byte[5] : (uint8_t) is_new_route
Msg2 : byte[6] : (uint8_t) is_final_checkpoint
|
0x2C5
|
DRIVE_MODE
|
Msg1 : byte[1] : (uint8_t) mode
|
0x255
|
FREE_RUN_DIR
|
Msg1 : byte[1] : (uint8_t) speed
Msg1 : byte[2] : (uint8_t) turn
Msg1 : byte[3] : (uint8_t) direction
|
Sensor Controller Communication Table
Message Number
|
Message Name (MSG_FUNCTION)
|
Data Layout of Data Sent over CAN (byte[0] = total number of data bytes)
|
0x0D3
|
POWERUP_SYN_ACK
|
Msg1 : byte[1] : (uint8_t) version
|
0x193
|
HEARTBEAT_ACK
|
Msg1 : byte[1-2] : (uint16_t) rx_count
Msg1 : byte[3-4] : (uint16_t) rx_bytes
Msg1 : byte[5-6] : (uint16_t) tx_count
Msg1 : byte[7] : (uint16_t) tx_bytes
Msg2 : byte[1] : (uint16_t) tx_bytes
|
0x303
|
DIST_SENSOR_DATA
|
Msg1 : byte[1] : (uint8t) left
Msg1 : byte[2] : (uint8t) middle
Msg1 : byte[3] : (uint8t) right
Msg1 : byte[4] : (uint8t) back
|
0x443
|
OTHER_SENSOR_DATA
|
Msg1 : byte[1] : (uint8t) battery
Msg1 : byte[2] : (uint8t) light
|
I/O Controller Communication Table
Message Number
|
Message Name (MSG_FUNCTION)
|
Data Layout of Data Sent over CAN (byte[0] = total number of data bytes)
|
0x0D6
|
POWERUP_SYN_ACK
|
Msg1 : byte[1] : (uint8_t) version
|
0x196
|
HEARTBEAT_ACK
|
Msg1 : byte[1-2] : (uint16_t) rx_count
Msg1 : byte[3-4] : (uint16_t) rx_bytes
Msg1 : byte[5-6] : (uint16_t) tx_count
Msg1 : byte[7] : (uint16_t) tx_bytes
Msg2 : byte[1] : (uint16_t) tx_bytes
|
0x1D4
|
CAR_PAUSE
|
NO DATA
|
0x214
|
CAR_RESUME
|
NO DATA
|
0x2C4
|
DRIVE_MODE
|
Msg1 : byte[1] : (uint8_t) mode
|
Testing & Technical Challenges
Sl. No
|
Test Case
|
Test Description
|
Result
|
Challenges and Learning
Future Enhancement
Conclusion
Project Video
Project Source Code
References
Acknowledgement
References Used
- Preetpal Kang, Lecture notes of CMPE 243, Computer Engineering, Charles W. Davidson College of Engineering, San Jose State University, Aug-Dec 2014.
- en.wikipedia.org/