Embedded Software Engineer

Ulysses Inc.San Francisco, CA

About The Position

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.

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.

Responsibilities

  • 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.
© 2024 Teal Labs, Inc
Privacy PolicyTerms of Service