Difference between revisions of "S20: Nimble"

From Embedded Systems Learning Academy
Jump to: navigation, search
(Technical Challenges)
(DBC File)
Line 362: Line 362:
 
<Show your CAN bus hardware design>
 
<Show your CAN bus hardware design>
  
=== DBC File ===
+
VERSION ""
<Gitlab link to your DBC file>
 
<You can optionally use an inline image>
 
  
 +
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_:
  
Shown below is the DBC implementation for this project.
 
<pre>
 
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_: DBG DRIVER IO MOTOR SENSOR BRIDGE GPS COMPASS CMP
 
BU_: DBG DRIVER IO MOTOR SENSOR BRIDGE GPS COMPASS CMP
  
Line 407: Line 402:
 
  SG_ MOTOR_CMD_SPEED : 8|8@1+ (1,-25) [-25|25] "" MOTOR
 
  SG_ MOTOR_CMD_SPEED : 8|8@1+ (1,-25) [-25|25] "" MOTOR
  
BO_ 200 SENSOR_DATA: 8 SENSOR
+
BO_ 151 MOTOR_DATA: 4 MOTOR
 +
SG_ MOTOR_DATA_RPM: 0|32@1+ (1,0) [0|0] "" DRIVER
 +
 
 +
BO_ 200 SENSOR_DATA: 8 BRIDGE
 
  SG_ SENSOR_SONARS_left : 0|16@1+ (1,0) [0|0] "cms" DRIVER
 
  SG_ SENSOR_SONARS_left : 0|16@1+ (1,0) [0|0] "cms" DRIVER
 
  SG_ SENSOR_SONARS_mid : 16|16@1+ (1,0) [0|0] "cms" DRIVER
 
  SG_ SENSOR_SONARS_mid : 16|16@1+ (1,0) [0|0] "cms" DRIVER
Line 414: Line 412:
  
 
BO_ 300 GPS_DESTINATION_INFO: 8 BRIDGE
 
BO_ 300 GPS_DESTINATION_INFO: 8 BRIDGE
SG_ GPS_DESTINATION_LAT : 0|28@1+ (0.000001,-90.000000) [-90|90] "degrees" DRIVER,GPS,MOTOR
+
SG_ GPS_DESTINATION_LAT : 0|32@1+ (0.000001,-90.000000) [-90|90] "degrees" DRIVER,GPS,MOTOR
SG_ GPS_DESTINATION_LONG : 28|29@1+ (0.000001,-180.000000) [-180|180] "degrees" DRIVER,GPS,MOTOR
+
SG_ GPS_DESTINATION_LONG : 32|32@1+ (0.000001,-180.000000) [-180|180] "degrees" DRIVER,GPS,MOTOR
  
 
BO_ 301 GPS_CURRENT_INFO: 8 GPS
 
BO_ 301 GPS_CURRENT_INFO: 8 GPS
SG_ GPS_CURRENT_LAT : 0|28@1+ (0.000001,-90.000000) [-90|90] "degrees" DRIVER,BRIDGE,MOTOR
+
SG_ GPS_CURRENT_LAT : 0|32@1+ (0.000001,-90.000000) [-90|90] "degrees" DRIVER,BRIDGE,MOTOR
SG_ GPS_CURRENT_LONG : 28|29@1+ (0.000001,-180.000000) [-180|180] "degrees" DRIVER,BRIDGE,MOTOR
+
SG_ GPS_CURRENT_LONG : 32|32@1+ (0.000001,-180.000000) [-180|180] "degrees" DRIVER,BRIDGE,MOTOR
  
 
BO_ 302 COMPASS: 6 GPS  
 
BO_ 302 COMPASS: 6 GPS  
Line 426: Line 424:
 
  SG_ CMP_DISTANCE : 32|16@1+ (0.01,0) [0|0] "meters" DRIVER,BRIDGE  
 
  SG_ CMP_DISTANCE : 32|16@1+ (0.01,0) [0|0] "meters" DRIVER,BRIDGE  
 
    
 
    
BO_ 100 DRIVER_HEARTBEAT: 1 DRIVER
+
BO_ 105 SENSOR_DEBUG: 1 BRIDGE
SG_ DRIVER_HEARTBEAT_cmd : 0|8@1+ (1,0) [0|0] "" SENSOR,MOTOR,GPS,BRIDGE
 
 
 
