Senior/Staff Embedded Software Engineer
Posted Updated
Description
- In your role as an Embedded Software Engineer at Horizon Surgical Systems, you will contribute to the architecture and design of a cutting-edge surgical robotics system, implementing and verifying mission-critical software modules
- The ability to enforce deterministic timing, and fail-safe behaviors, in the controls software is paramount to its clinical efficacy and regulatory approval
- You will be responsible for supporting a robotic system with EtherCAT servo drives and redundant control-diagnostic checks, and so you will be debugging issues with peripheral hardware, Linux kernel latency, and real-time safety
- Working closely with the hardware team, you will work to bring up new peripherals, and you will need to consider the fail-safe implications in the event of motor controller failure
- Your development and testing will be performed primarily with Linux, and embedded targets where required to interface with hardware
- Designing, implementing, and testing embedded and Linux controls software for multiple generations of surgical robotic systems
- Performing device failure mode and effect analysis (FMEA) for the hardware / software boundary, and implementing appropriate diagnostics to mitigate risks
- Collaborate with cross-functional teams to ensure high performance of software modules
- Engage in pair programming, code reviews, and design discussions to maintain high coding standards
- Test your software with and without hardware, implementing the appropriate virtual fixtures where it saves time and aids in automation
- Strive for the simplest possible, most easily testable software design, to make unit- and integration-test coverage seamless
- The ability to optimize code for a true RTOS on a microcontroller as well as for PREEMPT_RT Linux, and to design protocols between these environments, is especially valuable for this role
- Bachelor’s, Master’s or Ph.D. degree in Computer Science, Computer Engineering, Electrical Engineering, or a related field
- Ability to implement and optimize control loops that integrate servo drives
- Ability to write real-time C / C++ on a bare-metal embedded system, or with FreeRTOS / SafeRTOS / QNX
- Strong proficiency in modern C++ (at least C++11) is a must
- Prior experience working on mission-critical software
- 5+ years deploying and testing Linux software and RTOS or bare-metal firmware environment
- Prior experience with medical device development is a plus
- 5+ years of developing C++ robotics software that interfaces with hardware
- Working knowledge of typical embedded protocols (I2C, SPI, CAN, etc.)
- Ability to read electrical schematics in collaboration with PCB design engineers
- Experience with some formal software or motion control safety standard (e.g., ISO 26262, IEC 61800-5-2), and/or software verification by an independent safety certifying body, is advantageous
- Experience with motor control for serial robotic manipulators is preferred
- Experience with CANOpen (DS-402) servo drive control, or EtherCAT, strongly preferred
- Experience with kinematics and rigid-body dynamics is helpful for collaborating on control algorithms which use the servo drives that you integrate
- Ability to analyze latency and jitter of high-frequency data in a distributed system
- Ability to independently implement Linux user-space drivers and custom wire interface protocols for controls data. (Kernel development experience is not required, but you should be comfortable designing a servo drive control daemon from scratch.)
- Ability to thrive in a fast-paced, dynamic work environment and adapt to new challenges
- Strong analytical, problem-solving, and organizational abilities
- Good communication skills to collaborate with interdisciplinary teams, including software engineers, electrical/mechanical engineers, and product managers
- Comfortable working in a lab or workshop environment alongside surgical robotic systems
- Ability to work on-site for hands-on software integration
