Giter Club home page Giter Club logo

signpost's Introduction

Signpost

Build Status

Signpost

The Signpost project is a modular city-scale sensing platform that is designed to be installed on existing signposts. It is powered through solar energy harvesting, and provides six slots for generic sensing tasks. Modules have access to a set of shared platform resources including power, communication, gps-based location and time, storage, and higher-performance computation, and they use a Signpost-specific software API that enables not only use of these resources, but also supports the development of inter-module applications.

The project is driven by several core applications, but also strives to be an upgradeable and adaptable platform that supports new applications for scientists and cities. Modules can be added and removed from the platform after deployment without disassembling the installed Signpost, reprogramming the Signpost, or interrupting the other functions of the Signpost. Additionally, by providing APIs to modules that support common operations, developing and deploying a sensing application in a city is significantly streamlined. A focus of this project is ensuring that domain scientists and researchers interested in city-scale applications can effectively leverage this platform to accelerate their projects.


Hardware Architecture

Each Signpost platform includes a power supply that also meters energy usage, a controller that provides storage and computation and manages the operation of the Signpost, and several module slots that support extensible sensor modules for city-scale sensing applications. All modules are connected via an I2C bus, and core system features (e.g. per-module energy metering) are on a SMBus network. For higher bandwidth communication on the Signpost, each module is also attached to a USB 2.0 host.

Each module can be individually disconnected from the USB host and/or the I2C bus, as well as entirely powered off.

Software Architecture

Signpost sensor modules access platform resources through the Signpost API, which is a library that sits between the user's applications and the Signpost I2C bus. The API is easily ported, only requiring I2C master/slave, GPIO, and timers. It currently is ported Tock and ARM MBed-OS, with a port coming soon for Arduino. Please see the Signpost API documentation.

Current Project Status

Signposts are currently being deployed on campus at UC Berkeley. We have 5 Signposts deployed and more than 20 built and awaiting deployment approval. On these signposts we have modules sensing audio amplitude on seven spectrum bands, ambient environmental markers including temperature, pressure, and humidity, RF Spectrum monitoring from 15-2700 MHz, and a microwave-radar based motion sensor. We are working to build applications such as distributed traffic monitoring on the deployed platforms.

Signpost development kits have been designed to facilitate sensor module and software development without requiring a full signpost platform. The development kits have the ability to fully emulate a signpost including energy metering and a Signpost radio module.

We are working to release version 1.0 of the Signpost Software API.

Getting Involved

There are several ways to get involved with the Signpost Project! These include building and deploying full signpost platforms, deploying new sensor modules on our existing platforms, or deploying new applications on existing sensor modules. If you would like to deploy city-scale sensing applications using Signpost, please email [email protected].

Below are getting started guides for the Signpost platform.

Roadmap

Developing the Signpost platform is an ongoing effort with several primary goals:

  • Designing a programming model for running applications across a network of Signposts. This should truly simplify creating interesting and useful applications, and not discourage development by imposing unnecessary hurdles.
  • Creating a HW/SW test framework for accelerating module development.
  • Deploying several driving applications on the existing signpost deployment.
  • Collaborating with other researchers to serve as a foundation for city-scale sensing and wireless research.

History

  • April 2018: We are presenting the signpost paper and an associated demo at IPSN 2018 in Porto, Portugal.
  • February 2018: The signpost paper is released on the arXiv.
  • January 2018: Signpost accepted to IPSN 2018!
  • November 2017: Signpost demo at Sensys 2017!
  • Fall 2017: 20 Signposts were built and deployed for the TerraSwarm Annual Review! 5 of these are still deployed on UC Berkeley's campus, and we are awaiting approval to deploy the remaining 15 signposts. We successfully collaborated with researchers from UIUC and UC San Diego to demonstrate audio event detection on Signposts and high-fidelity data backhaul to a drone deployed upon event detection. Check out the video.
  • August 2017: Signpost presentation at the Intel Secure Internet of Things Retreat. A Signpost was transported and successfully deployed for the 48 hours of the retreat, becoming operational in less that five minutes.
  • Summer 2017: The first Signposts are being deployed on UC Berkeley's campus!
  • Winter 2017: Signpost v0.2 released for the TerraSwarm Signpost Workshop. This workshop featured the release of the Debug Backplane, initial API implementations for signpost modules, and tutorials for getting started with the Signpost platform.
  • Fall 2016: Signpost v0.1 presented at TerraSwarm Annual Review. The demo included six modules (ambient conditions, 2.4 GHz RF sensing, LoRa/BLE radios, ambient audio level, microwave radar, and air quality sensing from UCSD), data communication over LoRa to a gateway, and a real-time UI.
  • Summer 2016: Discussions on physical design yield a prototype enclosure and module form factor.

