Difference between revisions of "S22: Firebolt"

From Embedded Systems Learning Academy
Jump to: navigation, search
(Schedule)
(Software Design)
Line 596: Line 596:
  
 
=== <font color="0000FF">Software Design </font>===
 
=== <font color="0000FF">Software Design </font>===
 +
 +
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 BRIDGE_SENSOR GEO
 +
 +
 +
BO_ 100 DRIVER_HEARTBEAT: 1 DRIVER
 +
  SG_ DRIVER_HEARTBEAT_cmd : 0|8@1+ (1,0) [0|0] "" BRIDGE_SENSOR,MOTOR,GEO
 +
 +
BO_ 200 SENSOR_SONARS: 5 BRIDGE_SENSOR
 +
SG_ SENSOR_SONARS_left : 0|10@1+ (1,0) [0|0] "cm" DRIVER
 +
SG_ SENSOR_SONARS_right : 10|10@1+ (1,0) [0|0] "cm" DRIVER
 +
SG_ SENSOR_SONARS_middle : 20|10@1+ (1,0) [0|0] "cm" DRIVER
 +
SG_ SENSOR_SONARS_rear : 30|10@1+ (1,0) [0|0] "cm" DRIVER
 +
 +
BO_ 250 DESTINATION_LOCATION: 8 BRIDGE_SENSOR
 +
SG_ DEST_LATITUDE : 0|28@1+ (0.000001,-90.000000) [-90|90] "Degrees" GEO
 +
SG_ DEST_LONGITUDE : 28|28@1+ (0.000001,-180.000000) [-180|180] "Degrees" GEO
 +
 +
BO_ 300 DRIVER_TO_MOTOR: 2 DRIVER
 +
SG_ DRIVER_TO_MOTOR_speed : 0|8@1+ (1,0) [-99|99] "mph" MOTOR
 +
SG_ DRIVER_TO_MOTOR_direction : 8|8@1- (1,-2) [-2|2] "degree" MOTOR
 +
 +
BO_ 600 MOTOR_SPEED: 4 MOTOR
 +
SG_ MOTOR_SPEED_info : 0|16@1- (0.01,-30.01) [-30.01|30.01] "mph" DRIVER, BRIDGE_SENSOR
 +
SG_ MOTOR_SPEED_pwm : 16|16@1+ (0.01, 0) [0.01|20.01] "pwm" DRIVER, BRIDGE_SENSOR
 +
 +
BO_ 400 GEO_CONTROLLER_COMPASS: 8 GEO
 +
  SG_ HEADING : 0|12@1+ (0.1,0) [0|359.9] "Degrees" DRIVER,BRIDGE_SENSOR
 +
  SG_ BEARING : 12|12@1+ (0.1,0) [0|359.9] "Degrees" DRIVER,BRIDGE_SENSOR
 +
  SG_ DISTANCE_TO_DESTINATION: 24|16@1+ (0.1,0) [0|359.9] "Degrees" DRIVER,BRIDGE_SENSOR
 +
 +
 +
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_ BO_ 100 "Sync message used to synchronize the controllers";
 +
CM_ BU_ GEO "To provide raw GPS and compass heading";
 +
CM_ SG_ 100 DRIVER_HEARTBEAT_cmd "Heartbeat command from the driver";
 +
 +
//VAL_ 100 DRIVER_HEARTBEAT_cmd 2 "DRIVER_HEARTBEAT_cmd_REBOOT" 1 "DRIVER_HEARTBEAT_cmd_SYNC" 0 "DRIVER_HEARTBEAT_cmd_NOOP" ;
 +
VAL_ 300 DRIVER_TO_MOTOR_direction -2 "MOTOR_direction_HARD_LEFT" -1 "MOTOR_direction_SOFT_LEFT" 0 "MOTOR_direction_STRAIGHT" 1 "MOTOR_direction_SOFT_RIGHT" 2 "MOTOR_direction_HARD_RIGHT" ;
  
 
=== <font color="0000FF">Technical Challenges </font>===
 
=== <font color="0000FF">Technical Challenges </font>===

Revision as of 20:56, 18 April 2022

FireBolt RC Car

Abstract

Firebolt is battery powered autonomous RC car. The car uses four microcontrollers for communication between the nodes- driver node, motor node, bridge & sensor node, and geological node over the CAN bus. It is interfaced to the mobile application which sends GPS coordinates for the destination location to the driver node and reaches the destination by avoiding any obstacles that comes in the path. For obstacle detection and avoidance it uses Ultrasonic Sensor and makes the decision of steering and maintaining speed based on the bridge and sensor node's input.

