Difference between revisions of "S23: CAN CLAN"

From Embedded Systems Learning Academy
Jump to: navigation, search
(DBC File)
(DBC File)
Line 320: Line 320:
  
 
NS_ :
 
NS_ :
        BA_
+
BA_
        BA_DEF_
+
BA_DEF_
        BA_DEF_DEF_
+
BA_DEF_DEF_
        BA_DEF_DEF_REL_
+
BA_DEF_DEF_REL_
        BA_DEF_REL_
+
BA_DEF_REL_
        BA_DEF_SGTYPE_
+
BA_DEF_SGTYPE_
        BA_REL_
+
BA_REL_
        BA_SGTYPE_
+
BA_SGTYPE_
        BO_TX_BU_
+
BO_TX_BU_
        BU_BO_REL_
+
BU_BO_REL_
        BU_EV_REL_
+
BU_EV_REL_
        BU_SG_REL_
+
BU_SG_REL_
        CAT_
+
CAT_
        CAT_DEF_
+
CAT_DEF_
        CM_
+
CM_
        ENVVAR_DATA_
+
ENVVAR_DATA_
        EV_DATA_
+
EV_DATA_
        FILTER
+
FILTER
        NS_DESC_
+
NS_DESC_
        SGTYPE_
+
SGTYPE_
        SGTYPE_VAL_
+
SGTYPE_VAL_
        SG_MUL_VAL_
+
SG_MUL_VAL_
        SIGTYPE_VALTYPE_
+
SIGTYPE_VALTYPE_
        SIG_GROUP_
+
SIG_GROUP_
        SIG_TYPE_REF_
+
SIG_TYPE_REF_
        SIG_VALTYPE_
+
SIG_VALTYPE_
        VAL_
+
VAL_
        VAL_TABLE_
+
VAL_TABLE_
  
 
BS_:
 
BS_:
  
BU_: DBG DRIVER GEO MOTOR SENSOR_BRIDGE
+
BU_: DRIVER MOTOR SENSOR GEO DEBUG
  
  
BO_ 100 ULTRASONIC_TO_DRIVER: 5 SENSOR_BRIDGE
+
BO_ 100 DRIVER_HEARTBEAT: 3 DRIVER
SG_ ULTRASONIC_TO_DRIVER_left : 0|10@1+ (1,0) [0|511] "cm" DRIVER
+
  SG_ DRIVER_HEARTBEAT_cmd : 0|8@1+ (1,0) [0|0] "" DBG
  SG_ ULTRASONIC_TO_DRIVER_right : 10|10@1+ (1,0) [0|511] "cm" DRIVER
 
SG_ ULTRASONIC_TO_DRIVER_front : 20|10@1+ (1,0) [0|511] "cm" DRIVER
 
SG_ ULTRASONIC_TO_DRIVER_back : 30|10@1+ (1,0) [0|511] "cm" DRIVER
 
  
BO_ 300 GPS_DESTINATION: 8 SENSOR_BRIDGE
+
BO_ 110 DRIVER_STEERING: 3 DRIVER
  SG_ GPS_DEST_LATITUDE_SCALED_100000 : 0|32@1- (1,0) [0|0] "Degrees" GEO
+
  SG_ DRIVER_STEERING_yaw : 0|12@1+ (0.001,-2) [-10|10] "radians" MOTOR
  SG_ GPS_DEST_LONGITUDE_SCALED_100000 : 32|32@1- (1,0) [0|0] "Degrees" GEO
+
  SG_ DRIVER_STEERING_velocity : 12|12@1+ (0.01,-20) [-20|20] "kph" MOTOR
  
BO_ 50 DRIVE_STATUS_CMD: 1 SENSOR_BRIDGE
+
BO_ 120 MOTOR_HEARTBEAT: 5 MOTOR
  SG_ DRIVE_STATUS_CMD_start : 0|1@1+ (1,0) [0|0] "" MOTOR
+
  SG_ MOTOR_HEARTBEAT_speed_raw : 0|8@1+ (1,0) [0|0] "count" DEBUG
 +
SG_ MOTOR_HEARTBEAT_speed_rpm : 8|10@1+ (1,0) [0|0] "rpm" DEBUG
 +
SG_ MOTOR_HEARTBEAT_speed_kph : 18|10@1+ (0.1,-10) [-10|10] "kph" DEBUG
 +
