We build systems for autonomous (computing) machines, which include but are not limited to drones, autonomous cars, and ground service robots. Our group explores solutions across the system stack, spanning from applications down to the hardware running the code. More specifically, we look at how an autonomous sytem, such as a robot, interacts from the application down through the hardware stack with its environment (as shown below).
We start by building end-to-end benchmarks, which are representative of real-world applications. We need benchmarks because real-world applications are usually too complicated for systematic and reproducible research, so we distill the applications into small and manageable benchmarks that capture the essence of the real-world application. These benchmarks become the starting ground for our system-level design. We examine these (micro) applications to determine their computational bottlenecks on existing systems and use that information to guide the design of future systems. We build simulators, analysis tools, and profilers, and use the insights we gather to guide the design of hardware and system software.