Objectives & Introduction

Objectives

  • RC car can communicate with an Android application to:
    • Receive new coordinates to travel to
    • Send diagnostic information to the application
    • Emergency stop and start driving
  • RC car can travel to received coordinates in an efficient path while avoiding obstacles
  • RC car can maintain speed when driving on sloped ground
  • Design printed circuit board (PCB) to neatly connect all SJ2 boards
  • Design and 3D print sensor mounts for the ultrasonic sensors
  • Design a simple and intuitive user interface for the Android application
  • Design a DBC file

Introduction

The Firebolt RC car uses 4 SJ2 boards as nodes on the CAN bus

  1. Driver Node
  2. GEO Node
  3. Sensors and Bridge Node
  4. Motor Node
  5. Mobile Application

Team Members & Responsibilities

  • Priyanka Rai
    • Geo Controller
    • Bridge and Sensor Controller
    • Wiki Page Update
  • Ritu Patil
    • Motor Controller
    • Android Application
    • Integration Testing
  • Ritika Beniwal
    • Driver Node
    • PCB Designing
    • Wiki Page Update
  • Utsav Savaliya
    • Sensor Controller
    • Driver Node

Schedule

Week# Start Date Target Date Task Completion Date Status
Week 1
  • 03/06
  • 03/08
  • 03/12
  • 03/10
  • 03/10
  • 03/12
  • Study and discuss previous project reports
  • Brainstorm on the requirements for the project
  • Identify and order/purchase the required components
  • 03/10
  • 03/10
  • 03/12
  • Completed
  • Completed
  • Completed
Week 2
  • 03/13
  • 03/13
  • 03/14
  • 03/14
  • 03/18
  • 03/18
  • Distribute initial roles among the team members
  • Study the datasheets and manual of acquired components
  • Create and setup Gitlab Repository
  • 03/14
  • 03/18
  • 03/18
  • Completed
  • Completed
  • Completed
Week 3
  • 03/20
  • 03/22
  • 03/20
  • 03/25
  • 03/26
  • 03/24
  • Write basic driver for ultrasonic sensor
  • Analyze and decide the hardware placement of the RC Car
  • Create SENSOR and DRIVER nodes to transmit and receive data
  • 03/26
  • 03/23
  • 03/25
  • Completed
  • Completed
  • Completed
Week 4
  • 03/27
  • 03/27
  • 03/27
  • 04/04
  • 04/01
  • 03/28
  • Create the GEO node to get coordinates and cardinal directions from GPS and Compass
  • Create the MOTOR node to drive the RC Car
  • Design DBC file and create CAN signals for every node
  • 04/02
  • 04/04
  • 04/01
  • Completed
  • Completed
  • Completed
Week 5
  • 04/02
  • 04/02
  • 04/02
  • 04/08
  • 04/08
  • 04/08
  • Finalize the DBC file
  • Design obstacle avoidance and steering logic on the DRIVER node
  • Design motor driving logic on the MOTOR node with the encoder
  • Start and design the Bluetooth app xml for destination.
  • 04/09
  • 04/09
  • 04/09
  • Completed
  • Completed
  • Completed
Week 6
  • 04/09
  • 04/09
  • 04/09
  • 04/09
  • 04/09
  • 04/15
  • 04/15
  • 04/15
  • 04/15
  • 04/15
  • Integrate GPS module with compass to get the current location.
  • Write UART interface for Bluetooth integration on sensor node.
  • Get raw sensor data from the ultrasonic sensor.
  • Integrate GEO node to DRIVER node for navigation. Check whether the DRIVER node is receiving the coordinates.
  • Backend development for android app. Write the GPS and google maps interface logic.
  • 04/15
  • 04/15
  • 04/15
  • 04/15
  • 04/15
  • Completed
  • Completed
  • Completed
  • Completed
  • In Progress
Week 7
  • 04/16
  • 04/16
  • 04/16
  • 04/16
  • 04/16
  • 04/16
  • 04/23
  • 04/23
  • 04/23
  • 04/23
  • 04/23
  • 04/23
  • Communicate to the GEO node over Bluetooth via Android app
  • Complete Driver obstacle logic
  • Design driving decision logic based on the navigation data
  • Start designing PCB Board Schematic for mounting the ECUs
  • Filtering ultrasonic sensor data and sending processed data to Driver
  • RPM Sensor logic and testing.
  • 04/
  • 04/
  • 04/
  • 04/
  • 04/
  • 04/
  • Not Completed
  • In Progress
  • Not Completed
  • Not Completed
  • Not Completed
  • In Progress