BO_ 101 SENSOR_HEARTBEAT: 1 SENSOR
 
SG_ SENSOR_heartbeat : 0|1@1+ (1,0) [0|1] "" DRIVER
 
 
 
BO_ 102 MOTOR_HEARTBEAT: 1 MOTOR
 
SG_ MOTOR_SENSOR_heartbeat : 0|1@1+ (1,0) [0|1] "" DRIVER
 
     
 
BO_ 103 GPS_HEARTBEAT: 1 GPS
 
SG_ GPS_SENSOR_heartbeat : 0|1@1+ (1,0) [0|1] "" DRIVER
 
   
 
BO_ 104 BRIDGE_HEARTBEAT: 1 BRIDGE
 
SG_ BRIDGE_SENSOR_heartbeat : 0|1@1+ (1,0) [0|1] "" DRIVER
 
 
 
BO_ 105 SENSOR_DEBUG: 1 SENSOR
 
 
  SG_ IO_DEBUG_CAN_init : 0|1@1+ (1,0) [0|0] "" DBG
 
  SG_ IO_DEBUG_CAN_init : 0|1@1+ (1,0) [0|0] "" DBG
 
  SG_ IO_DEBUG_sensor_init : 1|1@1+ (1,0) [0|0] "" DBG
 
  SG_ IO_DEBUG_sensor_init : 1|1@1+ (1,0) [0|0] "" DBG
Line 447: Line 430:
 
  SG_ IO_DEBUG_bus_off : 3|1@1+ (1,0) [0|0] "" DBG
 
  SG_ IO_DEBUG_bus_off : 3|1@1+ (1,0) [0|0] "" DBG
 
   
 
   
BO_ 106 MOTOR_DEBUG: 3 MOTOR
+
BO_ 106 MOTOR_DEBUG: 6 MOTOR
  SG_ IO_DEBUG_CAN_init : 0|1@1+ (1,0) [0|0] "" DBG
+
  SG_ IO_DEBUG_CAN_init : 0|1@1+ (1,0) [0|0] "" DBG,DRIVER
  SG_ IO_DEBUG_bus_off : 1|1@1+ (1,0) [0|0] "" DBG
+
  SG_ IO_DEBUG_bus_off : 1|1@1+ (1,0) [0|0] "" DBG,DRIVER
  SG_ IO_DEBUG_RPM_kph : 2|8@1+ (0.1,-25.6) [-25.6|25.5] "" DBG
+
  SG_ IO_DEBUG_Steering : 2|8@1+ (1,-2) [-2|2] "" DBG,DRIVER
  SG_ IO_DEBUG_Steering : 10|8@1+ (1,-2) [-2|2] "" DBG
+
  SG_ IO_DEBUG_RPM : 10|32@1+ (1,0) [0|0] "" DBG,DRIVER
 
   
 
   
 
BO_ 107 DRIVER_DEBUG: 1 DRIVER
 
BO_ 107 DRIVER_DEBUG: 1 DRIVER
Line 471: Line 454:
 
CM_ BU_ DRIVER "The driver controller driving the car";
 
CM_ BU_ DRIVER "The driver controller driving the car";
 
CM_ BU_ MOTOR "The motor controller of the car";
 
CM_ BU_ MOTOR "The motor controller of the car";
CM_ BU_ SENSOR "The sensor controller of the car";
 
 
CM_ BU_ BRIDGE "The bridge controller of the car";
 
CM_ BU_ BRIDGE "The bridge controller of the car";
 
CM_ BU_ GPS    "The GPS controller of the car";
 
CM_ BU_ GPS    "The GPS controller of the car";
Line 480: Line 462:
 
BA_DEF_ BO_ "GenMsgCycleTime" INT 0 0;
 
BA_DEF_ BO_ "GenMsgCycleTime" INT 0 0;
 
BA_DEF_ SG_ "FieldType" STRING ;
 
BA_DEF_ SG_ "FieldType" STRING ;
 +
 
BA_DEF_DEF_ "BusType" "CAN";
 
BA_DEF_DEF_ "BusType" "CAN";
 
BA_DEF_DEF_ "FieldType" "";
 
