2dbdbcfced | ||
---|---|---|
doc | ||
rx | ||
src | ||
test_images | ||
tx | ||
LICENSE.txt | ||
README.md | ||
start_rx.sh | ||
start_tx.sh |
README.md
Wenet - The Swift One
Transmit and Receive code for the Project Horus High-Speed Imagery Payload - 'Wenet'.
The transmit side is designed to run on a Raspberry Pi, and the UART (/dev/ttyAMA0) is used to modulate a RFM98W (yes, a LoRa module) in direct-asynchronous mode. I expect other transmitters could probably be used (i.e. NTX2's or similar) at lower bandwidths.
Flight History
- v0.1 - First test flight on Horus 37, no FEC. Read more about that here: http://rfhead.net/?p=637
- v0.2 - Second test flight on Horus 39, with LDPC FEC enabled. Read more here: http://www.rowetel.com/?p=5344
- v0.3 - Third test flight on Horus 40 - 2nd Jan 2017. Added GPS overlay support. Read more here: http://www.areg.org.au/archives/206627
- v0.4 - SHSSP 2017 Launches (Horus 41 & 42) - 22nd Jan 2017. Added IMU and simultaneous capture from two cameras (Visible and Near-IR). Two payloads were flown, each with two cameras. A third payload (same as on Horus 40) was also flown, which captured the image below. Read more here: http://www.areg.org.au/archives/206739
- v0.5 - Minor updates. Flown on Horus 43 through Horus 49.
- v0.6 - Updated to the latest fsk_demod version from codec2-dev. This allows reception without requiring CSDR.
- v0.7 - More tweaks to the start_rx script to better support lower-rate modes. Update to the latest fsk_demod in the instructions.
The above image was captured on Horus 42, and downlinked via Wenet. The original downlinked resolution was 1920x1440, and has since been re-sized. The full resolution version is available here: http://rfhead.net/temp/horus_42_full.jpg
Usage Instructions
Refer to the wiki pages for the latest installation/usage instructions.
WARNING: The below information is partly outdated. Use the above installation guide.
Main Programs
rx/rx_ssdv.py
- Reads in received packets (256 byte SSDV frames) via stdin, and decodes them to JPEGs. Also informs other processes (via UDP broadcast) of new ssdv and telemetry data.rx/rx_gui.py
- Displays last received image, as commanded by rx_ssdv.py via UDP.tx/init_rfm22b.py
- Set RFM22B (attached via SPI to the RPi) into Direct-Asynchronous mode.tx/init_rfm98w.py
- Set RFM98W (attached via SPI to the RPi) into Direct-Asynchronous mode. Note that this requires pySX127x from https://github.com/darksidelemm/pySX127xtx_picam_gps.py
- Captures pictures using the PiCam, overlays GPS data and transmits them.
Testing Scripts
- Run
python compress_test_images.py
from within ./test_images/ to produce the set of test ssdv-compressed files.
TX Testing
tx_test_images.py
transmits a stream of test images out of the RPi UART. Check the top of the file for settings.- This script can also be used to produce a one-char-per-bit output, which is what would be seen by the modulator.
RX Testing
rx_tester.py
produces a stream of packets on stdout, as would be received from the fsk_demod modem.- Run
python rx_tester.py | python rx_ssdv.py
to feed these test packets into the command-line ssdv rx script. - add
--partialupdate N
to the above command to have rx_gui.py update every N received packets.
Sending/Receiving Images
TX Side
Refer to the instructions here: https://github.com/projecthorus/wenet/wiki/Wenet-TX-Payload-Instructions
RX Side
Refer to the instructions here: https://github.com/projecthorus/wenet/wiki/Wenet-RX-Instructions-(Ubuntu-Debian)
RX Tips.
- It is highly recommended to use a preamplifier in front of your RTLSDR to lower the overall noise figure of the system. With a NooElec RTLSDR (R820T2 Tuner) and a HabAmp, we were able to achieve a Minimum-Detectable-Signal (MDS - which we defined as the point where we get no packet errors) of around -112 dBm.
- If needed, the transmit bitrate can be slowed down by editing the defaults in tx_picam.py. You will then have to determine the appropriate parameters for fsk_demod and the preceding filtering/resampling chain to be able to receive this bitrate.