Giter Club home page Giter Club logo

sjsu-ad / fusionad Goto Github PK

View Code? Open in Web Editor NEW
38.0 9.0 24.0 110.22 MB

An open source autonomous driving stack by San Jose State University Autonomous Driving Team

License: MIT License

CMake 3.64% C++ 84.55% C 1.31% Python 8.88% Shell 0.19% MATLAB 0.61% Processing 0.43% HTML 0.01% Makefile 0.23% Objective-C 0.15%
autonomous-vehicles robotics ros ros-kinetic autonomous-car autonomous-driving autonomous-systems san-jose san-jose-state-university sjsu

fusionad's Introduction

SJSUxSJSU_AD

Welcome to FusionAD

FusionAD is an autonomous driving software stack developed by the SJSU Autonomous Driving Team at San Jose State University (SJSU), San Jose, CA.

Our challenge is to create a fully functional autonomous driving vehicle within the 1 Year timeline of a Mechanical Engineering Senior Project at SJSU.

See KPIX Bay Area's coverage on SJSU autonomous driving on Youtube

FusionAD's Software Architecture

FusionAD Architecture

This repository mainly capture the software application layer within FusionAD's architecture.

Application Modules

Currently, all the modules are under work in progress and they are located under FusionAD/src/modules
Current capabilities of the software modules:

  • Perception
    • Integration done with Yolo V3 image detector
  • Localization
    • EKF through robot_localization package
    • Dead reckoning vehicle kinematic model
    • Initial Calibration routine
    • Transforms between sensors and tracking frames
  • Planning
    • "Virtual rail" planner - Basic route planner
  • Control
    • High-level motion controller
    • Low-level actuator controller
    • Tele-op interface
    • CAN Bus interface
  • Simulation
    • OSV Sim
      • A full fledge vehicle simulator on the Gazebo Simulation Platform
    • Control SIL
      • A Real-time, Software In the Loop testing environment for high-level controller vaidation.

Operating Systems and Requirements

  • FusionAD is developed on ROS KINETICS and UBUNTU 16.04 LTS. We do not support other version of ROS or Ubuntu at the moment.

Hardware

Sensor Stack

One of the goals at SJSU Autonomous Driving is to make autonomy development more accessible and cheaper.
Therefore, our sensor stack consisted of mainly low-cost and easily attainable sensors.

Computation

Current computation architecture mimics a distributed system for distributing tasks and loads between the two resource-heavy modules, perception and map-based localization.

  • Main Computer
    • Spec: i7-7700HQ + GTX 1050 + 16 Gb Ram
    • Handles most localization + planning + control computations
  • 2x Nvidia Jetson TX2
    • Dedicated to perform image detection computations

How to build FusionAD:

  1. Run: sudo ext_package_build.sh at the root directory to ensure all the prerequisites of the external ROS packages used in this stack are met and installed
  2. Run: catkin_make at the root directory

Development

Branches

  • master
    • Most stable branch
    • FusionAD do not recommend performing development from this branch
  • develop
    • Contains tested features
    • FusionAD recommends performing development on this branch
  • test_deployment
    • Contains features that are pending to be tested on the vehicle
    • FusionAD do not recommend performing development from this branch
  • slave_tx2
    • Contains software for the Jetson TX2 modules
    • Not Open for main FusionAD development except for software related to the TX2 board
  • release_branches
    • Sealed branch for storing past releases
    • Not Open for development

Maintainers

The Core FusionAD team

SeniorProjectTeam

FusionAD also appreciate the help of other passionate SJSU students!
We would like to acknowledge the following FusionADers:

  • John Phung
    • FusionAD Program and Community Manager
  • Nelson Wong
    • SJSU Autonomous Driving Perception and Localization Engineer
  • Francisco Ibrarra
    • SJSU Autonomous Driving Perception Engineer

fusionad's People

Contributors

drofp avatar francisco-ibarra07 avatar joeyzhu00 avatar menson168 avatar mitchellsayer avatar nathansrinivasan5 avatar ntwong0 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fusionad's Issues

Fix path interpolation

Last few points of linearly interpolated path are the same with fixed point density. Change point density to adaptive (based on distance between points), and validate points do not overlap

TF Package Creation

A TF master package/node should be created to store all the TF from sensors to chassis base_frame. Or other various transforms.

Perception Cleanup

  • Change names of nodes to standardized naming convention
  • Add pycache files etc to .gitignore
  • Update setup shell script
  • Add functional launch file
  • CMakeLists and manifest
  • Remove unused code
  • Start README

Magnetometer Axis Alignment

Aligning the magnetometer orientation with the converted GPS X-Y Position Coordinates.
Finding the angular rotation required to match magnetometer coordinate system with global coordinate system
Running the car straight in any direction and gathering both magnetometer and GPS data
Figure out the difference in angle between the two and subtract

Create Person/Body Detector

Create person detector with rough distance calculation.

Subscribes to:

  • raw image input

Publishes:

  • x location of the center of each bounding box relative to center of screen
  • distance (in meters) to each person

Cleanup Repo Overall

  • Fix README
  • Fix or replace startup shell script
  • Update CMakeLists and Package.xml documentation
  • Update .gitignore
  • Remove unnecessary hidden files

IMU Transform definition and implementation in control stack

A transformation of 105 degree was made to account for magnetic declination. However, collected data was shown that the IMU package might have already accounted for the 15 degrees of declination.
yaw_gain1
yaw_gain3
yaw_gain5
yaw_gain7

The noisy data is the estimation of the heading value using backward differencing of the position data and took the arctangent of the dx and dy. The data has shown identical values to the 90 degree transform which is shown in yellow, not the real time IMU heading (105 degree transform) in light blue.

Fuse People Detection with Lidar

Figure out horizontal direction camera detection relationship to Lidar angles

Utilize camera people detection and reinforcement layer for Lidar object detection

Planning Stack Creation

  1. Set up sensors, vehicle, and world TF.
  2. Set up odom information
  3. Figure out a mapping solution

Timer function and slope matching bug

Timer function was acting up and wouldn't fire the callback at all. Probably due to the class structure it is in.
Performed a hotfix offline by moving the control command computation and publishing into path callback function.

Slope matching function was returning NaN due to projected slope does not match interpolated slope. The hotfix was bypassing the matching check, which might be a calculation flaw in the code or the logic.

High to Low level control sign convention

Ensure sign convention checks out.

High-level control command output will follow the convention below:

  • Vehicle Turning left (steering wheel Counter-Clockwise) is a POSITIVE quantity.

Finish Segmentation Cleanup

  • Finish exporting clusters as pcl::PointCloud2 and std::vector<pcl::PointIndices>
  • Attempt to figure out strange gpf failing (suspension?)
  • Implement move semantics to decrease Vec3 copying

Add Geodesy README

Provide enough information for all team members to easily utilize package

  • different parsing modes for manual input path
  • Operating modes for conversions

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.