Related Projects

City-scale sensing platforms are a growing area of research with several emerging approaches:

We see Signpost as one part of the city-scale sensing ecosystem, and we hope to eventually deploy dynamic applications that can be distributed across high granularity energy-harvesting nodes (Signposts) and powered nodes such as Array of Things. Hopefully applications such as SONYC can lower the cost of deployment by running on Signpost platforms.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

signpost's People

Contributors

abalanuta avatar adkinsjd avatar alevy avatar bradjc avatar brghena avatar haoyifan avatar linux4life798 avatar nealjack avatar ppannuto avatar srohrer32 avatar theomil avatar tzachari avatar wwhuang 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  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  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

signpost's Issues

Edison toFlash.tar.gz firmware fails to reboot

The signpost/software/edison/toFlash.tar.gz image seems to not work for me.

I installed git lfs:

sudo port install git-lfs
git clone https://github.com/lab11/signpost.git
cd signpost/software/edison                                                                                    
git lfs track toFlash.tar.gz                                                                                    
git lfs pull toFlash.tar.gz  

The image size seems correct and the file seems OK:

bash-3.2$ ls -l toFlash.tar.gz                                                                                            
-rw-r--r--  1 cxh  staff  158338761 Feb 15 11:39 toFlash.tar.gz                                                           
bash-3.2$ tar -ztvf *.gz | head                                                                                           
drwxrwxrwx  0 root   root        0 Nov 22 01:15 toFlash/                                                                  
-rw-rw-rw-  0 root   root  4194304 Nov 22 01:09 toFlash/edison_ifwi-dbg-01-dfu.bin                                        
-rw-rw-rw-  0 root   root  4194304 Nov 22 01:09 toFlash/edison_ifwi-dbg-00-dfu.bin                                        
-rw-rw-rw-  0 root   root      742 Nov 22 01:09 toFlash/filter-dfu-out.js                                                 
-rw-rw-rw-  0 root   root  4194468 Nov 22 01:09 toFlash/edison_ifwi-dbg-01.bin                                            
-rw-rw-rw-  0 root   root  4194304 Nov 22 01:09 toFlash/edison_ifwi-dbg-03-dfu.bin                                        
drwxrwxrwx  0 root   root        0 Nov 22 01:09 toFlash/helper/                                                           
drwxrwxrwx  0 root   root        0 Nov 22 01:09 toFlash/helper/images/                                                    
-rw-rw-rw-  0 root   root   315857 Nov 22 01:09 toFlash/helper/images/Edison-arduino-blink-led.png                        
-rw-rw-rw-  0 root   root   298970 Nov 22 01:09 toFlash/helper/images/Edison-breakout-board.png                           
bash-3.2$ 

When I use the Intel Edison Setup Application to install this file, I see it validate the image, and then there is a message about dfs (not sure about that) and then I get a window that says:

Uh-oh! Your Intel Edison did not update, This is likely because your Intel Edison did not reconnect properly, You'll need to download the newer firmware and manually update the Intel Edison Board. Detailed instructions are at https://software.intel.com/en-us/flashing-your-firmware-edison

I'm able to download the latest image from Intel and install that.

Should signpost/software/edison/toFlash.tar.gz work on an bare Intel Edison that is just connected to a SparkFun Base Kit for Intel® Edison KIT-14105 ?

Microwave Radar PCB fixes

  • Hole sizes too small for radar module
  • TX/RX silkscreen backwards
  • PCB board name label too small
  • MSGEQ7 schematic
  • SAM4L switching power supply doesn't work

