Git Product home page Git Product logo

robobuggy's Introduction

RoboBuggy

A project of the Robotics Club at Carnegie Mellon University.

Codacy Badge

Buggy (also called Sweepstakes) is a race held annually since 1920 at Carnegie Mellon. Teams of 5 athletes (the pushers) push an un-motorized vehicle (a buggy) containing a driver around a 0.84 mile course in a relay format where the vehicle serves as the baton. Roughly half of the course is uphill, during which the pushers run and shove the buggy uphill. During the other - downhill - half, drivers are on their own to navigate tight turns at speeds of up to 35mph.

Borrowed from the CMU Buggy Alumni Association. Visit them to find out more.

In the robotics club we seek to help out robot overlords automate everyone and everything, so we're trying hard to replace a traditional buggy driver with our AI. Alice (the AI) successfully rolled on Raceday for the first time during Carnival 2017!

Team picture from Raceday 2015 Team picture from Raceday 2015.

Trevor pushing RoboBuggy at Fall rolls Trevor pushing Singularity on Hill 4 during early morning rolls.

The Buggies

Singularity Toothless Transistor
Singularity the Buggy with Alice the AI Transistor the Buggy
Inherited from a past incarnation of this project, Singularity has been rolling since 1999. She features a bolted aluminum frame that was originally built around a desktop computer. These days, she features a stylish mount for a Surface on top with the control electronics inside. Transistor was built for the 2015 season using modern carbon fiber shell technology. She was built to be accessible and maintainable as a platform for the future of Robobuggy. Debate within the team on what style she would wear was so fierce we chose to paint her chalkboard black, complete with a new chalking each race.

Looking for more technical docs? Check out the wiki!

System Overview

+-----------------+
|   Follow Car    |
|        +        |
|  Safety Driver  |
+-----------------+
         ||
         ||
         \/
+------------------+   +-------------------------+
|  Radio Receiver  |   |       Alice (AI)        |
+------------------+   +-------------------------+
         ||                        /\
         ||                        ||
         \/                        \/
+------------------------------------------------+
|           IO and Safety Controller             |
|                  (Arduino++)                   |
+------------------------------------------------+
                        /\
                        ||
                        \/
+------------------------------------------------+
|               Electromechanical                |
|       (Servo, Solenoids, Pots, Encoders)       |
+------------------------------------------------+
                        /\
                        ||
                        ||
         ____           ||
           \            \/
            \   _____________________
            _\./    \______/      \__\
           < ___o_________________o___\ 
--------------------------------------------------

System block diagram.

Our system architecture keeps a human in the loop all the time, even just to hit the emergency stop button. The human driver can either be sending drive commands (for AI training) or monitoring the AI. The command signals from the AI and human are mixed together (depending on operating mode) in the IO controller. Here we also do last level safety checks like stop on disconnection. The IO controller interfaces directly with the electromechanical systems to make braking, steering, and sensing happen. Find more information in the source directories below.

File Structure

The software system is separated into two main directories (sections):

  • Software -> code executed in real-time on the buggy at a high level, as well as offline and other tools
  • Electrical -> code executing on the low-level systems of the buggy, as well as electrical specifications and eCAD

This folder also contains:

  • Pictures for this readme file
  • configuration files

Contributing

We have a contributions guide to get you started.

Sponsors

Special thanks to NVidia for providing Jetsons for us to host Alice on!

Think this project is cool? Please support the Robotics Club at CMU!

robobuggy's People

Contributors

abhaagrawal avatar abhinavgirish avatar apquinn303 avatar arathorn593 avatar ayeohmy avatar babraham123 avatar blandis avatar cheog avatar cn-2000 avatar dapatil211 avatar dtom2941 avatar flailey avatar grypob avatar haoranfei avatar ihartwig avatar jeremyahuang avatar jpdoyle avatar jwang1139 avatar kdhabalia avatar msebek avatar neimandavid avatar ramensandwich avatar seanpatches avatar trevordecker avatar vasuagrawal avatar vivaanbahl avatar vivek4830 avatar vr96 avatar zoner16 avatar zsd-planekid 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

Watchers

 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  avatar  avatar  avatar

robobuggy's Issues

Decide on map data structure

How will we store and retrieve data from the map

The map should be readable from matlab, java, and possibly python
The map should be writable form matlab, java, and possibly python