SG_ MOTOR_HEARTBEAT_angle_duty : 28|10@1+ (0.001,-2) [-10|10] "duty" MOTOR
  
BO_ 600 SELF_TEST_CMD: 1 SENSOR_BRIDGE
 
SG_ SELF_TEST_CMD_start : 0|1@1+ (1,0) [0|0] "" MOTOR, GEO, DRIVER
 
  
 +
BO_ 125 MOTOR_DEBUG: 8 MOTOR
 +
SG_ MOTOR_DEBUG_speed_target : 0|26@1+ (0.1,-10) [-10|10] "kph" DEBUG
 +
SG_ MOTOR_DEBUG_speed_kph : 26|10@1+ (0.1,-10) [-10|10] "kph" DEBUG
 +
SG_ MOTOR_DEBUG_speed_duty : 36|10@1+ (0.1,0) [0|0] "duty" DEBUG
 +
SG_ MOTOR_DEBUG_integral_error : 46|10@1+ (0.1,-10) [-10|10] "error" DEBUG
 +
SG_ MOTOR_DEBUG_current_state : 56|3@1+ (1,0) [0|5] "state" DEBUG
 +
SG_ MOTOR_DEBUG_next_state : 59|3@1+ (1,0) [0|5] "state" DEBUG
  
BO_ 200 DRIVER_TO_MOTOR: 2 DRIVER
 
SG_ DRIVER_TO_MOTOR_steer : 0|8@1- (1,0) [0|0] "degrees" MOTOR, SENSOR_BRIDGE
 
SG_ DRIVER_TO_MOTOR_speed : 8|8@1- (1,0) [0|50] "mph" MOTOR, SENSOR_BRIDGE
 
  
BO_ 610 DRIVER_SELF_TEST_RESULT: 1 DRIVER
 
SG_ DRIVER_SELF_TEST_RESULT_status : 0|8@1+ (1,0) [0|0] "" SENSOR_BRIDGE
 
  
  
BO_ 400 GEO_STATUS: 8 GEO
+
BO_ 128 MOTOR_ESC_CALIBRATED: 1 MOTOR
  SG_ GEO_STATUS_COMPASS_HEADING : 0|12@1+ (1,0) [0|359] "Degrees" DRIVER, SENSOR_BRIDGE
+
SG_ MOTOR_ESC_CALIBRATED_calibration_status : 0|4@1+ (1,0) [0|3] "esc_calibration_e" DRIVER
  SG_ GEO_STATUS_COMPASS_BEARING : 12|12@1+ (1,0) [0|359] "Degrees" DRIVER, SENSOR_BRIDGE
+
SG_ MOTOR_ESC_CALIBRATED_start_calibration_ack_to_driver : 4|1@1+ (1,0) [0|1] "bool" DRIVER
  SG_ GEO_STATUS_DISTANCE_TO_DESTINATION : 24|16@1+ (0.1,0) [0|0] "Meters" DRIVER, SENSOR_BRIDGE
 
  SG_ GEO_STATUS_SATELLITE_LOCKED : 40|1@1+ (1,0) [0|0] "" DRIVER, SENSOR_BRIDGE
 
  
BO_ 620 GEO_SELF_TEST_RESULT: 1 GEO
 
SG_ GEO_SELF_TEST_RESULT_status : 0|8@1+ (1,0) [0|0] "" SENSOR_BRIDGE
 
  
BO_ 650 GEO_CURRENT_COORDS: 8 SENSOR_BRIDGE
+
BO_ 129 DRIVER_START_ESC_CALIBRATION: 1 DRIVER
  SG_ CURR_LATITUDE_SCALED_100000 : 0|32@1- (1,0) [0|0] "Degrees" SENSOR_BRIDGE
+
  SG_ MOTOR_ESC_CALIBRATED_begin_esc_calibration : 0|1@1+ (1,0) [0|3] "bool" MOTOR
SG_ CURR_LONGITUDE_SCALED_100000 : 32|32@1- (1,0) [0|0] "Degrees" SENSOR_BRIDGE
 
  
 +
BO_ 130 MOTOR_ACK: 1 MOTOR
 +
SG_ MOTOR_ACK_cmd : 0|8@1+ (1,0) [0|0] "" DRIVER
  
BO_ 500 MOTOR_TO_APP_DBG: 2 MOTOR
 
