GithubHelp home page GithubHelp logo

keplergt / capstone Goto Github PK

View Code? Open in Web Editor NEW

This project forked from rcstocking/capstone

0.0 1.0 0.0 272.12 MB

Team Mahogany - Radiation Detection Using Drones

Python 1.14% C++ 0.09% Dockerfile 0.01% HTML 0.77% JavaScript 10.86% CSS 1.50% Shell 0.19% Ruby 0.02% Batchfile 0.01% Roff 0.03% Perl 1.43% Java 83.08% Groovy 0.58% Makefile 0.01% XSLT 0.10% NSIS 0.20%

capstone's Introduction

Team Mahogany - Tufts University

Who

We help first-responders best evaluate terrain risks in post-disaster scenarios by iterating on current drone software/hardware and adding support for harmful radiation detection. Similar tech exists in a military setting, but we are developing an open-source software/hardware prototype for use by public organizations such as Help.NGO - Global DIRT.

What

Our project is a prototype for a black-box attachment for a drone/other unmanned vehicle that reports standard image, thermal, and radiation data over radio to a radio receiver and displays the reported infomation in an intuitive user interface, in real time -- no internet required.

Getting Started

/docs contains documentation for the capstone project.

/src contains the git repos both researched and used for the project.

Download sample .osm maps here. Download the bz2-compressed (.osm.bz2) version. If you'll have an internet connection running the GUI, this step is unnecessary.

The Hardware and Firmware

A GoPro HERO3+ Black Edition is used to record images and save them to a micro SD card.

Code running on an Arduino Pro uses a master/slave configuration to toggle reading images from the microSD card and writing to the transmitter's buffer for transmission over RF69 using RadioHead's Arduino library.

The Adafruit_GPS GPS chip is also read by the Arduino Pro and sent to the transmitter. This chip is fairly cheap and only works reliably outdoors.

A similar circuit controls the Geiger-Müller counter, reporting data to the Arduino Pro in CPS (counts per second).

The thermal camera and circuit never reached a final prototype due to time constraints.

Due to limitations in the transmitter buffer size (60 bytes) we can only transmit small images in "real-time". A better transmitter would fix this problem.

A second Arduino Pro is connected to the RF69 receiver and a serial USB connector, designed to plug into a computer running our GUI.

/src/Project contains some test code for basic radio transmission and the Team Mahogany code to flash both Arduino Pros.

  • Team Mahogany Code
    • Transmitter code --> Gets flashed to the Arduino Pro attached to RF69 transmitter, GoPro, GPS, and Geiger-Müller circuits.
    • Receiver code --> Gets flashed to the second Arduino Pro, attached to the RF69 receiver and a serialport.
    • This python script saves received transmissions to JPGs. This functionality is duplicated; The GUI has its own code to monitor the serial port and save images to disk.
    • The rest of the code is test code for the Arduino Pros.

The GUI/Data Fusion Software

The GUI is built off of josm, the java branch of the OpenStreetMap project. The source code for our version of josm can be found at /src/josm.

The OpenStreetMap project is dubbed "the free wiki world map". A collaborative project where anyone can contribute updates to free, editable world maps via image uploads/location tagging within tools such as iD and josm, it supports offline map overlays via its specialized ".osm" file format. Thus, josm became the perfect foundation for the GUI.

The GUI is responsible for reading image data, GPS data, and radiation data from the serialport and overlaying it an understandable format in real-time. By patching the incoming data into the JPG EXIF metadata before saving to disk, we have standardized our image data with JPG standards.

The data remains on disk for future use after program termination. The radiation and image overlays are separated into separate UI layers, using a heatmap to intuitively display radiation data. Simple clickable tags that can be cycled through and centered display the images themselves.