Parse the receive byte

After the packet is received, parse the packet into message and id.

Create the local function in lib_protocol.c
Prototype is already done in lib_protocol.h

Implement GPS Data logging

Implement GPS Data logging from serial to text file

Should at least include lat,lon,altitude and time of reading

Set up Nano Encoder

Connecting the encoders to arduino nano

Ticks passed since reset
Speed (over a specific time -compiled in)
Ticks?...

Create a GUI for Buggy

We need a gui to control the buggy it should be written in java and have the following functionality

Toggle data logging {ON,RESET,OFF}
Button localization {RESET}
Toggle use GPS data {ON, RESET,OFF}
Toggle use Odometry {ON, RESET, OFF}
Toggle use vision {ON, RESET, OFF}
Toggle use IMU {ON, RESET, OFF}
Toggle Time {RESET}

Toggle Driver Profile {Alice}

NOTE: Alice will be the name of are first driver profile she will be a simple way point following driver that is not very aggressive.

ShowMap of coarse with:
our believed location super imposed,
our past path super imposed (button to turn on and off)
our planned path super imposed (button to turn on and off)
GPS reading marks (button to turn on and off)
Encoder reading marks (button to turn on and off)
IMU reading marks (button to turn on and off)
feature detection's (button to turn on and off)

Video Feed (raw)
Video Feed with detection's
easy way to toggle visual detectors on,off,reset

(NOTE: This would make for a very good 112 project)

Make human drivers obsolete in Buggy

The weakest point of failure in Buggy today are humans. By removing them, we optimize the sport for human safety, speed, and profit.

Everything we do in pursuit of closing this issue.

Create Makefile to link the libraries in Arduino

Create a makefile to link the libraries in the parent directory to the 2 arduino sketches. Arduino doesn't allow you to create a relative link to your libraries in your parent folder. Create a makefile that allows you to connect the libraries in a parent folder so that the shared libraries may be updated together in one go.

create arbitrary data logger

Create a system that when given an arbitrary java class converts the data in the class to an entry in the systems database for latter lookup

Create easy to use GPS logging tool chain

Set up a tool that allows for quick gps map generation.

When the reading is taken the user should select the gps coordinates of the receiver for ground truth, A picture should be taken for later verification.

currently we built a surveying station that records the gps signal and takes a picture.

It would also be nice if the camera were to display a live stream until the picture is taken.

Tool for viewing when events occurred

Build a tool which can display where the buggy was when events occurred based on data log. Also allow for us to see the vents that happened in a specific time frame. Should also be able to read map files for seeing were all deteictions should be happending. This tool will be crucial for debugging the system and verifying that we have enough events to completely cover the course. depends on #44 #20

Create a playback program that can output data regarding the arduino

Good Debugging Tool.
Create a playback program that will allow us to see (preferably graphically) what is/was happening on the arduino. Could be as simple as storing the messages into a text file and seeing what happened around the time of the screw up and seeing what messages were being sent then.

Create Path Planner v 1

Write v1 of the path planner, should take in a series of way points and the current location of the buggy. Depending on what the next reachable point is the desired front angle of the buggy should be set.

Multiple Packets

Find and decide a method of handling multiple packets.
Determine if loop send/receive check.
Code it up

Implement IMU Data logging

Implement IMU Data logging from serial to text file

Should at least include yaw value and time of reading

consider adding, roll,pitch,linear X, linear Y, linear Z, magnetic north

Mount PS3 eye on old robobuggy

Should be forward facing and (mounted low to avoid shacking?)

I would like it to be forward facing to maximize ability to detect useful features. I think it would do well where the GPS receiver was mounted. exact Height off the ground is not important, it would also be cool if we mount it to the front of the buggy in front of the wheel.

If we can add some damping that would be nice, but not required.

Needs to be steady state rigidly mounted, if bumped it should return to the same location after minimal osculations.

Create a small program that sends data to the arduino from the surface

I need a small program to test the receive module on the protocol on the low-level end. The program needs to send a packet to the arduino, which is outlined in the wiki under Embedded and packet structure.

Can you please make this working soon so I can confirm functionality and close an issue and move on to the next. Thanks.

If it is still unclear what to send to the arduino, just send 0xFC01DEAD. If you can send this packet over and over. Or just one time. Or something, that would be awesome.

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.