
Sr. Software Engineer, Middleware, Autonomy
Rivian
Job description
As a Software Engineer specializing in safety-critical self-driving middleware, you will play a vital role in the design, development, and deployment of software that underpins essential self-driving features. Your responsibilities encompass a range of technical tasks, from software development to architecture analysis, all contributing to the successful implementation of robust and reliable self-driving solutions.
-
Design, develop, and deploy software within hardware abstraction middleware to enable safety-critical self-driving features
-
Develop software working on Linux as well as real-time operating systems (QNX, FreeRTOS, etc.)
-
Develop software working on a distributed and heterogeneous system (multiple processors/HW engines)
-
Develop necessary tools to support development, debugging, and testing
-
Assist in software-design and code reviews while assisting other developers on technical issues, design choices, and decision making
-
Analysis of requirements, architecture, design, development, code review, quality assurance, and deployment of entire software engineering life cycle
-
Coordinate with application development and cross-functional teams to enable and support middleware integration
-
B.S. / M.S. in Computer Science, Engineering, or a related field
-
5+ years of experience developing production-grade software from requirements gathering
-
Strong C++ programming skills
-
Familiarity with at least one scripting language (for example Bash, Lua, Python)
-
Experience in automotive or robotics software development
-
Experience in software development for x86_64 and ARM architectures
-
Experience working on heterogeneous systems with various types of hardware accelerators (GPU, ISP, Encoder, etc.)
-
Experience using and/or building libraries for hardware accelerators (CUDA, TensorRT, OpenCL, etc.)
-
Experience contributing to middleware and/or building abstraction layers
-
Familiar with OpenCV, OpenVX, or relevant acceleration frameworks in perception applications
-
Experience contributing to software tooling (for code auto-generation, test automation, fault injection, etc.)
-
Good team player with great communication skills to drive cross-functional efforts in a fast-paced development environment
-
Passionately motivated to take ideas from R&D phase to a product
-
Software Development life cycle experience: from requirements gathering through to implementation and maintenance.