SG_ MOTOR_TO_APP_DBG_current_steer : 0|8@1- (1,0) [0|0] "degrees" SENSOR_BRIDGE
 
SG_ MOTOR_TO_APP_DBG_current_speed : 8|8@1- (1,0) [0|50] "mph" SENSOR_BRIDGE
 
  
BO_ 620 MOTOR_SELF_TEST_RESULT: 1 MOTOR
+
BO_ 200 SENSOR_SONARS: 8 SENSOR
  SG_ MOTOR_SELF_TEST_RESULT_status : 0|8@1+ (1,0) [0|0] "" SENSOR_BRIDGE
+
SG_ SENSOR_SONARS_left : 0|10@1+ (1,0) [0|800] "inch" DRIVER
 +
SG_ SENSOR_SONARS_right : 10|10@1+ (1,0) [0|0] "inch" DRIVER
 +
SG_ SENSOR_SONARS_middle : 20|10@1+ (1,0) [0|0] "inch" DRIVER
 +
  SG_ SENSOR_SONARS_back : 30|10@1+ (1,0) [0|0] "inch" DRIVER
 +
SG_ SENSOR_SONARS_frame_id : 42|16@1+ (1,0) [0|0] "" DRIVER
  
 +
BO_ 210 SENSOR_DESTINATION_LOCATION: 8 SENSOR
 +
SG_ SENSOR_DESTINATION_latitude : 0|28@1+ (0.000001,-90.000000) [-90|90] "Degrees" GEO
 +
SG_ SENSOR_DESTINATION_longitude : 28|28@1+ (0.000001,-180.000000) [-180|180] "Degrees" GEO
  
CM_ BU_ DRIVER "The LED display and driver controller driving the car";
+
BO_ 218 NAVIGATION_MESSAGE: 1 GEO
CM_ BU_ MOTOR "The RPM sensor, DC and servo motor controller of the car";
+
SG_ NAVIGATION_STATUS_navigation_status : 0|8@1+ (1,0) [0|3] "navigation_status_e" DRIVER
CM_ BU_ SENSOR_BRIDGE "The Bluetooth and the sonar sensor controller of the car";
+
 
CM_ BU_ GEO "The GPS and compass sensor controller of the car";
+
BO_ 219 CHECKPOINT_MESSAGE: 8 GEO
 +
SG_ CHECKPOINT_MESSAGE_compass_heading : 0|12@1+ (1,0) [0|359] "Degrees" DRIVER
 +
SG_ CHECKPOINT_MESSAGE_destination_bearing : 12|12@1+ (1,0) [0|359] "Degrees" DRIVER
 +
SG_ CHECKPOINT_MESSAGE_destination_distance : 24|16@1+ (0.1,0) [0|0] "Meters" DRIVER
 +
SG_ CHECKPOINT_MESSAGE_curr_checkpoint_num : 40|8@1+ (1,0) [0|255] "Integer" DRIVER
 +
SG_ CHECKPOINT_MESSAGE_total_checkpoint_num : 48|8@1+ (1,0) [0|255] "Integer" DRIVER
 +
SG_ CHECKPOINT_MESSAGE_checkpoint_status : 56|8@1+ (1,0) [0|3] "checkpoint_status_e" DRIVER
 +
 
 +
BO_ 220 GEO_STATUS: 8 GEO
 +
SG_ GEO_STATUS_compass_heading : 0|12@1+ (1,0) [0|359] "Degrees" DRIVER
 +
SG_ GEO_STATUS_destination_bearing : 12|12@1+ (1,0) [0|359] "Degrees" DRIVER
 +
SG_ GEO_STATUS_destination_distance : 24|16@1+ (0.1,0) [0|0] "Meters" DRIVER
 +
 
 +
BO_ 520 DEBUG_GPS_CURRENT_LOCATION: 8 GEO
 +
SG_ DEBUG_GPS_CURRENT_LOCATION_latitude : 0|28@1+ (0.000001,-90.000000) [-90|90] "Degrees" DEBUG
 +
SG_ DEBUG_GPS_CURRENT_LOCATION_longitude : 28|28@1+ (0.000001,-180.000000) [-180|180] "Degrees" DEBUG
 +
SG_ DEBUG_GPS_CURRENT_LOCATION_fix : 56|2@1+ (1,0) [0|2] "" DEBUG
 +
 
 +