Summon demo app

Thomas added a summon app which can be viewed at j2x.us/signp. This issue is for tracking updates that are needed for it. @tzachari

  • Add time and date to the Controller view
  • Add the UC Berkeley logo to the signpost
  • Either add the UCSD logo to the Air Quality view or rename to UCSD Air Quality
  • Make SIGNPOST name bigger. Might have to move it

Module Time Sync

To have a hope of tight time synchronization, modules are probably going to need to wire PPS to a timer/counter (TC) pin, so that it can trigger a counter start. This might not really help, because the SAM4L doesn't have a 32bit counter that can take an external trigger anyways, but it's something to think about.

PPS slew math

We should spec out the actual quality of the PPS signal that modules can expect and include that in documentation

Backplane RevB updates

So far just nits but a place to collect things.

  • Add a space on silkscreen to write in an identifier (i.e. Backplane no. 12)
  • Move R46 and R47 to be near R48. (Or vice-versa and move the test points too)
  • Software resettable fuses for modules
    • Moved to the power module's responsibility
  • TVS diodes on all module I/O ?
    • I'm not convinced this is needed, can revisit if stuff actually breaks
  • Deal with USB Hub Reset problem
    image
    • Resolved by adding GPIO extender for reset line control. Debug backplane may still add PoR circuitry, but not really needed for signpost proper

