S19: Automophiles

From Embedded Systems Learning Academy
Revision as of 22:07, 13 May 2019 by Proj user3 (talk | contribs) (Connecting over Bluetooth)

Jump to: navigation, search

Project Title

Automophiles

Abstract

Automophiles is a an autonomous RC car capable of obstacle detection and GPS navigation along certain routes on the SJSU campus. The embedded system driving the car is essentially a distributed system of isolated nodes each focusing on a specific task such as polling sensor data or monitoring GPS location data. These nodes are then integrated into a functional vehicle on the CAN bus.

Introduction

The project was divided into 7 modules:

  • Sensor Controller: This unit initializes and constantly reads the three front-facing laser sensors using I2C. These unfiltered readings are then immediately sent over the CAN bus to the Master controller for processing.
  • Motor Controller: This unit directly interfaces with the Electronic Speed Controller (ESC) for the DC motors as well as the servo motors. The two PWM interfaces for each of the respective motors are controlled depending on commands sent from the Master controller.
  • Master Controller: This unit is responsible for implementing a state machine and determining the current behavior of the vehicle depending on the various inputs fed from the four other support controllers.
  • Geographical Controller: This unit is responsible for interfacing with a digital compass and GPS and determining the current location state of the vehicle at all times. GPS checkpoints are also defined and handled here for the purposes of route calculation. This information is then fed to the Master and Bridge controllers over the CAN bus.
  • Bridge Controller: This unit acts as the central communication module for the vehicle. All interactions with the Android application back and forth are handled here.
  • Android Application: The application works as the entry point for users to interact with the vehicle. Critical interactions like setting destination as well as viewing debug information are handled through the application.
  • PCB/Hardware Integration: Hardware integration over PCB/protoboard is done to reduce the likelihood of potential failures coming from hardware connections/interfaces

Team Members & Responsibilities

<Team Picture>


Schedule

Week# Date Task Status Completion Date
1 02/12/19
  • Form Teams

Completed

02/12/19

2 02/19/19
  • Setup a Slack workspace for the team.
  • Setup private channel on Slack workspace

Completed

02/19/19

3 02/26/19
  • Create a Gitlab project
  • Order 3.3V CAN transcievers
  • Create merge requests for every member
  • Invite Preet and TA to Gitlab project

Completed

02/26/19

4 03/05/19
  • Research Past Projects.
  • Setup a Bill of Materials.
  • Order an RC car and charger.
  • Assign responsibilities
  • Create Splitwise group
  • Order HC-06 Bluetooth module
  • Demo CAN Communication

Completed

03/11/19

5 03/12/19
  • Finish ordering components for additional modules (GPS/compass, Sensors, etc)
  • Init Android project/begin work & research on UI fragments, Bluetooth, Maps API
  • Make unit-level diagrams of each module

Completed

03/18/19

6 03/19/19
  • Interface GPS module to SJOne Board over UART
  • Initialize bridge with HC-06 and receive bytes from sample Bluetooth app
  • Make high-level block diagram of system
  • Write sample DBC file for communication of each module
  • Establish sample communication of every module on CAN bus showing on BUS Master

Completed

03/25/19

7 03/26/19
  • Configure ESC for correct speed outcome according to frequency & PWM values.
  • Develop PWM API based on configuration results.
  • Check Laser Sensor response on I2C bus with I2C Master.

Completed

04/01/19

8 04/02/19
  • Finalize PCB design/order by end of week
  • "Set-up Bluetooth fragment on Android app/transmit to board
  • Verify reception of bytes from Bluetooth application
  • Develop Laser sensor driver API to get singleshot response.
  • Develop periodic to exercise all motor functionalities such as turn left, move forward for debug

Completed

04/08/19

9 04/09/19
  • Interface GPS and receive correct GPRMC sentences
  • Set-up master to send sample commands to motor controller
  • Hookup Motor Controller with CAN bus and successfully receive messages from Master
  • Hookup Bridge Controller with CAN bus to Master and successfully control RC Car

Completed

04/15/19

