Difference between revisions of "S22: Firebolt"

From Embedded Systems Learning Academy
Jump to: navigation, search
(Team Members & Responsibilities)
(Software Design)
Line 660: Line 660:
  
 
=== Software Design ===
 
=== Software Design ===
 +
The GEO controller consisted of 4 main parts which are:
 +
1. GPS Module
 +
2. Compass
 +
3.Waypoints Algorithm
 +
4. Geo Logic
 +
 +
The Geo logic takes data from GPS module processes it to get current coordinates, takes data from compass for raw heading. After acquiring data from compass and GPS, it calculates heading , bearing and distance and sends it on CAN bus.
 +
 +
1. GPS Processing
 +
 +
The GPS module uses UART1 to communicate with our SJ2 board. The API call for the GPS driver requires setting up the gps registers to only allow GPGGA data to improve processing. The main API function is called gps__run_once() which digests data from the physical GPS hardware. Inside gps__run_once(), we call two functions that help with parsing the gps coordinates. The first is taking using a line buffer for the UART characters that are digested during operation and checking if they are in fact a full GPGGA string. The second function parses those coordinates from the line buffer and converts them from GPGGA minutes data to polar coordinates. Once the function is called, global static variables located in geo_gps.c are used while a gps__get_coorindate() function is called whenever the API's data wants to be used outside of the gps.c file. In order to check if there is a gps fix, we created a function that checks if certain GPGGA bits are set or not.
 +
 +
2.
  
 
=== Technical Challenges ===
 
=== Technical Challenges ===

Revision as of 22:43, 6 May 2022

The Firebolt
The RC Car

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 after performing calculations based on the bridge and sensor node's data.

Objectives & Introduction

Objectives

The objective of this project is to get hands on experience of application of embedded systems in autonomous vehicles, have understanding of CAN bus communication, CAN database files, TDD and other related tools such as PCAN dongle and Busmaster.

Software side:-

  • The car can communicate with an Android application
  • Receive coordinates from gps to drive itself to the destination while avoiding obstacles
  • Send diagnostic information to the LCD display
  • Take care of elevation and make right speeding decisions
  • DBC file for all the nodes

Hardware side:-

  • Design PCB for four controllers and other necessary components
  • Choose good options for mounting the ultrasonic sensors on the car
  • Make a good GUI Android application for interfacing with the microcontroller

Introduction

Nodes of the RC Car are:

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

Team Members & Responsibilities

Priyanka Rai

  • Geo Controller
  • GPS and Compass Interfacing
  • Integration Testing
  • Wiki Page Update

Ritu Patil

  • Motor Controller
  • Integration Testing
  • Wiki Page Update

Ritika Beniwal

  • Driver Node
  • LCD interfacing
  • Integration Testing
  • Wiki Page Update

Utsav Savaliya

  • Sensor Controller
  • Integration Testing
  • Wiki Page Update

Dhanush Babu

  • Bluetooth module interfacing
  • Android App

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/02
  • 04/08
  • 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
  • 04/09
  • Completed
  • 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. Should be able to scan BT devices and connect.
  • 04/15
  • 04/15
  • 04/15
  • 04/15
  • 04/15
  • Completed
  • Completed
  • Completed
  • Completed
  • Completed
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
  • Lay out basic PCB Board design for mounting the ECUs
  • Filtering ultrasonic sensor data and sending processed data to Driver
  • RPM Sensor logic and testing.
  • 04/26
  • 04/26
  • 04/26
  • 04/26
  • 04/26
  • 04/26
  • Completed
  • Completed
  • Completed
  • Completed
  • Completed
  • Completed
Week 8
  • 04/25
  • 04/25
  • 04/25
  • 04/25
  • 04/25
  • 04/25
  • 04/30
  • 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 functionality for pinning location on maps and extracting latitude and longitude
  • Improve obstacle avoidance logic
  • Break and ramp logic for the motor.
  • Collective Test 1: Drive the car to a hardcoded GPS destination
  • 04/
  • 04/
  • 04/
  • 04/
  • 04/
  • 04/
  • On Going
  • On Going
  • Not Done
  • On Going
  • On Going
  • Not Done
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 Done
  • Not Done
  • Not Done
  • Not Done
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 Done
  • Not Done
  • Not Done
  • Not Done
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 Done
  • Not Done
  • Not Done
  • Not Done
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 Done
  • Not Done


Parts List & Cost

