Senior Embedded Software Engineer - Linux
(Rockville, MD)
You will be working with the Robotics and Electromechanical Systems Group to develop custom solutions in the fields of Robotics, Autonomy, Human-Machine Interface, Machine Vision, and Electromechanical System Design.
We have numerous active research and development projects where we design, integrate, test, and deploy systems for a range of applications, including aircraft inspection, ISR (intelligence, surveillance, and reconnaissance), utility construction, medical training, IED/EOD operations, and simulation. We are looking to add expertise and talent to our multi-disciplinary team to continue to achieve success in all of these areas.
JOB DUTIES
• Work closely with algorithm developers, and/or lead algorithmic development, to mature algorithms from MATLAB and C++ to real-time applications.
• Work closely with and/or lead FPGA engineers developing architecture/protocol to exchange control/data between ARM and FPGA using shared registers/memory, DMA/VDMA.
• Utilize and/or modify existing code bases and libraries; create and shape new functionality.
REQUIRED EXPERIENCE
• Bachelors or Master's degree in Electrical Engineering, Computer Engineering, Computer Science, or related field.
REQUIRED SKILLS
• Knowledge and hands-on experience of Linux system software development with build configuration and customization. Bonus for familiarity developing on any embedded Linux.
• Installing and configuring embedded Linux, i.e. U-Boot, FSBL, Drivers, Frame Buffer
• Multi process/thread programming using techniques like Boost, C++11, and ASIO event driven when relevant.
• Toolchain & Compiler/Cross-Compiler Technologies for ARM/X86/X86_64/BareMetal
• Inter-System communication over TCP/UDP, Serial Interface
• Integration with common external interfaces such as I2C, SPI, UART
• Write clean, efficient, well-documented code
• Proficient with SCM tools such as SVN, GIT, and Mercurial
• Strong written and communication skills
DESIRED SKILLS
• Comfortable with common classic signal processing and/or image processing algorithms
• Understands challenges of developing an application that processes in real-time.
• Familiar with setting up a cross compiler such as Linaro or the Xilinx/Petalinux SDK.
• Comfortable with platform independent tools such as CMAKE and QMAKE.
• Experience with other programming languages, such as Java and Python.
• Proficient optimizing ARM software using NEON
• Experience with prototyping, integrating, testing and deploying electromechanical systems
• Profile/Optimize software to select/meet target platform
• Experience prototyping software based on conference/journal publications
US Citizenship or Permanent Residency required