10 04/16/19
  • Build obstacle avoidance state machine in Master controller
  • Test motor responsiveness in hallway testing
  • Add temporary mounts for three sensor modules on car
  • Configure Busmaster with converted DBC file and display working sensor values
  • Write module-level unit tests
  • Add MIA management to each module
  • Finalize overall UI of Android app

Completed

04/22/19

11 04/23/19
  • Mount RPM sensor on DC motor and do ramp testing
  • Streamline and verify obstacle avoidance on uphill and downhill ramp tests
  • Mount compass on RC car and transmit calibrated heading on CAN bus
  • Mount GPS with external antenna on RC car and transmit GPS fix and current coords
  • Decode GPS coords and build transmit frame for transmission to Android app
  • Verify correct endianness and format of received coords

Completed

04/29/19

12 04/30/19
  • Add dozens of useful debug messages and transmit on CAN
  • Configure Busmaster to display signal graphs of RPM/sensor values
  • add debug popup menu on Android app to display sensor and GPS values
  • Build transmit frame for 3 sensor value floats and transmit to Android app
  • Test and validate obstacle avoidance in outside environments

Completed

05/06/19

13 05/07/19
  • Add target heading and distance calculation logic to GPS module
  • Display GPS target heading and distance in Android debug menu
  • Add a physical on/off switch to RC car setup
  • Add bridge go/stop logic depending on received data from Android app
  • Add start/stop logic to master state machine depending on bridge input
  • Interface and display RPM value/motor cmd on LCD display
  • Receive PCB

Completed

05/07/19

14 05/14/19
  • Add checkpoint logic to GPS module given predefined routes
  • Replace current setup with PCB interface
  • Perform outside testing on predefined routes
  • Finalize wiki report

In Progress

15 05/22/19
  • Final Demo

Parts List & Cost

Item# Part Desciption Vendor Qty Cost
1 RC Car Traxxas 1 $240.00
2 RC Car Charger Wall Adapter Traxxas 1 $25.00
3 CAN Transceiver PCB Board Waveshare 7 $48.03
4 HC-06 Bluetooth Module eBay 1 $10.51
5 PCB Bay Area Circuits 2 $250
6 Laser Sensors Amazon 4 $29.97
7 LCD Preet 1 Free
8 DB9 Connector Breakout Amazon 1 $6.99
9 Adafruit GPS Breakout Amazon 1 $43.61
10 External GPS Antenna Amazon 1 $14.99
11 Mini-PCI to RP-SMA Antenna Cable Amazon 1 $4.99

Printed Circuit Board

<Picture and information, including links to your PCB>

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

VERSION ""

NS_ :

BS_:

BU_: MASTER GPS BRIDGE MOTOR SENSOR

BO_ 100 MOTOR_CMD: 3 MASTER 
 SG_ STEER_CMD_enum : 0|8@1+ (1,0) [0|0] "" MOTOR
 SG_ SPEED_CMD : 8|8@1+ (0.1,0) [0|0] "m/sec" MOTOR
 SG_ MASTER_INIT_DEBUG : 16|1@1+ (1,0) [0|0] "" MOTOR
 SG_ MASTER_SEND_LEFT : 17|1@1+ (1,0) [0|0] "" MOTOR
 SG_ MASTER_SEND_STRAIGHT : 18|1@1+ (1,0) [0|0] "" MOTOR
 SG_ MASTER_SEND_RIGHT : 19|1@1+ (1,0) [0|0] "" MOTOR
   
BO_ 105 RPM_VALUE_CMD: 4 MOTOR 
 SG_ RPM_VALUE : 0|8@1+ (1,0) [0|0] "" BRIDGE,MASTER
 SG_ CAN_INIT_MSG : 8|8@1+ (1,0) [0|0] "" BRIDGE,MASTER
 SG_ RECEIVED_STEER_CMD : 16|8@1+ (1,0) [0|0] "" BRIDGE,MASTER
 SG_ MOTOR_HEARTBEAT : 24|1@1+ (1,0) [0|0] "" BRIDGE,MASTER
 