Week 8
  • 04/25
  • 04/25
  • 04/25
  • 04/25
  • 04/25
  • 04/30
  • 04/30
  • 04/30
  • 04/30
  • 04/30
  • Design a dashboard on the LCD to display the values
  • Driver logic for sensor data and geo data.
  • Add functionalities to display various sensor data on the Android app
  • Test and improve the RC car performance based on the changes
  • Collective Test 1: Drive the car to a hardcoded GPS destination
  • 04/
  • 04/
  • 04/
  • 04/
  • 04/
  • Not Completed
  • Not Completed
  • Not Completed
Week 9
  • 05/01
  • 05/01
  • 05/01
  • 05/01
  • 05/01
  • 05/07
  • 05/07
  • 05/07
  • 05/07
  • 05/07
  • Design individual architecture diagrams and algorithms for documentation
  • Make any necessary improvements based on previous test results
  • Complete the final version of the Android app
  • Get the PCB printed
  • Collective Test 2: Test the car driving with navigation data from the Android app
  • 05/
  • 05/
  • 05/
  • 05/
  • 05/
  • Not Completed
  • Not Completed
  • Not Completed
  • Not Completed
Week 10
  • 05/09
  • 05/09
  • 05/09
  • 05/09
  • 05/14
  • 05/14
  • 05/14
  • 05/14
  • Replace the circuits with their corresponding PCBs and assemble
  • Complete the RC Car structure and assembly with the 3D printed parts - Prototype 1
  • Refactor the code modules with necessary improvements
  • Collective Test 3: Test car on various terrains and slopes
  • 05/
  • 05/
  • 05/
  • 05/
  • Not Completed
  • Not Completed
  • Not Completed
  • Not Completed
Week 11
  • 05/16
  • 05/16
  • 05/16
  • 05/16
  • 05/21
  • 05/21
  • 05/21
  • 05/21
  • Revise and improve the wiki report to cover all the aspects of design and implementation
  • Fix all the errors and make improvements
  • Final testing of all the modules and car
  • Collective Test 4: Have the final version of the project tested with all the functionalities
  • 05/
  • 05/
  • 05/
  • 05/
  • Not Completed
  • Not Completed
  • Not Completed
  • Not Completed
Week 12
  • 05/25
  • 05/25
  • 05/27
  • 05/27
  • Demo
  • Final Wiki Page Update with addition of all the problems faced during the development
  • 05/
  • 05/
  • Not Completed
  • Not Completed


Parts List & Cost

Item# Part Desciption Vendor Qty Cost
1 RC Car Traxxas [1]
2 CAN Transceivers MCP2551-I/P Comimark [2]
3 Ultrasonic Sensors Max Botix[3]
4 GPS and Antenna Adafruit[4]
5 HC05 bluetooth RF Transreceiver HiLetgo[5]
6 Triple-axis Accelerometer Adafruit[6]
7 Traxxas RPM Sensor Traxxas[7]
8 Discrete Electronic Components Generic[8]
9 Buck-Boost Voltage Regulator Generic[9]
10 Traxxas Telemetry Trigger magnet & holder Traxxas[10]
11 Acrylic Sheet Tap Plastic
12 Battery
13 Traxxas Battery and Charger


Printed Circuit Board

PCB Schematic

PCB Design

CAN Communication

We use controller area network to broadcast data between the 4 nodes. All nodes are connected to each other through a physically conventional two wire bus. The wires are a twisted pair with 120 Ω resistors at each ends of the bus. 1s and 0s are transmitted as CAN High(0V difference) and Can Low(2v difference). A CAN frame has the following contents:

  • Data Length Code (4bits)
  • Remote Transmission Request.
  • ID extend bit.
  • Message ID (11 bit or 29 bit)
  • Data bytes( depends on DLC)
  • CRC


Arbitration: No two nodes will transmit at the same time because if arbitration. A lower Message-ID has a Higher priority on the CAN bus since 0 is the dominant bit.

Bit Stuffing: CAN bus stuffs extra bits when a long chain of multiple 1's or 0's occur to improve CAN integrity.