Backplane RevA updates

  • Numbers in silkscreen for modules
  • Move part labels off of vias (korea is ok when the vias are small, these vias are big)
  • Fix U30 package (and the other 5)
  • Minimize plane area (?)
  • USB data muxes have wrong control signals. Should be fed with MODn_USB_!EN, not MODn_ISO_USB
  • Also, it seems like the unused port should have pull downs: https://e2e.ti.com/support/interface/digital_interface/f/130/p/367935/1295211#1295211
  • Pull !BACKPLANE_RESET high instead of low
    • Add jumper spot for !backplane_reset to VCC
  • Fix stubs on USB pull-down resistors (see 4.1 of http://www.usb.org/developers/docs/hs_usb_pdg_r1_0.pdf)
  • Update power module for battery / solar attachment
  • Add pullup !OVR for unused USB port

Controller Rev B Fixes

List for tracking problems discovered with Rev B of the controller

  • Swap C12 and C25 locations

Controller RevA Updates

Issue to track fixes for controller RevA

  • There are two pins labeled USB_D+ and none USB_D-

Generate mbedtls randomness from hardware RNG

I believe the current implementation relies solely on CPU timing for randomness (specifically for the ECDH key exchange). That's a problem because it's insecure and because we don't get to use our fancy TRNG driver for the SAM4L.

Instead, the signpost user libs can simply define

#define MBEDTLS_ENTROPY_HARDWARE_ALT

int mbedtls_hardware_poll( void *data,
                           unsigned char *output, size_t len, size_t *olen );

to call the underlying TRNG driver.

Add a license

While this code is all public, I didn't see a license file or anything specified in the README. It'd be good to clarify this.

Backplane Rev C Errata

  • USB !BUSPWR is wrong: Currently tied to GND, which states that the hub and all downstream devices are powered from the upstream port. Should be tied high, stating that the hub has an "external" power supply. In both modes, the hub still will perform overcurrent and poweroff protections.
    • Symptom: This limits the hub to 500mA max total draw, as each downstream port has a minimum 100mA allotment (USB spec), so the hub disables higher ports (cannot use USB in Module 5 or Module 7 slot)
    • Remedy: Cut trace at pin 10 (!BUSPWR) and short pins 10 and 9.

Power Module Rev D Fixes

  • U19 pin 1 indicator
  • Better precision resistors for solar charger divider (Input and output regulation)
  • More space monitors and sense resistors
  • More space around charger/regulators
  • U27 wrong package
  • D3 wrong package
  • Add reset button on watchdog

Ambient Rev C fixes

Tracking things to fix for the next revision:

  • Grounded mounting holes
  • Silkscreen labels on header pins
  • Change to 0402 ferrite bead
  • Remove extraneous pressure sensors. We can't even purchase all of them anymore

Inconsistent baudrate for audio_module

In the audio_module software/kernel/boards/audio_module/src/main.rs file the line
sam4l::pm::setup_system_clock(sam4l::pm::SystemClockSource::ExternalOscillator, 16000000); causes the baud rate to be 115200.
Changing the speed to 48 MHz
sam4l::pm::setup_system_clock(sam4l::pm::SystemClockSource::ExternalOscillator, 48000000); causes the baud rate to be 38400. Unsure as to why

Controller Rev D todos

  • Better isolation for things touching the Linux power domain
  • PPS connection to Storage Master
  • Output Enable pulldown on logic level converter
  • PWRBTN# net needs isolation from SAM4L. Doesn't currently allow Edison to run without powering the SAM4Ls
  • Keep more space around Edison mounting holes

Travis Issue

It looks like Travis isn't actually catching when our applications fail in Signpost. See https://travis-ci.org/lab11/signpost#L1168. It looks like some applications are still including firestorm.h and have been failing, but travis thinks all tests have passed.

@ppannuto Could you take a look at this at some point?

Updates for the Edison image

Below are some updates I'd like to see in the Edison Image:

  • Install Node and npm. Node 6.9.5 is preferred. See Edison Node Notes. Accessors will require Node.

  • Set the date. When I installed the default Intel-provided image, it seemed like the date was set properly, or at least close to the current time. I ran into problems using wget and npm because the date was set to 1/1/2000 and the certs were not valid.

  • Set up a sbuser with the appropriate keys, see Set up the sbuser account on the Edison. Downloading accessors requires the sbuser account.

There is no big rush on these, just when we get around to updating the Edison image, it would be good to consider these.

signpost-debug-radio issue

When Theo was running through the Signpost tutorial, he found that the signpost-debug-radio pip package seems to have an issue and can't find _version.py. We should try to replicate this and fix it. Leaving this issue for now so that I remember it.

Radio module reliability

We want to improve radio module reliability. This has two prongs: detecting errors and resetting cleanly

  1. We want to be able to detect errors on the Nucleum and iM880B. For the Nucleum, the ble_error function seems like it should be able to do this. However, while testing I could not seem to get this function to be run... For the iM880, we should read its responses. The console getauto function can probably do this adequately. Upon detecting an error, the app_watchdog_reset_app function can be called to reboot the module.
  2. We want the radio board the reliably reset even if the Nucleum or iM880B have gotten into a bad state. The power gate on the Nucleum is toggled at start, getting it into a reliable state. Something needs to be done for the iM880B too. Using its power gate, however, seemed to lead to system problems and was being tested when the iM880 on my radio board gave up the ghost, leading to worries on my part that it might have been doing bad things for the board. @adkinsjd suggested there is a reset line that can be used instead.

Debug Backplane Rev C Errata

  • Missing silk labels for:
    • image
  • C54/C72 are decapping the wrong thing (sigh..)
    • No, they were right, Eagle was just tricking me. VCC is pins 9 and 46 (or, 9*2 in the schematic), but decap was correctly on 46. Le sigh
  • Isolation override switches have momentary short
    • Addressed by just letting the LEDs float when they're off instead of grounding them

Doc wrong path

In the Bonus: Running two applications concurrently section of software/docs/TutorialSession.md, the apps/tock_examples/hello_app/build/storm/app.bin path is incorrect.

May need changes to the template/Makefile

Documentation: Better Getting Started

It's unclear to new users what's located in which directory, and especially where the Tock submodule is located. Currently we point to Tock's getting started instructions, which assume you're in the Tock submodule to run commands. We should write a map of the repository and do something to make getting started make more sense to new users.

Timer callbacks getting lost somehow (probably)

With watchdog timer firing at 250 ms, app watchdog timer firing at 30 s, and app timer firing at 6 s, every 235 s the app seemingly stops getting a callback for the 6 s app timer. 30 s the app watchdog fires and resets the MCU.

Disabling the HW watchdog and watchdog timer (the 250 ms one) seems to make this problem go away. Changing the app timer interval does not seem to have any effect.

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.