BA_DEF_DEF_ "FieldType" "";
Line 485: Line 468:
  
 
BA_ "GenMsgCycleTime" BO_ 100 1000;
 
BA_ "GenMsgCycleTime" BO_ 100 1000;
BA_ "GenMsgCycleTime" BO_ 200 50;
 
 
BA_ "FieldType" SG_ 100 DRIVER_HEARTBEAT_cmd "DRIVER_HEARTBEAT_cmd";
 
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" ;
 
VAL_ 100 DRIVER_HEARTBEAT_cmd 2 "DRIVER_HEARTBEAT_cmd_REBOOT" 1 "DRIVER_HEARTBEAT_cmd_SYNC" 0 "DRIVER_HEARTBEAT_cmd_NOOP" ;
</pre>
 
 
 
<HR>
 
<BR/>
 
  
 
== Sensor ECU ==
 
== Sensor ECU ==

Revision as of 06:17, 20 May 2020

Nimble

<Pic of the car>



Abstract

In this project, an autonomous vehicle framework for an RC car is presented using dedicated ECUs for motor control, on-board LCD display, steering control, sensor information handling, and communication bridging. A mobile application was also developed that allows for a user to set a destination, and receive updates on the RC car's position via a Bluetooth connection to the GPS unit. CAN communication between sensors and ECUs was defined via a DBC file. Code was developed using test-driven design principles in order to lower time spent debugging. Unit testing was performed using the CMock framework.

Introduction

The project was divided into these modules:

  • Sensor node
  • Motor node
  • Driver node
  • GPS node
  • Bridge control node
  • LCD node
  • Mobile application

The objective was to create an autonomous vehicle that could navigate to a given GPS coordinate sent via a mobile application. The vehicle moves towards the target position Using a pre-compiled list of checkpoints, and handles obstacles along the way via its ultrasonic and infrared sensors. Updates on Nimble's position are sent to the mobile application via bluetooth.

Team Members & Responsibilities

<Team Picture>

  • Tanmay Chandavarkar LinkedIn Gitlab
    • Sensor Module
    • Master Module
    • Wiki
  • Yuming Cheng [ LinkedIn] Gitlab
    • GPS Module
    • Master Module
    • Motor Module
    • LCD display
    • Wiki
  • Naeem Mannan [ LinkedIn] Gitlab
    • Wiki
    • Mobile Application
  • Francesco Vescio [ LinkedIn] Gitlab
    • Wiki
  • Lawrence Wan LinkedIn Gitlab
    • Master Module
    • GPS Module
    • Motor Controller
    • LCD display
    • Sensor Module
    • Wiki


Team Deliverables Schedule

WEEK

START DATE

END DATE

TASK DETAILS

STATUS

1 Feb 2020 4 March 2020
  • Create and establish GitLab repository
  • Establish slack channel and invite Preet
  • Look through previous years projects and study it
  • Distribute major roles among team members
  • Complete
  • Complete
  • Complete
  • Complete
2 05 March 2020 12 March 2020
  • Create a Bill of Materials.
  • Select and order an RC car.
  • Make Repo on Gitlab for all modules - Follow Naming Convention.
  • Making the Wiki schedule.
  • Complete
  • Complete
  • Complete
  • Complete
3 13 March 2020 19 March 2020
  • Select Part Number for Sensors (Tanmay, Ellis )
  • Designing and deciding PCB tool(Lawrence )
  • Finalizing GPS module by doing some research (Yuming )
  • Finalize and order LCD (Francesco )
  • Finalize Motor and Order it (Lawrence , Yuming )
  • Environmental setup of mobile app (Naeem )
  • 3/17/2020 -> Project Lab - RC Car Infrastructure
  • Complete
  • Complete
  • Complete
  • In Progress
  • In Progress
  • In Progress
  • Complete
4 20 March 2020 26 March 2020
  • Understand DBC and implement the DBC file compatible with all the controllers. (Updating the DBC files from all nodes)
  • Finish purchasing the Sensor (Tanmay)
  • Establish communication across all the CAN controllers over CAN bus based on the DBC file.
  • Verify the power-up interactions and configurations between Master and the other controllers.
  • Establish a connection over Bluetooth and mobile app.(Naeem)
  • 3/24/2020 -> Project Lab - GPS & Compass Node
  • 3/24/2020 -> Anonymous Reviews
  • In Progress
  • Complete
  • In Progress
  • In Progress
  • Complete
  • Complete
  • Complete
