Embedded Software Engineer
Ulysses
Software Engineering
San Francisco, CA, USA
About us
Ulysses is the ocean company. We design, manufacture, and operate autonomous vehicles for surface and subsea operations — taking on the most critical tasks across defense, commercial, and scientific missions. Our vertically integrated platform includes Mako, a modular AUV with 72-hour endurance and more onboard compute than any vehicle in its class; Leviathan, an autonomous surface vessel mothership; and Kraken, our automated launch-and-recovery system that closes the loop between surface and subsea with zero human intervention.
The ocean covers 71% of the Earth's surface and drives a $2.6 trillion global economy, yet it remains the least monitored domain on the planet. We're changing that — building autonomous systems that collapse the cost of ocean operations by orders of magnitude so that persistent coverage becomes the baseline, not the exception. We operate globally today across defense, ocean science, and commercial survey, working with partners including the U.S. Navy, the Government of Australia, the Great Barrier Reef Foundation, and The Nature Conservancy.
Founded in 2023 and headquartered in San Francisco, Ulysses has raised $48 million in funding from Andreessen Horowitz, Booz Allen Ventures, Harpoon Ventures, Pebblebed, Lowercarbon Capital, and others. Our team is lean, hands-on, and fast — we prototype in the shop, test on the water, and ship. If you want to work at the frontier, there's no frontier bigger than the ocean.
About the Role
We're looking for an Embedded Systems Engineer to own the firmware, electronics integration, and low-level hardware that make our underwater robotic systems work. You'll write the embedded code that runs on our hardware - sensor drivers, real-time control loops, communication stacks, and power management - while also getting hands-on with the electronics: debugging and reworking PCBs, building up embedded systems from modules and development boards, and contributing to PCB design for new subsystems.
This is a deeply hands-on role that lives at the boundary between electronics and software. You'll work directly with electrical, mechanical, and acoustics engineers to bring up new boards, probe signals, diagnose hardware faults, and build the embedded platforms that our autonomy and navigation software depends on. You'll see your work go from bare PCBs on a bench to ocean deployment, and you'll be the person debugging it, scope in one hand, debugger in the other, at every stage.
What You’ll Do
Prototype embedded hardware: Assemble embedded systems prototypes from off-the-shelf modules, breakout boards, and Ulysses’ custom PCBs. Select components, wire up prototypes, and get new subsystems running on the bench before they go into production.
Debug and rework PCBs: Use oscilloscopes, logic analyzers, multimeters, and soldering tools to diagnose board-level issues - signal integrity problems, power rail faults, incorrect component values, and layout mistakes.
Contribute to PCB design: Collaborate with electrical engineers on schematic capture, component selection, pin mapping, and layout review. Provide firmware-informed input on design-for-test, connector placement, and debug access.
Design, implement, and maintain embedded firmware for robotic subsystems: sensor interfaces, actuator control, power management, and inter-processor communication.
Bring up new hardware: Write and debug board support packages, peripheral drivers, and bootloaders for custom electronics.
Build and own communication stacks: Serial protocols, Ethernet, CAN bus, and acoustic modem interfaces that connect subsystems reliably in real time.
Implement real-time control and data acquisition: Timing-critical loops, interrupt-driven architectures, DMA pipelines, RTOS, and deterministic scheduling.
Develop robust logging, diagnostics, and fault-handling: The system needs to tell you what went wrong when it's 200 meters underwater and you can't attach a debugger.
Support field deployments: Prepare embedded systems for ocean testing, support real-time monitoring during missions, and lead post-mission hardware and software triage.
Drive production readiness: Firmware update mechanisms, manufacturing test fixtures, calibration routines, and configuration management for fleet deployment.
Verify AI written software: Review and update and correct embedded software written initially by AI, and ensure the software is robust, memory safe, and production ready.
Create and maintain internal software libraries: Design portable, and modular code that can easily be ported to new projects and microcontrollers.
About You
You think in registers and interrupts, but you’re just as comfortable picking up a soldering iron or probing hardware with a scope. You can read a schematic, spot and fix a hardware error on a PCB, and write the necessary software drivers to bring boards to life. You’ve shipped embedded systems that ran in the real world, and you understand that reliable hardware and reliable firmware are largely the same problem.
Requirements
2+ years of professional embedded software development in C and/or C++ on bare-metal or RTOS-based systems
Strong understanding of microcontroller architectures: peripherals, memory maps, clocks, DMA, interrupt controllers
You understand microcontroller software architecture better than AI, and are comfortable reviewing and correcting such software.
Experience writing production-quality device drivers for common interfaces: UART, CAN, Ethernet, ADC/DAC
Hands-on experience with hardware bring-up: reading schematics, using oscilloscopes, logic analyzers, and debuggers to diagnose issues at the board level
Familiarity with real-time operating systems (FreeRTOS, Zephyr, NuttX, or similar) and real-time design patterns
Familiarity with embedded software standards (MISRA C, BARR-C etc.)
Practical experience with communication protocol stacks such as CAN, Ethernet/UDP, or similar
Comfortable with version control (Git), CI/CD for embedded targets, and automated test frameworks
Ability to work across the hardware/software boundary and communicate effectively with electrical and mechanical engineers
Nice-to-Haves
Experience with PCB design (schematic capture and layout) for simple to moderately complex boards
Familiarity with robotic or autonomous system architectures, sensor fusion pipelines, or navigation system interfaces
Experience with underwater or marine systems, and harsh-environment deployments
Background in signal processing or DSP on embedded platforms (filtering, FFT, fusion)
Experience with Python for test automation, scripting, and data analysis alongside your embedded C/C++ work
Exposure to FPGA or HDL design for high-speed data acquisition or signal processing
Experience building firmware update (OTA/bootloader) and fleet management infrastructure
Experience with discrete control systems, stability analysis, PID controller, state-space control etc.