WebODM or a similar tool would have been ideal to take overlapping images and stitch them together. The GUI tool is designed with future improvements to data fusion in mind.

  • Other tools researched but eventually unused/modifications abandoned
    • Ardupilot - Open-source firmware to control many commercial drones.
    • MissionPlanner - Open-source mission planning tool that works with any drone running ardupilot firmware. The original plan was to integrate our information into MissionPlanner itself. We pivoted (early last semester) toward a black-box standalone solution as superior to decouple ourselves from specific drones, or drones at all.
    • WebODM - A web-based tool for post-flight processing of drone imagery, built on top of OpenDroneMap. The secondary plan was to leverage the image-stitching and clean UI base of WebODM for our uses, packagaing the web tool into a desktop application into a native desktop app using Electron. This complex project suffered recent undocumented changes becoming more trouble than it was worth --> abandoned code pivoted to more standard desktop development using josm early this semester.
    • iD - A web-based branch of the OpenStreetMap project briefly considered between WebODM and josm.

Build and Run

Build the Team Mahogany Arduino firmware

Download the newest version of the Arduino IDE.

Verify and flash the transmitter code at src/Project/tx to the transmitter Arduino Pro.

Verify and flash the receiver code at src/Project/rx to the receiver Arduino Pro.

The Team Mahogany code uses Radiohead's and Adafruit_GPS's libraries. To compile our code you must clone the RadioHead repo and the Adafruit_GPS repo to your Documents/Arduino/libraries (Linux/OS X) or My Documents/Arduino/libraries (Windows) folder.

Run the Team Mahogany Arduino firmware

Once you have verified and compiled the code in the Arduino IDE, it automatically flashes to the chip and runs. The lights on the Arduino Mega's should light up and flash to signal that the code is running.

Build the Team Mahogany GUI

$ cd src/josm
$ ant dist

The executable jar is saved at src/josm/dist/josm-custom.jar.

Clean the josm project

$ cd src/josm
$ ant clean

Set up an IntelliJ environment to change the code.

Run the Team Mahogany GUI

Run the generated src\josm\dist\josm-custom.jar. Click File -> Open to open downloaded .osm maps, if neeeded, for offline function (slow).

Click Tools -> Run Disaster Response Simulation to open run the simulated version of the GUI. Simulated data comes from your provided directory (choose simulated_serialport_data in repo root).

Click Tools -> Run Disaster Response Software to run the full version.

Built With

  • RadioHead - Open-source RF69 radio arduino firmware
  • Adafruit_GPS - Open-source GPS chip firmware
  • JOSM - Open-source java offshoot of OpenStreetMap project

Future Work

In the future we would like to implement image stitching into the GUI, akin to node-OpenDroneMap's functionality. Additionally, a topographic-style map layer for radiation data would be interesting, if we had enough data.

Further, we would use a better transmitter for improved range and transmission speed. We would complete the thermal camera circuitry and work on sizing down the prototyped hardware into a smaller form-factor.

Authors

This project would have been impossible without the tireless work of developers of the numerous open-sourced projects we leveraged (and chose not to).

Team Mahogany:

  • Kevin Dorosh - CS: Spearheaded git repo & GUI
  • Richard Preston - Comp E: Focused on firmware and the circuits
  • Ryan Stocking - EE: Killed it on the hardware design and implementation
  • Elyse Cooper - EE: Nailed the hardware implementation and team coordination

License

Adafruit_GPS is licensed under BSD license. RadioHead is licensed under GPL v2. JOSM is licensed under the GPL v2 and GPL v3.

Thus, this project is similarly licensed under the GPL v3 and BSD licenses.

Acknowledgments

  • Hat tip again to open-sourced developers everywhere.
  • Thanks to the Tufts EE and CS departments for their support, hardware ($$$!), and communication on this project.
  • Thanks to Victor (Tufts graduate student) for taking the time to catch us up on the project and flying the drone.
  • Special thanks to our sponsor, Dr. Karen Panetta, for her support of us and the project.
  • Special thanks to our professors, Prof. Lasser and Prof. Guyer, for their continued feedback on the project.

capstone's People

Contributors

kdorosh avatar richard-preston avatar

Watchers

James Cloos avatar

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.