5 27 March 2019 09 April 2019
  • 3/24/2020 -> Finish deciding the Pins that will be used in each nodes.
  • 3/30/2020 -> Completed the rough draft of block digram and Flow chart for each node logics.
  • Establish a communication between Bluetooth devices.(Naeem)
  • Interfacing of ultrasonic sensors to the SJTwo board and check for basic functionality. (Tanmay, Ellis)
  • Interface of Servo & DC motor to the SJTwo board and check for basic functionality. (Yuming)
  • Interface Compass module with SJTwo board using I2C serial bus. (Lawrence)
  • Interface GPS module with SJTwo board. (Lawrence)
  • Interface bluetooth module with SJtwo board using serial Communication. (Naeem)
  • Configure bluetooth module name as Nimble using Communication Mode. (Naeem)
  • Add a TextView for displaying the Bluetooth connection status in mobile App.(Naeem)
  • Explore UI designing of LCD. (Francesco)
  • 4/01/2020 -> Updated Overall DBC file.
  • 4/01/2020 -> Update the wiki schedule.
  • 4/04/2020 -> Completed the Circuit designs for the PCB.
  • 4/04/2020 -> Finalized the components for PCB.
  • Complete
  • In Progress
  • In Progress
  • In Progress
  • In Progress
  • In Progress
  • In Progress
  • In Progress
  • In Progress
  • In Progress
  • In Progress
  • Complete
  • Complete
  • In Progress
  • In Progress
6 10 April 2020 16 April 2020
  • Implement basic obstacle avoidance algorithm based on sensor data and test the same.
  • Continue testing motor driver via commands from CAN bus.
  • Build in speed steps to reverse motor for reverse to work correctly.
  • Mount all the sensors and test for any dead band and modify their positions for maximum coverage.
  • Integrate the fusion of LIDAR and Ultrasound sensor to get overall feedback from all the directions.
  • Develop algorithm to avoid obstacles and plan the car's further navigation path.
  • Complete final prototype of the obstacle avoidance feature.
  • Calibrate Compass Module. Develop code for Compass module communication over CAN.
  • Test Run the Motors driven by wheel feedback and sensors, Basic obstacle avoidance.
  • 4/16/2020 -> Update the wiki schedule.
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
7 17 April 2020 23 April 2020
  • Configure GPS device baud rate and interface it with SJOne board using UART.
  • Send and receive current location, destination and checkpoint coordinates to and from App and Geo module via BRIDGE.
  • Calibrate sensors readings and work on filtering algorithm with Master & Sensor
  • Begin work on LCD to show vehicle live status(speed, fuel-status, obstacles, distance to destination etc.) in a GUI.
  • Finish implementing speed control on motor (to make sure requested speed is met based on RPM read).
  • Work on Car reversing using Motor Controllers.
  • Integrate all modules with the Master to test the data flow.
  • Validation & Verification of obstacle avoidance, steering logic with rear sensor inputs and reversing.
  • Start incorporating GEO Controller information to Master module Steering logic.
  • Decide, implement and test data exchange between Geo Controller and BRIDGE.
  • Calculate and send simple bearing angle and destination status on CAN to figure out initial challenges.
  • Add a Google Map for setting the car's destination.
  • Send car location to app and check points received to Geo module.
  • Verify the stringent requirement of Start-up Sync, Periodic heart-beat messages.
  • 4/23/2020 -> Update the wiki schedule and the git repo.
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
8 24 April 2020 30 April 2020
  • Testing & Validation of the LCD UI and display run time vehicle status and looking forward for feedback from team if any.
  • Improve & Validate Navigation logic with multiple checkpoints, bearing angle and destination information.
  • Identify and mitigate GPS locking, Location Accuracy and Number of Satellite-In-View coming.
  • Validate Accuracy of Compass Calibration with iPhone Compass.
  • Determine and add DBC Changes and finalized.
  • Implement the steering logic with bearing angle and status provided by GEO-Module.
  • Consistently Communicate current car location to App, get check points from App and relay them to Geo module.
  • Send additional vehicle status information from can bus to the App for display.
  • Send the request to Google for getting the checkpoints(use the Google Maps Directions API).
  • Field test and check for obvious issues in obstacle avoidance, navigation, maintaining speed (up/down hill).
  • Provide feed backs to each team on identified short comings.
  • Update Wiki with new details and information.
  • DEMO: GPS driving
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
9 1 May 2020 7 May 2020
  • FIELD TESTING - CRITICAL WEEK
  • Implement turning indicators, break lights and head light.
  • Check for Corner cases for steering logic under various conditions and locations.
  • Analyse field test results for GPS and CMPS and work on it if required.
  • Test the accuracy of check-points from the Blue-tooth controller, location data from the Geo-controller sensor and Navigation Algorithm.
  • Check overall robustness of the complete system.
  • Establish complete connection on PCB
  • Update wiki with details.
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
10 8 May 2020 21 May 2020
  • All hands on testing and final bug fixes.
  • Check for tuning or calibration of modules if required.
  • Complete end-to-end testing for various scenarios and conditions.
  • Create the semester long project activity video and upload to YouTube.
  • Update and finalize wiki.
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
  • Not Started Yet
