Senior Camera Software Engineer at Brain Corp (San Diego, CA)
We are Brain Corp and we build brains for robots. We set out to create the most intelligent tools ever, and now, we power the world’s largest fleet of robots operating in commercial public spaces. By injecting intelligence into machines from trusted manufacturers and our customers' operations, we are able to transform manual operations into automated workflows, making the lives of people safer, easier and more productive. Our robots are running around thousands of stores, schools, warehouses, hospitals, offices, airports and more, solving practical challenges with revolutionary solutions. For more information on how we are turning robots into tools that serve a purpose and to learn how you can become a brainiac, please visit: https://www.braincorp.com/.
As a member of the Software Engineering team, the Senior Camera Software Engineer is responsible for developing/integrating camera software and tuning camera image quality on Linux platforms with solid expertise developing production ready C/C++ code. This engineer will be working at the operating system and application layer running on many of Brain’s robots. These robots solve complex, real-world problems. As a core member of our Software Division, the Senior Camera Software Engineer will work with our world-class team of engineers and scientists to build a platform for the next generation of intelligent machines. Their experience will be pivotal in advancing our mission: safe and reliable robots everywhere.
Duties and Responsibilities:
- Develop and integrate camera drivers on Linux/ARM platforms.
- Tune image quality on various image sensors and ISP platforms.
- Design and develop new camera features, debug issues from either hardware or software, optimize software for performance, develop unit tests, and work with our partners and OEMs.
- Evaluate camera HW solutions and identify the optimal solution based on cost, performance and other requirements.
- Deliver software features/functionality that increases customer value and product scalability.
- Increase the agility/ software release frequency of the team and organization through code refactoring, simplification, and removal.
- Review performance metrics of the production fleet as a key indicator of customer experience from which to identify software product improvements.
- Coordinate with cross-functional areas of expertise including hardware, firmware, platform, user experience, quality, and cloud engineering to deliver world-class customer value.
- Remain up to date with developments across platform, navigation, and other robots, in order to leverage and contribute towards software innovation across all products.
- Help set and execute on the technical roadmap for our robotic product lines.
- Other duties and projects as assigned.
What you need:
- Bachelor of Science degree in computer science, software engineering, or a related field.
- Experience with Linux kernel and device driver development.
- Experience with image quality tuning and knowledge of image sensors, ISPs and 3A (auto exposure, auto focus and auto white balance).
- 5+ years experience writing C/C++ applications for Linux.
- 5+ years of experience in system level software design across all stages of the software development life cycle.
- Ability to provide technical guidance to other members of the team by providing clear architecture definitions and designs in addition to providing feedback in code reviews.
- Solid understanding of Linux kernel and device drivers.
- Experience with multi-process and multi-threaded applications.
- Experience working with operating system fundamentals: file systems, interprocess communication, computer networking, system calls, system resources, etc.
Things that make a difference:
- Master of Science degree in computer science.
- Experience with GPU, video encoders, DSPs and display.
- Knowledge of systemd, udev and other configuration sub-systems used on Ubuntu Linux.
- Library design with special attention paid to modularity, composability, and clear, intuitive interfaces.
- Experience architecting, designing, implementing, testing, and debugging complex software subsystems.
- Extensive experience designing for ease of testing, both at the unit level and integration test level.
- Cmake or other build systems.
- Good working knowledge of robotics and surrounding systems.
- High-performance computing, SIMD, CUDA, OpenCL.
The physical demands described here are representative of those that must be met by an employee to successfully perform the essential functions of this job. Reasonable accommodations may be made to enable individuals with disabilities to perform the essential functions. Essential functions may require maintaining the physical condition necessary for sitting, walking or standing for periods of time; operating a computer and keyboard; talk and hear at normal room levels; using hands to finger, grasp, and feel; repetitive motion; close visual acuity to prepare and analyze data and figures; transcribing; viewing a computer terminal; extensive reading; lift, push, carry, or pull up to 10 pounds.
The work environment characteristics described here are representative of those an employee encounters while performing the essential functions of this job. The noise level in the work environment is usually quiet to moderate. Employee is exposed to the typical office environment with computers, printers and telephones.
Additionally, all employees are subject to our COVID-19 vaccination policy, requiring vaccines for those employees working in the office or interacting in person with customers. Our policy also includes exemptions for those with sincerely held religious beliefs against the vaccine, and for those with a medical condition or disability that prevents them from receiving the vaccine. For further information about our vaccination policy, please contact [email protected]