Item# Part Desciption Vendor Qty Price($)
1 RC Car Traxxas [1] 1 280
2 CAN Transceivers MCP2551-I/P Comimark [2] 5 8.99
3 Ultrasonic Sensors Max Botix[3] 4 24.95
4 GPS Breakout Board Adafruit[4] 1 29.95
5 GPS Antenna Adafruit[5] 1 19.95
6 RPSMA female to mhf4 Superbat[6] 1 7.99
7 HC05 bluetooth RF Transceiver HiLetgo[7] 1 15.99
8 Triple-axis Accelerometer Adafruit[8] 1 14.95
9 Traxxas RPM Sensor Traxxas[9] 1 13.76
10 Traxxas Battery and Charger Traxxas[10] 1 62.95


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.

DBC File

The DBC file is a simple text file that consists of information for decoding raw CAN bus data to physical values or in human readable form.


Sr. No Message ID Message function Receivers
Driver command
1 300 speed and steering direction for the motor. Motor
2 100 Driver running Motor, Sensor, Geo
Sensor Controller
3 200 Sensor sonars from front, back, left ,right sensor Driver
Motor Controller
4 600 motor speed, motor direction Driver
Geo and Bridge Controller
5 250 Bearing, Heading and Distance Driver
Debug messages
6 Driver Debug SENSOR,MOTOR,GEO_AND_BRIDGE
7 Motor Debug SENSOR,MOTOR,GEO_AND_BRIDGE
8 Sensor Debug SENSOR,MOTOR,GEO_AND_BRIDGE

The ECUs

In this section we will explain the hardware design, logic and challenges faced during development of every node invloved.


Sensor and Bluetooth ECU

Sensor Controller Diagram


Software Design

Technical Challenges

Neighboring Sensor Interference:

Frequent noisy measurements:



Motor ECU

The Motor ECU acts as an encoder for the DC motor (used for propulsion) and Servo motor (used for turning the axle and changing direction of the car). The car is a two wheel drive with DC motor connected to the rear wheels and the servo motor is connected to the front wheels. The DC motor is controlled by Electronic Speed Control. The ECU supplies PWM signal to the ESC and the ESC powers the DC motor. The Servo motor is powered by the car battery as well and gets its PWM signal from the ECU.

Hardware Design

Electronic Speed Control

Traxass ESC XL5

Servo Motor

Traxass Servo Motor

RPM Sensor

Traxass RPM Sensor

DC Motor

Traxxas Brushless DC Motor


The motor node(SJ-2) interfaces primarily interfaces with:

  • Traxass Motor ESC over PWM
  • Traxass RPM Sensor over GPIO Interrupt
  • Traxass Servo Motor over PWM

All these three components have 3 pins each. The functionalities of these pins are mentioned in the table below.

Module Black Red White
ESC Ground Vout : 6 V PWM Input
Servo Ground Vin : 6 V PWM Input
RPM Sensor Ground Vin : 6 V Pulse Output

Software Design

The motor node acts based on the speed and direction received over CAN bus from the Driver Node. The positive speed values are treated as forward motion and the negative speed values are considered to be the reverse motion of the RC car.

The steering angles are divided into 5-degree segments and the motor node sends the pre-defined pwm duty cycle of the particular segment to the servo motor depending on the angle value received from the driver node.

Technical Challenges



Geographical And Bridge Controller

Hardware Design

Software Design

The GEO controller consisted of 4 main parts which are: 1. GPS Module 2. Compass 3.Waypoints Algorithm 4. Geo Logic

The Geo logic takes data from GPS module processes it to get current coordinates, takes data from compass for raw heading. After acquiring data from compass and GPS, it calculates heading , bearing and distance and sends it on CAN bus.

1. GPS Processing

The GPS module uses UART1 to communicate with our SJ2 board. The API call for the GPS driver requires setting up the gps registers to only allow GPGGA data to improve processing. The main API function is called gps__run_once() which digests data from the physical GPS hardware. Inside gps__run_once(), we call two functions that help with parsing the gps coordinates. The first is taking using a line buffer for the UART characters that are digested during operation and checking if they are in fact a full GPGGA string. The second function parses those coordinates from the line buffer and converts them from GPGGA minutes data to polar coordinates. Once the function is called, global static variables located in geo_gps.c are used while a gps__get_coorindate() function is called whenever the API's data wants to be used outside of the gps.c file. In order to check if there is a gps fix, we created a function that checks if certain GPGGA bits are set or not.

2.

Technical Challenges


Driver Node

Driver Node is the master controller. It receives input from sensor and bridge node, processes it to make right decision for controlling the speed and steering direction of the car and finally commands the motor node to drive accordingly. This node is also interfaced to an LCD, which acts as dashboard of the car and displays information such as car speed and distance to destination on the screen.

Hardware Design

Software Design

Technical Challenges



Mobile Application

User Interface

Software Design

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