This is an open source and open hardware project that allows you to control a remote drone and receive FPV video from cheap, simple components.
Brand New - I have prototype code running on an MCU and a Steamdeck. No radio comms yet, no video yet. Video TX and RX Parts are shipping.
June 1st 2024: You are reading the first commit for this repository. Parts are shipping, and prototype code on the steamdeck has been written.
Primarily, we want to transmit joystick signals to a remote receiver/drone/robot from a steamdeck.
Secondarily, we want to receive a video feed from the remote drone.
A stretch goal of mine will be able to provide an entire kit for purchase, ready for wiring and assembly.
- 3D Printed Frame - I have a printer, and love the idea of an arm being replaced in a couple hours.
- Off the shelf components - I will break this. A lot. I want cheap/fast ways to repair (Amazon parts, DIY).
- As much as possible, tap into already provided hardware/software - IE: esp-fc, ESCs, MMUs, etc.
- Provide everything in a portable, simple to understand way (pygame, micropython) - ideally we don't need devmode or having to unlock the drive.
The steamdeck is a computer. It runs Arch, a flavor of linux that I daily drive.
From basic tests, one can setup a pyenv, install pygame, and run pygame all without needing devmode or write access to the drive.
With some code, this gives us access to the joystick and buttons.
To provide the steamdeck the capability to radio transmit those joystick and button signals over long distance, we will use LoRa, which can transmit up to nearly 1KM.
To control a LoRa module, we'll talk to a microcontroller (ESP32) that powers the LoRa transmitter via serial over usb (/dev/ttyUSB0).
The basic control will look something like:
pygame (steamdeck controls) <-> USB Serial <-> ESP32 <-> LoRa <-> Radio Signals <-> ESP32 <-> Flight Controller <-> ESC <-> Drone Motors pygame (steamdeck video) <-> OTG 5.8GHz Webcam Stream via USB <-> 5.8GHz VTX <-> Drone Camera
Inspired by this comment: https://www.reddit.com/r/Steam/comments/omf8xf/comment/l3ffasi/
I've never done any drone stuff, so this was what sparked my interest. These things are cheap, $30-40 receivers.
The VTX is also cheap, and depending on your desired camera quality, the camera is cheap.
All in, I am spending (with Amazon premiums applied - you can of course get this cheaper elsewhere) about $80 to begin testing video transmission to the Steamdeck from a remote drone camera.
The steamdeck has a LOT of capability for all kinds of customized ways to handle input.
It feels like it could be the perfect companion to amateur drone flying.
Right now, I am using the default controller detected by pygame, but further experimentation should help us figure out how to tap into the Steamdeck's configurations.
ChatGPT and I had a long talk around which was the best module to use. https://chatgpt.com/share/0b7a110e-f3e7-45c4-b29e-e4f8c12da1b3
In there, I proposed the worst case scenario I could think of - very noisy, downtown environment with lots of objects in the way of transmissions.
Ultimately, I settled on settings that were corroborated via other commenters on Reddit, and also noticed there were commercial products using the settings provided.
Roughly, we will use LoRa via the FSK mode, with a Spread Factor of 7 and as high a bandwidth and power as our chip will allow.
The chip I ended up settling on was the SX1262. These are widely available, well supported, and plenty of devkits for it.
More importantly, it is well supported in micropython and achieves all of the characteristics we need (sub 50ms latency from control to drone).
One SX1262 will be responsible for transmitting to the drone.
I'll do this via a fairly dumb "pass through" program running on the ESP32 that listens for serial input and pushes it over Lora.
The other SX1262 will be on the drone, and needs to be able to talk to the FC.
Further research is needed on exactly how to make that happen :)
I'll be trying to use an ESP32 for the FC for initial experiments (so you won't see it in this list).
See: https://github.com/rtlopez/esp-fc
I'm adding my Amazon list for convenience for now. Once I've tested enough I'll solidify everything into the repo here.
I have never hooked up any commission anything, so I don't think that is present here, but if it is, it is unintended:
https://www.amazon.com/hz/wishlist/ls/B53DGAOXK9V6
For now, I am prototyping with a Heltec V3 LoRa board since it is so simple to interface with and test basic TX/RX.
TBD (micropython)
TBD
TBD, see: https://makerworld.com/en/models/236234#profileId-269467
TBD (Betaflight)
TBD
TBD
TBD