I lead the engineering effort of Argos, an internal data visual tool for Rivian that provides tools to analyze signals in vehicle logs and show a 3D environment recreated from the log data. This tool also allows for spoofing data which provides an easy interface for engineers to simulate scenarios. This functionality, combined with a small and agile team, make Argos the ideal testing ground for new feature development for self driving.

This tool was originally intended for serving the self driving team, but because of its simplicity and effectiveness it is now being developed for additional teams across the software organization.

Screenshot Testing Framework

At Rivian I was tasked for developing a screenshot testing framework for our 3D visualization team. Since then, my framework has started being adopted for all features across the driver display system. This pytest framework integrated tightly with the vehicle display system to simulate a timeline of vehicle signals and take subsequent screenshots. These screenshots could be compared to the feature's ground-truth images to ensure there were no regressions. This framework not only reduces regressions that come from new development, it will also greatly speed up the QA process and help put the integration engineers at ease.


RMStudio map

Optio is a distributed software solution for the manufacturing industry. The software solves multiple crucial headaches for managers such as Work in Progress (WIP) tracking, material handling, and real-time analytics. Many existing softwares in this domain are old and clunky and so we put emphasis on a clean and easy to use interface that enables powerful tools in a simple and intuitive way. 

The project was conceptualized by myself and two other talented engineers. Although I played roles in the entire stack, I was primarily focused on data analysis, AI optimization algorithms, and frontend design. The team has since by 300% and the software is now deployed at multiple US manufacturing sites, leading to an efficiency gain of up to 40% for our customers. 


As part of a NASA SBIR grant, I was lead engineer of the Simon project, a manipulation-in-the-box solution that allowed users to configure tasks for robotic systems (with no coding) and endow them with the ability to reason through complex sequences of actions. This dynamic non-programming platform combines adaptive behavior trees with a STRIPS-like planner to intelligently utilize a breadth of modular actions in order to reach a desired state. 

When humans are given a task to accomplish such as “place a lemon on the table,” we subconsciously plan the task backwards to determine the actions we need to take. To place a lemon on the table, we first need to walk to the table with a lemon. To walk to the table with a lemon we first need to have picked up a lemon. To pick up a lemon we need to… and so on. This is the inspiration behind behavior trees, and is a concept that we successfully implemented with our application.

Simon Tree visualization

Our small team consisted of myself, a robotics software engineer, and one other full-stack engineer. As project manager, I was responsible for managing my fellow engineers, development, and ensuring that the application stack integrated seamlessly with our RMLib modules. 

The React frontend was built on D3, allowing the graphical flexibility necessary to display the tree-like structure that our applications took the shape of. The backend was built on Flask with a MongoDB database. Our backend was strongly interconnected with our RMLib library, which added an extra level of complexity to integrate a web application with hardware endpoints. 

Simon node editor


Robot stocking grocery shelves

RMLib is a proprietary robotic programming library. Myself and one other engineer developed the library which includes tools for robotic arms, autonomous carts, computer vision, machine learning, and more. The software is currently utilized in multiple robotics labs at universities in the US and abroad. 

The unique structure of RMLib allows programmers to mix-and-match different robotic components; a build-your-own robot solution. This method required meticulous planning of how different hardware components work together and how to best modularize the methods to accomplish this goal. The library is written primarily in Python and contains multiple C++ packages for more complicated algorithms. RMLib is also utilized in both the Simon project as well as our Robotic Integration Backend for RMStudio at a couple of our customer sites.

Robot Kitting task

Nitinol Gripper

My first experience at Robotic Materials was inventing a gripping end-effector for robotic systems, and so when the opportunity presented itself to work with Festo to create a Nitinol gripper for my mechanical engineering senior design project I jumped at the opportunity. I was the technical project manager for this project, responsible for overseeing the mechanical, electrical, and software development efforts of the product in our team of 7.

Nitinol gripper rendering

The mechanical design consisted of in-depth Solidworks designs, structural FEA analysis, and motion studies. We went through multiple design reviews as well as a manufacturing review before machining all our aluminum parts in-house. The design needed to convert the tension and compression of the shape memory alloy (SMA) into mechanical force in order for the gripper to grasp. We designed a custom PCB to control the heating, and a fan to speed the cooling process to return the SMA to its resting state.

The electrical component of this project required a custom PCB that would regulate the heat of the SMA with extremely low latency. As the SMA wire was heated and cooled, the resistance would change - which introduced the complexity of maintaining a set current while the resistance fluctuated.

The software design was relatively simple. The PCB was controlled with an Arduino, so the software needed to take user input and relay the information to the Arduino for "open gripper", "close gripper", "set gripper width", as well as a couple other commands. The firmware read these commands over a serial interface and converted them into the appropriate analog outputs to the PCB.

This was a very rewarding project that has since been patented with Festo. Although I don't expect these grippers to go into production, I believe it was a step forward for the uses of shape memory alloys and I am interested to see what applications they will be applied to in the future.

Nitinol gripper schematic