BO_ 521 DEBUG_GEO_GPS_UPDATE: 8 GEO
 +
SG_ DEBUG_GEO_GPS_UPDATE_count : 0|16@1+ (1,0) [0|0] "" DEBUG
 +
SG_ DEBUG_GEO_GPS_UPDATE_max_period : 16|16@1+ (1,0) [0|0] "milliseconds" DEBUG
 +
SG_ DEBUG_GEO_GPS_UPDATE_min_period : 32|16@1+ (1,0) [0|0] "milliseconds" DEBUG
 +
SG_ DEBUG_GEO_GPS_UPDATE_average_period : 48|16@1+ (1,0) [0|0] "milliseconds" DEBUG
 +
 
 +
BO_ 522 DEBUG_GEO_COMPASS_UPDATE: 8 GEO
 +
SG_ DEBUG_GEO_COMPASS_UPDATE_count : 0|16@1+ (1,0) [0|0] "" DEBUG
 +
SG_ DEBUG_GEO_COMPASS_UPDATE_max_period : 16|16@1+ (1,0) [0|0] "milliseconds" DEBUG
 +
SG_ DEBUG_GEO_COMPASS_UPDATE_min_period : 32|16@1+ (1,0) [0|0] "milliseconds" DEBUG
 +
SG_ DEBUG_GEO_COMPASS_UPDATE_average_period : 48|16@1+ (1,0) [0|0] "milliseconds" DEBUG
 +
 
 +
CM_ BU_ DRIVER "The driver controller driving the car";
 +
CM_ BU_ MOTOR "The motor controller of the car";
 +
CM_ BU_ SENSOR "The sensor controller of the car";
 +
CM_ BU_ GEO "the geographical controller of the car";
 +
CM_ BU_ DEBUG "the debug topic that all controllers can publish to";
 +
CM_ BO_ 100 "Sync message used to synchronize the controllers";
 +
CM_ SG_ 100 DRIVER_HEARTBEAT_cmd "Heartbeat command from the driver";
  
 
BA_DEF_ "BusType" STRING ;
 
BA_DEF_ "BusType" STRING ;
Line 416: Line 453:
 
BA_ "GenMsgCycleTime" BO_ 100 1000;
 
BA_ "GenMsgCycleTime" BO_ 100 1000;
 
BA_ "GenMsgCycleTime" BO_ 200 50;
 
BA_ "GenMsgCycleTime" BO_ 200 50;
 +
BA_ "FieldType" SG_ 100 DRIVER_HEARTBEAT_cmd "DRIVER_HEARTBEAT_cmd";
 +
 +
VAL_ 100 DRIVER_HEARTBEAT_cmd 2 "DRIVER_HEARTBEAT_cmd_REBOOT" 1 "DRIVER_HEARTBEAT_cmd_SYNC" 0 "DRIVER_HEARTBEAT_cmd_NOOP" ;
  
  
 +
</pre>
 
<HR>
 
<HR>
 
<BR/>
 
<BR/>

Revision as of 20:42, 11 May 2023

CAN CLAN

Final car.png

Picture of the RC Car


Abstract

Our goal for this project is to use knowledge we gathered from lectures to design, implement, and test a self-driving RC car using a Controller Area Network (CAN) bus for controller communication. The project involves FreeRTOS and utilizes periodic tasks (running at 1Hz, 10Hz, and 100Hz) to gather, process, and display data from various embedded modules.


Introduction

The project was divided into 5 modules:

  • Sensor Information
  • Motor Operation
  • Geological Information
  • Driver & LCD Manager
  • Bridge & Android Application


Team Members & Responsibilities

<Team Picture>

  • Final car.png