BO_ 110 COMPASS_CMD: 4 GPS
 SG_ HEADING : 0|32@1+ (0.1,0) [0|0] "" BRIDGE,MASTER
 
BO_ 115 COMPASS_INIT_DEBUG: 1 GPS
 SG_ INIT_DEBUG : 0|1@1+ (1,0) [0|0] "" MASTER
 
BO_ 120 GPS_CURRENT_LAT_LONG: 8 GPS
 SG_ CUR_LAT : 0|32@1+ (0.000001,0.000000) [36.000000|38.000000] "degrees" BRIDGE,MASTER
 SG_ CUR_LONG : 32|32@1+ (0.000001,-123.000000) [-123.000000|-120.000000] "degrees" BRIDGE,MASTER
 
BO_ 125 GPS_INIT_DEBUG: 1 GPS
 SG_ INIT_DEBUG : 0|1@1+ (1,0) [0|0] "" MASTER
 
BO_ 130 GPS_FIX_DEBUG: 1 GPS
 SG_ GPS_FIX_DEBUG : 0|1@1+ (1,0) [0|0] "" MASTER
 
BO_ 135 COMPASS_MAN_CAL_DEBUG: 1 GPS
 SG_ IS_CAL_DEBUG : 0|1@1+ (1,0) [0|0] "" MASTER

BO_ 140 GPS_HEARTBEAT: 1 GPS
 SG_ GPS_HEARTBEAT : 0|1@1+ (1,0) [0|0] "" MASTER
 
BO_ 145 GPS_TARGET_HEADING: 8 GPS
 SG_ TARGET_HEADING : 0|32@1+ (0.1,0) [0.00|360.00] "degrees" BRIDGE,MASTER
 SG_ DISTANCE : 32|32@1+ (0.1,0) [0|0] "meters" BRIDGE,MASTER

BO_ 200 SENSOR_STATUS: 7 SENSOR
 SG_ SENSOR_FRONT : 0|16@1+ (1,0) [0|0] "milimeters" BRIDGE,MASTER
 SG_ SENSOR_LEFT : 16|16@1+ (1,0) [0|0] "milimeters" BRIDGE,MASTER
 SG_ SENSOR_RIGHT : 32|16@1+ (1,0) [0|0] "milimeters" BRIDGE,MASTER
 SG_ SENSOR_LEFT_BLOCKED : 48|1@1+ (1,0) [0|0] "" BRIDGE,MASTER
 SG_ SENSOR_CENTER_BLOCKED : 49|1@1+ (1,0) [0|0] "" BRIDGE,MASTER
 SG_ SENSOR_RIGHT_BLOCKED : 50|1@1+ (1,0) [0|0] "" BRIDGE,MASTER 
 SG_ SENSORS_HEARTBEAT : 51|1@1+ (1,0) [0|0] "" BRIDGE,MASTER
  
BO_ 300 BRIDGE_STOP: 1 BRIDGE
 SG_ BRIDGE_STOP : 0|1@1+ (1,0) [0|0] "" MASTER
 
BO_ 310 BRIDGE_GO: 1 BRIDGE
 SG_ BRIDGE_GO : 0|1@1+ (1,0) [0|0] "" MASTER
 
BO_ 315 BRIDGE_INIT_DEBUG: 1 BRIDGE
 SG_ INIT_DEBUG : 0|1@1+ (1,0) [0|0] "" MASTER

BO_ 320 BRIDGE_HEARTBEAT: 1 BRIDGE
 SG_ BRIDGE_HEARTBEAT : 0|1@1+ (1,0) [0|0] "" MASTER
 
BO_ 325 BRIDGE_DEST: 8 BRIDGE
 SG_ DEST_LAT : 0|32@1+ (0.000001,0) [36.000000|38.000000] "degrees" GPS
 SG_ DEST_LNG : 32|32@1+ (0.000001,-123) [-123.000000|-120.000000] "degrees" GPS
 

CM_ BU_ MASTER "The master controller driving the RC car";
CM_ BU_ SENSOR "The obstacle avoidance sensor module";
CM_ BU_ MOTOR "The motor module driving the car";
CM_ BU_ GPS "The GPS module";
CM_ BU_ BRIDGE "The main communications module between car and app";