11 22 May 2020
  • DEMO: Final Project
  • SUBMISSION: Final Project Wiki
  • Not Started Yet
  • Not Started Yet

Parts List & Cost

Item# Part Desciption Vendor Qty Cost
1 RC Car Traxxas - Amazon [1] 1 $168.84
2 CAN Transceivers MCP2551-I/P Robotshop [2] 6 $ 6.00 per unit including shipping fee
3 GPS Amazon [] 1 $ .00 per unit including shipping fee
4 Compass Amazon [] 1 $ .00 per unit including shipping fee
5 Ultrasonic sensors(LV-MaxSonar-EZ0) SparkFun [3] 1 $ 29.95
6 Ultrasonic sensors (LV-MaxSonar-EZ1) SparkFun [4] 2 $ 51.90
7 IR sensors (GP2Y0A21YK) SparkFun [5] 1 $ 34.23 including shipping fee and tax


Printed Circuit Board

Design and Architecture

The PCB made for the Project Nimble RC car was initially designed in EAGLE, however, due to the board size limitations, the PCB had to be designed using DipTrace instead. This design was the first and only iteration in designing the layout of the PCB. The design of the PCB was designed around the four SJTWO LPC4078 micro-controllers required for us to use for the project, the DRIVER, MOTOR, GEOGRAPHICAL, and BRIDGE/SENSOR nodes. The PCB layout consists of four through-hole "slots" where the controllers will be connected (with respect to the controllers' orientation and ports/pins) to the PCB. The power section includes a USB socket as well as a through-hole mount for a LM7805 regulator. Through-hole header pins are also included for the components needed for their respective controllers such as the sensors, LCD, GPS, Compass, etc.. LED circuits were added to provide visual information for the user to indicate the motor and servo motion states, as well as to indicate if a sensor has detected an object. Lastly, the design for the CAN bus includes the connections needed for power, RX/TX, and the CAN low and CAN high bus. The dimensions of the PCB are approximately 4 by 9 inches.

Fabrication

Fabrication of the PCB design was done by JLCPCB located in Hong Kong. The PCB was designed using 2-layers and lead-free coating. The fabrication was done relatively quickly, however, due to the COVID-19 outbreak, delivery of the PCB was delayed.

Challenges

Some challenges encountered when designing the PCB was the delay in pinout information needed to begin designing the PCB. It is advised to order parts early and determine what ports/pins are needed as soon as possible to begin designing and ordering the PCB. Another challenge was some issues with the files needed to be manufactured. Since the design had to be designed using DipTrace instead of EAGLE, exporting the necessary files needed to order for fabrication is slightly different than EAGLE.

Project Nimble PCB RevA.jpg



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>

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_: DBG DRIVER IO MOTOR SENSOR BRIDGE GPS COMPASS CMP

BO_ 150 MOTOR_CMD: 3 DRIVER

SG_ MOTOR_CMD_STEERING : 0|8@1+ (1,-2) [-2|2] "" MOTOR 
SG_ MOTOR_CMD_SPEED : 8|8@1+ (1,-25) [-25|25] "" MOTOR

BO_ 151 MOTOR_DATA: 4 MOTOR

SG_ MOTOR_DATA_RPM: 0|32@1+ (1,0) [0|0] "" DRIVER

BO_ 200 SENSOR_DATA: 8 BRIDGE

SG_ SENSOR_SONARS_left : 0|16@1+ (1,0) [0|0] "cms" DRIVER
SG_ SENSOR_SONARS_mid : 16|16@1+ (1,0) [0|0] "cms" DRIVER
SG_ SENSOR_SONARS_right : 32|16@1+ (1,0) [0|0] "cms" DRIVER
SG_ SENSOR_IR_rear : 48|16@1+ (1,0) [0|0] "cms" DRIVER

BO_ 300 GPS_DESTINATION_INFO: 8 BRIDGE SG_ GPS_DESTINATION_LAT : 0|32@1+ (0.000001,-90.000000) [-90|90] "degrees" DRIVER,GPS,MOTOR SG_ GPS_DESTINATION_LONG : 32|32@1+ (0.000001,-180.000000) [-180|180] "degrees" DRIVER,GPS,MOTOR

BO_ 301 GPS_CURRENT_INFO: 8 GPS SG_ GPS_CURRENT_LAT : 0|32@1+ (0.000001,-90.000000) [-90|90] "degrees" DRIVER,BRIDGE,MOTOR SG_ GPS_CURRENT_LONG : 32|32@1+ (0.000001,-180.000000) [-180|180] "degrees" DRIVER,BRIDGE,MOTOR

BO_ 302 COMPASS: 6 GPS

SG_ CMP_DEST_BEARING : 0|16@1+ (0.1,0) [0|359.9] "degrees" DRIVER,BRIDGE,MOTOR
SG_ CMP_CURRENT_HEADING : 16|16@1+ (0.1,0) [0|359.9] "degrees" DRIVER,BRIDGE,MOTOR
SG_ CMP_DISTANCE : 32|16@1+ (0.01,0) [0|0] "meters" DRIVER,BRIDGE 
  

BO_ 105 SENSOR_DEBUG: 1 BRIDGE

SG_ IO_DEBUG_CAN_init : 0|1@1+ (1,0) [0|0] "" DBG
SG_ IO_DEBUG_sensor_init : 1|1@1+ (1,0) [0|0] "" DBG
SG_ IO_DEBUG_sensor_data : 2|1@1+ (1,0) [0|0] "" DBG
SG_ IO_DEBUG_bus_off : 3|1@1+ (1,0) [0|0] "" DBG

BO_ 106 MOTOR_DEBUG: 6 MOTOR

SG_ IO_DEBUG_CAN_init : 0|1@1+ (1,0) [0|0] "" DBG,DRIVER
SG_ IO_DEBUG_bus_off : 1|1@1+ (1,0) [0|0] "" DBG,DRIVER
SG_ IO_DEBUG_Steering : 2|8@1+ (1,-2) [-2|2] "" DBG,DRIVER
SG_ IO_DEBUG_RPM : 10|32@1+ (1,0) [0|0] "" DBG,DRIVER

BO_ 107 DRIVER_DEBUG: 1 DRIVER

SG_ IO_DEBUG_CAN_init : 0|1@1+ (1,0) [0|0] "" DBG
SG_ IO_DEBUG_bus_off : 1|1@1+ (1,0) [0|0] "" DBG
SG_ IO_DEBUG_DRIVER : 3|1@1+ (1,0) [0|0] "" DBG

BO_ 108 GPS_DEBUG: 1 GPS

SG_ IO_DEBUG_CAN_init : 0|1@1+ (1,0) [0|0] "" DBG
SG_ IO_DEBUG_bus_off : 2|1@1+ (1,0) [0|0] "" DBG
SG_ IO_DEBUG_GPS : 3|1@1+ (1,0) [0|0] "" DBG
SG_ IO_DEBUG_Compass : 5|1@1+ (1,0) [0|0] "" DBG

BO_ 109 BRIDGE_DEBUG: 1 BRIDGE

SG_ IO_DEBUG_CAN_init : 0|1@1+ (1,0) [0|0] "" DBG
SG_ IO_DEBUG_bus_off : 2|1@1+ (1,0) [0|0] "" DBG
SG_ IO_DEBUG_Bridge : 4|1@1+ (1,0) [0|0] "" DBG 

CM_ BU_ DRIVER "The driver controller driving the car"; CM_ BU_ MOTOR "The motor controller of the car"; CM_ BU_ BRIDGE "The bridge controller of the car"; CM_ BU_ GPS "The GPS controller of the car"; 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_ "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" ;

Sensor ECU

<Picture and link to Gitlab>

The sensor and bridge controller consists of sensor module that is responsible for object detection. Nimble uses ultrasonic sensors to achieve this task. As the name suggests, an ultrasonic sensor emits ultrasonic signal or beam from its head, and on encountering an object, returns back. This technique is better known as echolocation as we used sound signals to do so. The distance of the object is calculated based on the output and this ensures object detection. The distance measured is continuously passed on to driver node through can transceiver. The driver controller further processes the distance values of all the sensors on nimble and acts in accordance with the values to achieve obstacle avoidance.

Hardware Design

We have embedded 4 sensors on Nimble. We have arranged 3 LV-MaxSonar-EZ series Maxbotix ultrasonic sensors in the front section of the car; one at right, one at left and one in the center. The fourth Ultrasonic sensor is placed at the rear end of the car. These sensors provide very short to long-range detection. It provides sonar range information from 6-inches out to 254-inches with 1-inch resolution.

   Nimble- sensor and board connection diagram rev.jpg            Pin description of ultra.jpg


A maxbotix sensor gives out 3 types of output- analog, RS232, and Pulse width. We have used analog output and hence, utilized on-board analog to digital converters- ADC2 (P0.25), ADC3 (P0.26), ADC4 (P1.30), and ADC5 (P1.31). To trigger all the four ultrasonic sensors, we used P0.6, P0.7, P0.8 and P0.9 of SJTWO board. The analog output is converted to digital and transmitted to the driver controller. The converted adc distance data is passed to driver by Can transceiver. P0.0 is used as CAN RX and P0.1 as CAN TX on the Sensor module.

Hardware Interface

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

Sensors pin layout
Sr. No. SJTwo board Pin Maxbotix sensor Pin Function
1 ADC2-P0.25 AN(Left) ADC input from left sensor
2 ADC3-P0.26 AN(Rear) ADC input from rear sensor
3 ADC4-P1.30 AN(Right) ADC input from right sensor
4 ADC5-P1.31 AN(Middle) ADC input from middle sensor
5 P0.6 RX(Right) Trigger for right sensor
6 P0.7 RX(Left) Trigger for left sensor
7 P0.8 RX(Middle) Trigger for middle sensor
8 P0.9 RX(Rear) Trigger for rear sensor

Software Design

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

                   Flowchart.jpg

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

The geographical controller is responsible for interfacing with a GPS and Compass module in order to receive the current heading(in degrees) and the current destination in the form of GPS coordinates (in degrees, hours, minutes, seconds). It is also responsible for receiving the needed destination coordinates sent by the BRIDGE controller which are needed along with the current GPS location coordinates to calculate the destination heading angle and distance to destination and checkpoints. The current compass heading angle is also sent to the DRIVER controller such that it can be integrated into the driver logic to determine the heading angle to steer and drive towards the destination.

<Picture and link to Gitlab>

Hardware Design

Project Nimble geo controller hw design.jpg

Software Design

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

Technical Challenges

  • Issue 1: Probably one of the most difficult challenges to deal with in this project was the inaccuracy of the GPS module. The default readings of this GPS module would be read were not even remotely close to its actual location.
    • Solution: Although we did not fully fix this issue, the method that we dealt with the terrible accuracy was to implement manual calibration with respect to the actual location of the module using google maps, and either adding or subtracting an offset to the GPS coordinates received from the GPS module.
  • Issue 2: Calibration of the compass was another issue. Each time the compass module would boot up, the readings of the heading angle would be off by a considerable amount.
    • Solution: The solution to solve this was to send calibration commands to the compass module. Helpful commands to send to the compass was erasing the calibration profile and setting default calibration settings.




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?> Nimble was a great opportunity to learn test-driven design strategies, which helped lower the amount of time troubleshooting issues. It also taught us much about using Git for version control. The project also gave us experience working with embedded systems technologies such as CAN bus communications, DBC files, GPIO, and signal debugging with BusMaster.

Project Video

Project Source Code

Gitlab Project Link - [6]

Advise for Future Students

<Bullet points and discussion>

Acknowledgement

References