Gitlab Project Link - https://gitlab.com/rashmi_sv/the_CAN_clan.git

  • Final car.png
  • Rashmi Suhas Vaidya

    • Geo Controller
    • GPS and Compass Interfacing
    • Driver Node
    • Integration Testing
  • Final car.png
  • Zeel Jatinkumar Lia

    • Sensor and Bridge Controller
    • RPM Sensor
    • Driver Node
    • Integration Testing
  • Final car.png
  • Priyam Hajisheth

    • Driver Node
    • LCD interfacing
    • Mobile App
    • Integration Testing
  • Final car.png
  • Xinyu He

    • Hardware solution
    • Wiki Page Update
    • Integration Testing
  • Final car.png
  • Hongjin Cheng

    • RPM Sensor
    • Motor Controller
    • Hardware assembling
    • Integration Testing




    Schedule

    Week# Start Date End Date Task Status
    1 03/01/2023 03/07/2023
    • Read previous projects, gather information and discuss among the group members.
    • Discuss each team-member's preference and assign controller roles
    • Create parts list for the RC car, discuss, and decide on each item
    • Completed
    2 03/08/2023 03/14/2023
    • Order all parts from list and save tracking/price info
    • Completed
    3 03/15/2023 03/21/2023
    • Design interface for Bridge and Sensor Controller, with unit tests
    • Design interface for Motor Controller, with unit tests
    • Design interface for Driver and LCD Controller, with unit tests
    • Integrate Bridge/Sensor Controller to CAN bus with DBC, handling messages
    • Integrate Motor Controller to CAN bus with DBC, handling messages
    • Integrate Driver Controller to CAN bus with DBC, handling messages
    • All parts received


    • Completed
    4 03/22/2023 03/28/2023
    • Design interface for GEO Controller, with unit tests
    • Integrate Geological Controller to CAN bus with DBC, handling messages
    • Integrate Ultrasonic sensor with SJ2 to verify distance from obstacle is sensed
    • Integrate Motor and Steering with PWM control, figure out the working ranges
    • Integrate GPS sensor with SJ2, get GPGGA strings over UART, parse current coordinates
    • Completed
    5 03/29/2023 04/04/2023
    • Integrate Compass sensor with SJ2 board over I2C and get bearing values
    • Connect all nodes together on the CAN bus, verify messages across all nodes
    • Code the Haversine formula into GEO controller to get distance and heading based on current and destination coordinates
    • Write driver logic based on distance and heading from GEO and obstacle details from sensor nodes
    • Integrate GPS and Compass peripherals, writing the driver and unit tests
    • MILESTONE - All individual modules considered "Roughly Working" with hardware interfaced
    • Completed
    6 04/05/2023 04/11/2023
    • Finalize the DBC file for project
    • Create a detailed schedule for remaining tasks, dividing work into four milestones
    • Start RPM sensor logic implementation and add it to Motor controller
    • Integrate Bluetooth module to Bridge/Sensor controller, with UART logic
    • Work on integrating the MaxBotix ultrasonic sensor with the sensor module
    • Work on Stage-1 mounting of all components on the RC car with temporary fixing
    • Fix problem with BDC-DBF conversion on BusMaster and show graphs on it
    • MILESTONE - Basic car driving ability with basic obstacle avoidance
    • Incomplete
    7 04/12/2022 04/18/2022
    • Complete basic working Mobile App which connects to the bridge controller, sends a test message and receives sensor values
    • Work on calibrating compass sensor to get accurate bearing readings
    • Create a on-board battery power supply for all components
    • Work on Stage-2 mounting of all components on the RC car with soldering of parts and wires
    • Complete the Compass calibration and read accurate readings from it
    • Have PWM signals reliably controlling the motor speed
    • Start working on reliable navigation with obstacle avoidance
    • MILESTONE - Integrated, reliably "heading" towards provided destination bearing, basic obstacle avoidance
    • Incomplete
    8 04/19/2023 04/25/2023
    • Send fake destination coordinates from Mobile app and start and stop commands
    • Integrate LED display to the driver controller and show current heading, speed on it
    • Add a GPS Lock LED on the Geo controller
    • Add more LEDs on various SJ2 boards for more debug information for MIA, obstacle detection, etc
    • Work on getting the car pass the Ramp test
    • Work on Stage-3 permanent fixing of all components on the RC car
    • Outdoor testing for longer range trips, and complete necessary enhancements
    • MILESTONE - Integration part 2, perform obstacle avoidance and destination bearing
    • Incomplete
    9 04/26/2023 05/02/2023
    • Integrate Google Maps on Mobile App for destination coordinates
    • Show debug information (GPS Coordinates, Sensor Values, Values from Compass, Calculated Distance, Motor Speed) on App and LED screen
    • Work on getting the car to pass the U-turn test
    • Verify that the electrical and mechanical work is complete
    • MILESTONE - Integration and outdoor testing, adding necessary software changes
    • Incomplete
    10 05/03/2023 05/09/2023
    • Work on On/Off Button - power button to start the car
    • Enable the Headlights to the car
    • Work on robustness of the car, perform corner test cases in actual runs of the car
    • Start working on report writing of the project
    • MILESTONE - Integration testing, deal with uneven terrain, reliable waypoints navigation and obstacle avoidance
    • Incomplete
    11 05/10/2023 05/16/2023
    • Finish project report writing
    • Full System Testing, any needed Hardware and software fixes and optimizing
    • Incomplete
    11 05/24/2023 05/24/2023
    • Final Project Demo Day
    • Incomplete


    Parts List & Cost

    Item# Part Desciption Vendor Qty Cost/Item
    1 Unassembled RC Car Traxxas [1] 1 $279.99
    2 CAN Transceivers Amazon [2] 4 $8.99
    3 PCB JLCPCB [3] 1 $40.00
    4 Sensors DFRobot [4] 4 $12.90
    5 GPS Amazon [5] 1 $29.92
    6 RPM Sensor Traxxas [6] 1 $19.00
    7 WT901 IMU Amazon[7] 1 $32.00
    8 1kΩ Pull-Up Resistor N/A 1 N/A


    Printed Circuit Board

    The preliminary design consisted of neatly routes wires on a breadboard connecting all the various components. It still looked confusing due to the sheer amount of connections that had to be made, this complexity was to be handled by a custom PCB designed in EasyEDA.

    CAN CLAN Car Pinout.png




    CAN Communication

    <Talk about your message IDs or communication strategy, such as periodic transmission, MIA management etc.>

    Hardware Design

    <Show your CAN bus hardware design>

    DBC File

    Gitlab link to our DBC file : https://gitlab.com/rashmi_sv/the_CAN_clan/-/blob/dev/dbc_file/dbc/project.dbc

    <You can optionally use an inline image> VERSION ""

    NS_ : BA_ BA_DEF_ BA_DEF_DEF_ BA_DEF_DEF_REL_ BA_DEF_REL_ BA_DEF_SGTYPE_ BA_REL_ BA_SGTYPE_ BO_TX_BU_ BU_BO_REL_ BU_EV_REL_ BU_SG_REL_ CAT_ CAT_DEF_ CM_ ENVVAR_DATA_ EV_DATA_ FILTER NS_DESC_ SGTYPE_ SGTYPE_VAL_ SG_MUL_VAL_ SIGTYPE_VALTYPE_ SIG_GROUP_ SIG_TYPE_REF_ SIG_VALTYPE_ VAL_ VAL_TABLE_

    BS_:

    BU_: DRIVER MOTOR SENSOR GEO DEBUG


    BO_ 100 DRIVER_HEARTBEAT: 3 DRIVER

    SG_ DRIVER_HEARTBEAT_cmd : 0|8@1+ (1,0) [0|0] "" DBG
    

    BO_ 110 DRIVER_STEERING: 3 DRIVER

    SG_ DRIVER_STEERING_yaw : 0|12@1+ (0.001,-2) [-10|10] "radians" MOTOR
    SG_ DRIVER_STEERING_velocity : 12|12@1+ (0.01,-20) [-20|20] "kph" MOTOR
    

    BO_ 120 MOTOR_HEARTBEAT: 5 MOTOR

    SG_ MOTOR_HEARTBEAT_speed_raw : 0|8@1+ (1,0) [0|0] "count" DEBUG
    SG_ MOTOR_HEARTBEAT_speed_rpm : 8|10@1+ (1,0) [0|0] "rpm" DEBUG
    SG_ MOTOR_HEARTBEAT_speed_kph : 18|10@1+ (0.1,-10) [-10|10] "kph" DEBUG
    SG_ MOTOR_HEARTBEAT_angle_duty : 28|10@1+ (0.001,-2) [-10|10] "duty" MOTOR
    


    BO_ 125 MOTOR_DEBUG: 8 MOTOR

    SG_ MOTOR_DEBUG_speed_target : 0|26@1+ (0.1,-10) [-10|10] "kph" DEBUG
    SG_ MOTOR_DEBUG_speed_kph : 26|10@1+ (0.1,-10) [-10|10] "kph" DEBUG
    SG_ MOTOR_DEBUG_speed_duty : 36|10@1+ (0.1,0) [0|0] "duty" DEBUG
    SG_ MOTOR_DEBUG_integral_error : 46|10@1+ (0.1,-10) [-10|10] "error" DEBUG
    SG_ MOTOR_DEBUG_current_state : 56|3@1+ (1,0) [0|5] "state" DEBUG
    SG_ MOTOR_DEBUG_next_state : 59|3@1+ (1,0) [0|5] "state" DEBUG
    



    BO_ 128 MOTOR_ESC_CALIBRATED: 1 MOTOR

    SG_ MOTOR_ESC_CALIBRATED_calibration_status : 0|4@1+ (1,0) [0|3] "esc_calibration_e" DRIVER
    SG_ MOTOR_ESC_CALIBRATED_start_calibration_ack_to_driver : 4|1@1+ (1,0) [0|1] "bool" DRIVER
    


    BO_ 129 DRIVER_START_ESC_CALIBRATION: 1 DRIVER

    SG_ MOTOR_ESC_CALIBRATED_begin_esc_calibration : 0|1@1+ (1,0) [0|3] "bool" MOTOR
    

    BO_ 130 MOTOR_ACK: 1 MOTOR

    SG_ MOTOR_ACK_cmd : 0|8@1+ (1,0) [0|0] "" DRIVER
    


    BO_ 200 SENSOR_SONARS: 8 SENSOR

    SG_ SENSOR_SONARS_left : 0|10@1+ (1,0) [0|800] "inch" DRIVER
    SG_ SENSOR_SONARS_right : 10|10@1+ (1,0) [0|0] "inch" DRIVER
    SG_ SENSOR_SONARS_middle : 20|10@1+ (1,0) [0|0] "inch" DRIVER
    SG_ SENSOR_SONARS_back : 30|10@1+ (1,0) [0|0] "inch" DRIVER
    SG_ SENSOR_SONARS_frame_id : 42|16@1+ (1,0) [0|0] "" DRIVER
    

    BO_ 210 SENSOR_DESTINATION_LOCATION: 8 SENSOR

    SG_ SENSOR_DESTINATION_latitude : 0|28@1+ (0.000001,-90.000000) [-90|90] "Degrees" GEO
    SG_ SENSOR_DESTINATION_longitude : 28|28@1+ (0.000001,-180.000000) [-180|180] "Degrees" GEO
    

    BO_ 218 NAVIGATION_MESSAGE: 1 GEO

    SG_ NAVIGATION_STATUS_navigation_status : 0|8@1+ (1,0) [0|3] "navigation_status_e" DRIVER
    

    BO_ 219 CHECKPOINT_MESSAGE: 8 GEO

    SG_ CHECKPOINT_MESSAGE_compass_heading : 0|12@1+ (1,0) [0|359] "Degrees" DRIVER
    SG_ CHECKPOINT_MESSAGE_destination_bearing : 12|12@1+ (1,0) [0|359] "Degrees" DRIVER
    SG_ CHECKPOINT_MESSAGE_destination_distance : 24|16@1+ (0.1,0) [0|0] "Meters" DRIVER
    SG_ CHECKPOINT_MESSAGE_curr_checkpoint_num : 40|8@1+ (1,0) [0|255] "Integer" DRIVER
    SG_ CHECKPOINT_MESSAGE_total_checkpoint_num : 48|8@1+ (1,0) [0|255] "Integer" DRIVER
    SG_ CHECKPOINT_MESSAGE_checkpoint_status : 56|8@1+ (1,0) [0|3] "checkpoint_status_e" DRIVER
    

    BO_ 220 GEO_STATUS: 8 GEO

    SG_ GEO_STATUS_compass_heading : 0|12@1+ (1,0) [0|359] "Degrees" DRIVER
    SG_ GEO_STATUS_destination_bearing : 12|12@1+ (1,0) [0|359] "Degrees" DRIVER
    SG_ GEO_STATUS_destination_distance : 24|16@1+ (0.1,0) [0|0] "Meters" DRIVER
    

    BO_ 520 DEBUG_GPS_CURRENT_LOCATION: 8 GEO

    SG_ DEBUG_GPS_CURRENT_LOCATION_latitude : 0|28@1+ (0.000001,-90.000000) [-90|90] "Degrees" DEBUG
    SG_ DEBUG_GPS_CURRENT_LOCATION_longitude : 28|28@1+ (0.000001,-180.000000) [-180|180] "Degrees" DEBUG
    SG_ DEBUG_GPS_CURRENT_LOCATION_fix : 56|2@1+ (1,0) [0|2] "" DEBUG
    

    BO_ 521 DEBUG_GEO_GPS_UPDATE: 8 GEO

    SG_ DEBUG_GEO_GPS_UPDATE_count : 0|16@1+ (1,0) [0|0] "" DEBUG
    SG_ DEBUG_GEO_GPS_UPDATE_max_period : 16|16@1+ (1,0) [0|0] "milliseconds" DEBUG
    SG_ DEBUG_GEO_GPS_UPDATE_min_period : 32|16@1+ (1,0) [0|0] "milliseconds" DEBUG
    SG_ DEBUG_GEO_GPS_UPDATE_average_period : 48|16@1+ (1,0) [0|0] "milliseconds" DEBUG
    

    BO_ 522 DEBUG_GEO_COMPASS_UPDATE: 8 GEO

    SG_ DEBUG_GEO_COMPASS_UPDATE_count : 0|16@1+ (1,0) [0|0] "" DEBUG
    SG_ DEBUG_GEO_COMPASS_UPDATE_max_period : 16|16@1+ (1,0) [0|0] "milliseconds" DEBUG
    SG_ DEBUG_GEO_COMPASS_UPDATE_min_period : 32|16@1+ (1,0) [0|0] "milliseconds" DEBUG
    SG_ DEBUG_GEO_COMPASS_UPDATE_average_period : 48|16@1+ (1,0) [0|0] "milliseconds" DEBUG
    

    CM_ BU_ DRIVER "The driver controller driving the car"; CM_ BU_ MOTOR "The motor controller of the car"; CM_ BU_ SENSOR "The sensor controller of the car"; CM_ BU_ GEO "the geographical controller of the car"; CM_ BU_ DEBUG "the debug topic that all controllers can publish to"; CM_ BO_ 100 "Sync message used to synchronize the controllers"; CM_ SG_ 100 DRIVER_HEARTBEAT_cmd "Heartbeat command from the driver";

    BA_DEF_ "BusType" STRING ; BA_DEF_ BO_ "GenMsgCycleTime" INT 0 0; BA_DEF_ SG_ "FieldType" STRING ;

    BA_DEF_DEF_ "BusType" "CAN"; BA_DEF_DEF_ "FieldType" ""; BA_DEF_DEF_ "GenMsgCycleTime" 0;

    BA_ "GenMsgCycleTime" BO_ 100 1000; BA_ "GenMsgCycleTime" BO_ 200 50; BA_ "FieldType" SG_ 100 DRIVER_HEARTBEAT_cmd "DRIVER_HEARTBEAT_cmd";

    VAL_ 100 DRIVER_HEARTBEAT_cmd 2 "DRIVER_HEARTBEAT_cmd_REBOOT" 1 "DRIVER_HEARTBEAT_cmd_SYNC" 0 "DRIVER_HEARTBEAT_cmd_NOOP" ;


    </pre>



    Sensor ECU

    <Picture and link to Gitlab>

    Hardware Design

    Software Design

    <List the code modules that are being called periodically.>

    Technical Challenges

    < List of problems and their detailed resolutions>



    Motor ECU

    <Picture and link to Gitlab>

    Hardware Design

    Software Design

    <List the code modules that are being called periodically.>

    Technical Challenges

    < List of problems and their detailed resolutions>



    Geographical Controller

    <Picture and link to Gitlab>

    Hardware Design

    Software Design

    <List the code modules that are being called periodically.>

    Technical Challenges

    < List of problems and their detailed resolutions>





    Communication Bridge Controller & LCD

    <Picture and link to Gitlab>

    Hardware Design

    Software Design

    <List the code modules that are being called periodically.>

    Technical Challenges

    < List of problems and their detailed resolutions>



    Master Module

    <Picture and link to Gitlab>

    Hardware Design

    Software Design

    <List the code modules that are being called periodically.>

    Technical Challenges

    < List of problems and their detailed resolutions>



    Mobile Application

    <Picture and link to Gitlab>

    Hardware Design

    Software Design

    <List the code modules that are being called periodically.>

    Technical Challenges

    < List of problems and their detailed resolutions>






    Conclusion

    <Organized summary of the project>

    <What did you learn?>

    Project Video

    Project Source Code

    Advise for Future Students

    <Bullet points and discussion>

    Acknowledgement

    === References ===