The RoleWe are looking for a talented and motivated Embedded Firmware Engineer to join our growing team. In this role, you will design, develop, and maintain the bare-metal and RTOS firmware that runs our AUVs on embedded microcontrollers. You'll write C and C++ close to the metal, bring up new hardware, and own the low-level software that keeps our vehicles running reliably in demanding maritime conditions. The ideal candidate is a proactive engineer who enjoys working close to the metal and thrives at the hardware/software boundary.
What You'll Do- Design, build, and maintain efficient, reliable firmware in C and C++ for embedded microcontrollers (bare-metal and RTOS)
- Bring up new hardware: board bring-up, bootloaders, device drivers, and board support packages
- Implement and debug communication between subsystems over interfaces such as UART, SPI, I2C, CAN, and Ethernet
- Integrate sensors, actuators, and peripherals, and implement real-time control and telemetry paths
- Optimize firmware for performance, memory footprint, and power
- Collaborate with electrical, mechanical, and autonomy engineers to translate system requirements into robust embedded solutions
- Write and maintain unit and integration tests, and support hardware-in-the-loop testing
- Participate in code reviews, providing and receiving constructive feedback to improve our engineering practices
- Troubleshoot, debug, and upgrade existing firmware, including on-vehicle and field debugging
What You'll NeedRequired Qualifications:
- Degree in Computer Science, Computer Engineering, Electrical Engineering, or a closely related technical field
- 3-5 years of professional embedded software/firmware development experience
- Strong proficiency in C and C++ for embedded microcontrollers (bare-metal and/or RTOS)
- Hands-on experience developing firmware for STM32 microcontrollers (e.g., STM32CubeMX/HAL, LL drivers, or bare-metal register-level programming)
- Solid understanding of hardware/software integration: reading schematics and datasheets, and debugging with oscilloscopes, logic analyzers, and JTAG/SWD
- Experience with embedded communication protocols (e.g., UART, SPI, I2C, CAN, Ethernet)
- Familiarity with real-time constraints, interrupts, DMA, and low-level memory management
- Experience writing firmware for power-constrained and/or resource-limited systems (battery power budgets, tight memory/timing footprints)
- Proficiency with version control systems, specifically Git
- Excellent problem-solving skills and the ability to work effectively in a team environment
- United States Citizen or Permanent Resident
- Ability to gain a security clearance
Nice-to-Haves:
- Experience with cross-compilation, build systems (e.g., CMake, Make), and toolchains for embedded targets
- Experience with the Rust programming language
- Experience with the Nix ecosystem (Nix/NixOS, reproducible builds)
- Experience with digital signal processing (e.g., filtering, FFTs, sensor data conditioning)
- Experience with serialization protocols like Protobufs, DDS, etc.
- Familiarity with robotics middleware or modern robotics frameworks (e.g., ROS 2)
- Experience with CI/CD pipelines for embedded software and automated hardware testing
- Experience with maritime sensors, underwater acoustics, or subsea systems
- Familiarity with functional safety or safety-critical software development practices