As a Senior Embedded Software Engineer, you will design, implement and maintain the embedded software that runs our software defined robots. You will work across the Linux application processor and the microcontroller layer, define how components communicate, and make sure the system is secure, reliable, scalable and maintainable by design. You will communicate with Principal Architects to shape architecture decisions and raising the quality bar through code reviews and tests.
Key Responsibilities:
- Translate architecture requirements into robust, scalable and testable software.
- Design, develop and maintain embedded software in C++, including inter-process communication (IPC) on Linux Yocto OS for Raspberry Pi and STM32 series microcontrollers.
- Integrate with cloud and on-prem communication channels using communication protocols like gRPC, MQTT, HTTPS and others.
- Implement over-the-air (OTA) update mechanisms (e.g. A/B partitioning with RAUC, SWUpdate or Mender) and rollback strategies.
- Develop real-time firmware for STM32 MCUs in C++ and (bare-metal, FreeRTOS, Zephyr).
- Work with peripherals and buses such as RS-485, RS232, UART, USB and Ethernet, including interrupt-driven designs.
- Define and evolve interfaces using Protocol Buffers, with a disciplined approach to schema versioning and backward/forward compatibility.
- Design and implement inter-process communication on the Linux side (e.g. Unix domain sockets, shared memory, message queues, with clear latency, throughput and isolation guarantees.
- Design efficient, robust communication between the Linux host and MCUs, including framing, error detection, and compact serialisation (e.g. nanopb or similar).
- Establish a hardware root of trust, secure boot, signed firmware and images, and secure key storage (TPM, secure element, TrustZone or STM32 security features).
- Apply least privilege and process isolation (e.g. dedicated users, Linux capabilities, seccomp, namespaces, SELinux / AppArmor).
Required Qualifications:
- Degree in Computer Science, Electrical/Electronic Engineering or a related field, or equivalent practical experience.
- 5+ years of professional software development, with a substantial portion on embedded systems.
- Expert knowledge of modern C++ (C++17/20) with memory and performance awareness on constrained systems.
- Hands‑on experience building and customising embedded Linux with the Yocto Project (layers, recipes, bbappends, SDKs, BSPs).
- Practical experience designing APIs with Protocol Buffers and implementing gRPC services and clients.
- Strong understanding of IPC mechanisms and concurrent, multi-process system design on Linux.
- Demonstrable experience applying secure‑by‑design principles: secure boot, code signing, TLS/mTLS, and secure coding practices.
- Firmware development for STM32 or comparable ARM Cortex‑M microcontrollers, including RTOS usage, low‑level peripheral work.
- Comfortable with Git, CMake and/or Cargo, CI systems, and debugging tools.
Preferred Qualifications:
- Experience with robotics or software‑defined / reconfigurable machines.
- Experience in laboratory automation, chemistry, life sciences or other regulated industries (helpful but not required).
- Experience with functional safety standards (IEC 61508, ISO 13849) and safety‑aware software development.
- Knowledge of cybersecurity standards and regulations.
- Experience with fleet management and remote telemetry.