As a Senior Embedded Software/Systems Engineer, you will closely collaborate with Electronics Engineers, Embedded Systems Engineers, and Robotics Software Engineers to push the boundaries of mechatronics on our autonomous mobile robot platform.
Responsibilities
- Device driver development — Creating and optimizing device drivers for sensors, actuators, memory units, and computational units across our MCU and Linux-based platforms
- Communication pipeline implementation — Designing and implementing intra- and inter-processor communication pipelines for memory- and compute-constrained devices
- Robotic systems design — Contributing to embedded software architecture across the full stack: bare-metal firmware, RTOS configuration, hardware abstraction, and host-side platform libraries
- Integration and bring-up — Collaborating with electronics engineers on board bring-up, schematic review, and hardware-firmware co-debugging
- Automation and CI — Driving development of build, flash, and test automation for embedded targets
- Mentorship — Technical leadership and mentoring of junior engineers; contributing to team-level design and code review standards
Requirements
- 5+ years of embedded systems product development with proven ownership of shipped hardware
- Proficiency in C and C++ for embedded systems
- Hands-on experience with microcontrollers (ARM Cortex-M or equivalent)
- RTOS experience in production: Zephyr, FreeRTOS, or equivalent — task scheduling, ISR constraints, concurrency primitives
- Experience with communication protocols: I2C, SPI, CAN, UART, RS232/RS485
- Linux system-level programming and administration
- Device driver development — Linux kernel drivers or bare-metal peripheral drivers
- Debugging with oscilloscope, logic analyzer, and JTAG/SWD
- Schematic reading at a complex level
- Strong debugging and problem-solving skills with interrupt-driven designs
Nice to haves
While not specifically required, tell us if you have any of the following.
- Python for tooling, test automation, or data analysis
- Familiarity with Docker, CI/CD, ROS1/ROS2, micro-ROS
- SoC-level software optimization
Beyond technical qualifications, the behaviors we look for:
- Ownership — you drive outcomes, not just tasks; you know what would break if you weren’t there
- First principles — you question inherited assumptions and derive solutions from actual constraints
- Systems thinking — you understand the full data path from sensor to actuator, not just your module
- Failure-first design — safe states and fault handling are designed in, not added after the first incident
- Communication — you write design documents that help the next engineer understand the why, not just the what