Open position
Senior Software Engineer (Firmware and Robotics)
We are seeking a Senior Software Engineer to write the embedded firmware on the microcontrollers inside our robots and the ROS 2 drivers that talk to it. The firmware handles internal communication between motor controllers, sensors, and safety hardware. The drivers expose that hardware to the on-robot compute.
You will work in the core robotics team with hardware and controls engineers, on the bench and on deployed robots.
What you’ll do
- Develop and own embedded firmware on the robot microcontrollers, from board bring-up through production release.
- Design the internal communication layer between MCUs, motor controllers, sensors, and the on-robot compute, including bus protocols and error recovery.
- Own timing-critical firmware paths: interrupts, DMA, scheduling, and the latency and jitter budgets.
- Write MCU peripheral drivers: CAN, SPI, I2C, UART, timers, ADC, and GPIO.
- Build and own the ROS 2 drivers and ros2_control hardware interfaces that expose robot hardware to AMP.
- Define the firmware to driver interface, including clock synchronization and diagnostics, and keep it stable as hardware changes.
- Maintain the bootloader and firmware update path, including recovery from a failed update.
- Implement the firmware side of safety-relevant signal paths, under the safety architecture.
- Diagnose failures across the firmware, driver, and hardware boundaries, on the bench and on deployed robots.
Job requirements
Experience
- 5 to 8 or more years of professional engineering experience, with at least 3 years writing production embedded firmware on microcontrollers.
- Experience bringing up a new board from first power-on through to a working driver on the host.
- Experience shipping firmware onto fielded hardware, where a defect has a physical cost.
- Experience working directly with hardware and controls engineers through design and debug.
Education
- Master’s degree or higher in Computer Engineering, Electrical Engineering, Robotics, Computer Science, or a closely related technical field. This is a minimum requirement.
Core technical background
- Strong embedded C, plus C++ where the target supports it.
- Strong grasp of MCU architecture: interrupts, DMA, memory maps, clock trees, power modes, and peripheral configuration.
- Experience with an RTOS such as FreeRTOS or Zephyr, and with bare-metal firmware where no RTOS is used.
- Hands-on experience with embedded and industrial buses: CAN and CAN FD, SPI, I2C, UART, and EtherCAT or another Ethernet-based fieldbus.
- Experience designing a communication protocol over a bus, including error handling and version compatibility.
- Experience with bootloaders, firmware update mechanisms, and memory partitioning.
- Experience with motor control and drive interfaces, including homing, limits, and fault handling.
- Hands-on experience writing ROS or ROS 2 drivers and ros2_control hardware interfaces.
- Working knowledge of C++ and Python on the host side, including driver diagnostics and introspection.
- Fluent with an oscilloscope, logic analyzer, and bus analyzer, and able to read a schematic.
Systems mindset
- Ability to isolate a firmware defect from a hardware defect and show the evidence.
- Designs for dropped frames, bus errors, brownout, and sensor dropout.
- Works to worst-case timing, not typical timing.
- Clear view of what belongs in firmware and what belongs in the driver.
- Builds on the assumption that a firmware update in the field is expensive.
Collaboration
- Willing to work on hardware in the lab and at customer sites.
- Clear communicator who can work effectively with remote teams across multiple time zones, including hardware colleagues in Germany.
Nice to have
- Experience with KUKA hardware or KUKA controller interfaces.
- Experience with functional safety in firmware, including dual-channel architectures and IEC 61508 or ISO 13849.
- Experience implementing the device side of EtherCAT (SubDevice) or another fieldbus stack.
- Experience with AMR or mobile manipulator platforms in production.
- Experience with firmware and driver testing: hardware-in-the-loop rigs, unit testing on target, and static analysis.
- Prior open-source contributions to ros2_control or the ROS hardware ecosystem.