Over the past 6 months, I’ve become more passionate about embedded devices. I’m currently working on a project that involves drones, companion computers and computer vision. Over the course of 6 months I had the opportunity to test my software in multiple regions and use cases. As I added more features, I came to a point where the computational resources on the embedded systems that I was working on started to become constraining. Here are my use cases and the limits that I have witnessed.
- H264 video encoding, decoding
- UART communications
- Python based, relatively large code base (20000 lines of code, multiple threads, processes, libraries and communication protocols and tiers)
I’m doing all of this on a raspberry pi, and the CPU and ram is sufficient for this use case. I believe that this level of taks are ideal for a raspberry pi. But if you ever decide to do some computer vision, add graphics overlay to the video stream, encode it as well, you will quickly run out of resources quite fast. Also I’m used to developing on python and not to think about the inefficiencies. That is also effecting how much performance I can get from a limited environment.
Stuff that I want to do but can’t do with a raspberry pi or a similar arm single board computer
- High FPS neural net inference (20fps would be cool with tiny yolo)
- h265 video decoding and encoding (driver support is a thing)
- disk encryption
There are couple of solutions to these problems, first of all being able to use an Ubuntu supported device would be great but all the recent arm products that I found were a little too hacky with Ubuntu and the driver support was relatively poor. On the other hand I believe boards with Intel cpus have much more better support for drivers (I will test this more extensively and post my results. Also disc encryption is a little tricky on edge devices, if the device reboots someone will need to input the pass-code to decrypt the hard-drive.