Senior Embedded Systems Software Engineer
Zipline is looking for experienced Senior Embedded Systems Engineers to create and improve upon a reliable software platform for our autonomous aircraft and ground systems. Engineers come into the office as needed during the pandemic. As public health restrictions are lifted, we are excited to collaborate and innovate together in-person at our office in South San Francisco.
Leading the charge in drone delivery often means exceeding the capabilities of what’s available off the shelf, and as a result we are engineering the majority of our system in-house. Inventing new robots and doubling down on the reliability of our systems is the critical path to serving the next 1 Billion people.
To get there, our team will have to:
- Refactor and test all the software for our aircraft recovery system
- Design an online battery state of charge estimation algorithm
- Select components for next generation systems
- Run flight controls and perception in real time on embedded linux
- Upgrade message passing interfaces to support a multi-repo strategy
- Implement a real-time failover to a backup flight processor
- Scale our flight software to complete 10,000 life-saving deliveries a day
- And much more!
Tackling these challenges takes more than any one individual. Our goal is to hire multiple exceptional embedded engineers to join our team, which means your specific responsibilities will depend on your skills and interests.
You write quality code fast--Code that is correct, easy to read, tested, with friendly APIs. Quality is important because our systems are controlling large amounts of energy in close proximity to people. Quality is also important because many other software engineers at Zipline build software on top of the foundation that the embedded team sets. “Fast” is important because we are impatient to achieve our mission!
You are excited to leverage code to solve problems that exist in the physical world. Our systems interact directly with the physical world and there often won't be a human nearby to intervene. This means that your software is written with laws of physics and Murphy’s law in mind.
You are familiar with the breadth of tools available to embedded systems engineers and pick the right tool for the problem. These include processors, sensors, operating systems, and software libraries. This is important because many problems have been solved already, and picking the wrong tool leads to hampered development and frustration.
You design software that is part of a system. The engineered artifact created by an embedded systems engineer at Zipline is software, but that software is operating as part of a much larger system, whether it be Unix, a cellular network, or a battery management system.
MUST HAVES:
- Professional experience building software in RTOS or Embedded Linux
- Fluency writing embedded systems software in C and C++
- Confidence writing simple production-ready Python programs
- Confidence writing peripheral drivers based on an electrical schematic and datasheet
- A habit of augmenting automated tests to verify embedded software. Engineers at Zipline write their own tests!
- Excellent communication (written, verbal, and visual). You know how to tailor to your audience with the right level of technical depth
NICE TO HAVES:
- Experience implementing and simulating controls and estimation algorithms for dynamic systems (e.g., state space, Kalman filters). We have a lot of moving parts!
- Experience implementing perception on embedded systems
- Experience using message passing frameworks such as LCM or ROS
- A habit of using data analysis to verify embedded software.
- A desire to use (or learn) Rust
- You’ve deployed safety-critical embedded software
The ideal candidate may not have all of the following skills and experience. If any of these apply, you might be a good fit!