SatNOGS

 

Crowd-sourced satellite operations

Nikos Roussos

Libre Space Foundation

Hunting Satellites

Scale?

Scale?

Build a Network

SatNOGS

Network

Client

Rotator

Antennas

DB

Rotator

Bring your own

  • Any rotator supported by hamlib/rotctld

Build your own

  • Open hardware, 3D printable rotator design

ohai.satnogs.org

FreeCAD

KiCad

QCad

Ground Station

Reference platform: Raspberry Pi3 + rtlsdr

 

Works with any SDR supported by gr-osmosdr

 

Client runs on any Linux platform - Python & Gnuradio

 

LNA highly recommended, LNA4ALL or others

Gitlab CI

PiGen

Ansible

DB

Crowd-sourced satellite database

  • status, frequencies, info

 

Repository for collected telemetry data

  • API that works with 3rd party apps
    • DK3WN TLM Forwarder
    • Gr-satellites sids forwarder
    • Gpredict
  • Download collected data
  • To date: ~10M frames from 80 satellites

db.satnogs.org

def find_sync_index(data):
    sync_bytes = bytearray([0x55, 0x53, 0x36])  # U S 6 or 0x55 0x53 0x36
    packet_start_index = bytearray(data).find(sync_bytes)
    return packet_start_index

payload = bytearray.fromhex(payload)
sync_offset = find_sync_index(payload)

if sync_offset == -1:
    raise ValueError('No sync bytes found')
else:
    payload = payload[sync_offset:len(payload)]

Network

  • Schedule observations, managing available/capable ground stations

 

  • Collects and displays results from observations when finished
    • Waterfalls
    • Demodulated audio
    • Demodulated data

network.satnogs.org

@app.task
def archive_audio(id):
    obs = Observation.objects.get(id=id)
    identifier = 'satnogs-observation-{0}'.format(obs.id)
    if os.path.isfile(obs.payload.path):
        ogg = obs.payload.path
        filename = obs.payload.name.split('/')[-1]
        md = dict(collection=settings.ARCHIVE_COLLECTION,
                  title=identifier,
                  mediatype='audio')
        res = upload(identifier, files=[ogg], metadata=md,
                     access_key=settings.S3_ACCESS_KEY,
                     secret_key=settings.S3_SECRET_KEY)

Client

  • Checks in with the network regularly
  • When a job is scheduled
    1. Commands the rotator
    2. Starts a gnuradio script to collect RF
    3. Adjusts frequency for doppler correction
    4. Generates a waterfall, audio, etc.
    5. Uploads the results
  • Comes in source, packages or a ready-to-flash RPi3 image
  • Web-interface with stand-alone abilities (for TX/RX too)

Contribute!

  • Setup a station! - wiki.satnogs.org
  • Contribute to db.satnogs.org
  • Write some code (C, C++, Python, JS)
  • Help with documentation
  • Help with testing and automation
  • Join our channel #satnogs:{matrix.org|freenode.net}

Thank You!

Nikos Roussos

@comzeradd

nikos@libre.space

SatNOGS

By Nikos Roussos

SatNOGS

Open Source Ground Station Network

  • 90
Loading comments...

More from Nikos Roussos