BA_DEF_ SG_ "FieldType" STRING ;

BA_DEF_DEF_ "FieldType" "";

BA_ "FieldType" SG_ 100 STEER_CMD_enum "STEER_CMD_enum";
 
VAL_ 100 STEER_CMD_enum 2 "steer_straight" 1 "slight_left" 3 "slight_right" 0 "stop" 6 "steer_right" 4 "steer_left" 8 "reverse" 7 "left_reverse" 9 "right_reverse";

Sensor ECU

<Picture and link to Gitlab>

Hardware Design

Software Design

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

Technical Challenges

<Bullet or Headings of a module>

Unreliable sonor sensors

<Problem Summary> <Problem Resolution>



Motor Controller & LCD

<Picture and link to Gitlab>

Group Members

  • Uma Nataraj
  • Alisha Jean Patrao
  • Sanjana Devegowdanakoppalu Swamy Gowda

Hardware Design

Software Design

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

Technical Challenges

<Bullet or Headings of a module>

Unreliable Servo Motors

<Problem Summary> <Problem Resolution>



Geographical Controller

<Picture and link to Gitlab>

Group Members

  • Kevin Gadek
  • Nivedita Shiva Murthy
  • Alisha Jean Patrao

Hardware Design

Software Design

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

The Geographical Controller's software design consists of several main periodic tasks, gps_1Hz(), gps_50Hz(), and compass_50Hz().

Technical Challenges

Unreliable Compass heading

Unreliable GPS lock

<Problem Summary> <Problem Resolution>



Communication Bridge Controller

<Picture and link to Gitlab>

Group Members

  • Kevin Gadek
  • Uma Nataraj

Hardware Design

Hardware Design of Bridge

Software Design

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

Implementation

  • In 1 Hz periodic
    • Reset CAN bus if bus off
    • Send heartbeat to master
  • In 10 Hz

Technical Challenges

<Bullet or Headings of a module>

Insane Bug

<Problem Summary> <Problem Resolution>



Master Module

<Picture and link to Gitlab>

Hardware Design

Software Design

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

Technical Challenges

<Bullet or Headings of a module>

Improper Unit Testing

<Problem Summary> <Problem Resolution>



Mobile Application

<Picture and link to Gitlab>

Group Members

  • Kevin Gadek
  • Uma Nataraj

The Android application was the main gateway for user interaction with the vehicle and as such is crucial to the overall utility of the project. Critical elements such as setting destination and verifying debug values such as sensor values and current GPS coords without having to physically hook up the vehicle to Busmaster are all facilitated through the application. The app was designed for Android 8.1 (API level 27) with a minimum support requirement of Android 5.0 (API level 21).

Software Design

The application uses UI fragments to allow for better modularity and flexibility when building the application. In our case, all Google Map related activity could be constrained to MainActivity.java, all Bluetooth UI related activity to BluetoothFragment.java and Bluetooth background service activity to BluetoothService.java. Various UI layouts that are used such as activity_main.xml, bluetooth_fragment.xml and debug_popup.xml are subsequentially hooked up to these source files. This view-controller setup ensures a somewhat more focused interaction between Java source code and the various UI elements being hooked up.

MainActivity.java

The main focus of this code module is to hook up and interact with the Google Maps fragment as well as the toolbar at the top of the screen. activity_main.xml and debug_popup.xml are hooked up to this code module with the latter layout being displayed only when the debug button's onClickListener is invoked.

BluetoothFragment.java

BluetoothService.java

Technical Challenges

<Bullet or Headings of a module>

Connecting over Bluetooth

Summary: Application was was only connecting at startup and not continually trying to connect to car Resolution: When connect thread fails, simply restart the thread repeatedly until connection succeeds.



Conclusion

<Organized summary of the project>

<What did you learn?>

Project Video

Project Source Code

https://gitlab.com/cmpe-243-group/cmpe-243-self-driving-car

Advise for Future Students

<Bullet points and discussion>

Acknowledgement

References