Sr. No Message ID Message function Receivers
Driver Controller
1 speed and steering direction for the motor. Motor
2 Destination reached Sensor
Sensor Controller
1 Sensor sonars from front, back, left ,right sensor Driver
Motor Controller
8 motor speed, motor direction Driver
Geo and Bridge Controller
1 Bearing, Heading and Distance Driver
Debug messages
1 Driver Debug SENSOR,MOTOR,GEO_AND_BRIDGE
1 Motor Debug SENSOR,MOTOR,GEO_AND_BRIDGE
1 Sensor Debug SENSOR,MOTOR,GEO_AND_BRIDGE


Hardware Design


DBC File



Sensor ECU

Sensor Controller Diagram


Hardware Design

Sensor Controller Schematic

Board Pin Connections

Sensors are interfaced with combination of GPIO, ADC Pins on SJTWo board. Below is the descriptive pin layout:


Software Design

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 BRIDGE_SENSOR GEO


BO_ 100 DRIVER_HEARTBEAT: 1 DRIVER

 SG_ DRIVER_HEARTBEAT_cmd : 0|8@1+ (1,0) [0|0] "" BRIDGE_SENSOR,MOTOR,GEO

BO_ 200 SENSOR_SONARS: 5 BRIDGE_SENSOR

SG_ SENSOR_SONARS_left : 0|10@1+ (1,0) [0|0] "cm" DRIVER
SG_ SENSOR_SONARS_right : 10|10@1+ (1,0) [0|0] "cm" DRIVER
SG_ SENSOR_SONARS_middle : 20|10@1+ (1,0) [0|0] "cm" DRIVER
SG_ SENSOR_SONARS_rear : 30|10@1+ (1,0) [0|0] "cm" DRIVER

BO_ 250 DESTINATION_LOCATION: 8 BRIDGE_SENSOR

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

BO_ 300 DRIVER_TO_MOTOR: 2 DRIVER

SG_ DRIVER_TO_MOTOR_speed : 0|8@1+ (1,0) [-99|99] "mph" MOTOR
SG_ DRIVER_TO_MOTOR_direction : 8|8@1- (1,-2) [-2|2] "degree" MOTOR

BO_ 600 MOTOR_SPEED: 4 MOTOR SG_ MOTOR_SPEED_info : 0|16@1- (0.01,-30.01) [-30.01|30.01] "mph" DRIVER, BRIDGE_SENSOR SG_ MOTOR_SPEED_pwm : 16|16@1+ (0.01, 0) [0.01|20.01] "pwm" DRIVER, BRIDGE_SENSOR

BO_ 400 GEO_CONTROLLER_COMPASS: 8 GEO

 SG_ HEADING : 0|12@1+ (0.1,0) [0|359.9] "Degrees" DRIVER,BRIDGE_SENSOR
 SG_ BEARING : 12|12@1+ (0.1,0) [0|359.9] "Degrees" DRIVER,BRIDGE_SENSOR
 SG_ DISTANCE_TO_DESTINATION: 24|16@1+ (0.1,0) [0|359.9] "Degrees" DRIVER,BRIDGE_SENSOR


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_ BO_ 100 "Sync message used to synchronize the controllers"; CM_ BU_ GEO "To provide raw GPS and compass heading"; CM_ SG_ 100 DRIVER_HEARTBEAT_cmd "Heartbeat command from the driver";

//VAL_ 100 DRIVER_HEARTBEAT_cmd 2 "DRIVER_HEARTBEAT_cmd_REBOOT" 1 "DRIVER_HEARTBEAT_cmd_SYNC" 0 "DRIVER_HEARTBEAT_cmd_NOOP" ; VAL_ 300 DRIVER_TO_MOTOR_direction -2 "MOTOR_direction_HARD_LEFT" -1 "MOTOR_direction_SOFT_LEFT" 0 "MOTOR_direction_STRAIGHT" 1 "MOTOR_direction_SOFT_RIGHT" 2 "MOTOR_direction_HARD_RIGHT" ;

Technical Challenges

Neighboring Sensor Interference:

Frequent noisy measurements:



Motor ECU

Hardware Design


Software Design

Technical Challenges



Geographical And Bridge Controller

Hardware Design











Software Design

Technical Challenges


Driver Node

Hardware Design

The Driver Node has one peripheral connected to it and that is the LCD screen.

Software Design

  • Driver Node Flow Chart

Technical Challenges



Mobile Application

User Interface

Software Design

This app has mainly two activities, The main activity and maps activity.

Maps Activity

Bluetooth/WIFI

Technical Challenges





Conclusion

Project Video

Project Source Code

Advise for Future Students

Acknowledgement

References

http://socialledge.com/sjsu/index.php/Industrial_Application_using_CAN_Bus