top of page
alpahbot_on_rails.jpg

Alphabot Dynamics Library

Overview

Walmart Advanced Systems and Robotics (WASR) has developed The Alphabot, a wheeled robot that operates within a structure of aisles and channels to create an Automatic Storage and Retrieval System, increasing online order throughput for Walmart. Walmart ASR’s controls team designs and implements the controllers that allow the bot to traverse the structure. Controller tuning alone requires 80 engineering hours, and support from other teams. If a bot’s controllers fail in the field, it can lead to a system-wide shut down, halting production until the bot is recovered. Methods of control exist that can improve Alphabot’s performance, but they rely on system models. This project aimed to develop dynamic models of the Alphabot to improve the control team’s workflow and enable advanced control methods to decrease faults in the field.

The project’s key deliverables were dynamic models of the Alphabot, and software for humans and the Alphabot application to interact with them. I designed an internal software package that enabled users to add faults, noise, and controllers to a model, run a simulation with field data, and analyze the model’s performance with classical and modern control methods. The external software provided the Alphabot's control logic with real-time estimates of the bot’s state during run time, laying the foundation for model-based control. The models were the first of their kind at WASR. The drive wheel model accurately predicted the motor and controller dynamics, enabling offline motor tuning with the internal software package. The no-slip model described the bot's motion under pure-rolling conditions, aiding in identifying slip instances from field faults, and the slip model identified slip instances and accurately described the bot’s response.

The Alphabot Dynamics Library's (ADL) internal software package saved 5 hours per user per month on the Controls Team, yielding annual savings of $75,000 on Controls team labor. The ADL’s use saved 20 engineering hours on controller tuning and 5 hours per month on fault diagnosis. These time and cost savings enable Walmart ASR to increase investment and development time into the Alphabot system. The project delivered these benefits with a 40.5% return on investment and set the stage for greater returns. In the future, a model-based controller can be designed and implemented in the ADL’s internal and external toolboxes, respectively. If MBC reduces slip-related faults by an arbitrary 5%, a 2% increase in throughput is expected fleetwide.

segway_block_diagram.png

Segway Controller Design 

Scope

The purpose of this project was to design and test several different types of controllers (PID, Lead-Lag, Full State) , in an effort to stabilize a standard Segway in the presence of a step and impulse disturbance. Simplifications were made to linearize the dynamics of the Segway, using the small angle approximation to remove nonlinear terms from the governing equations. Transfer functions were derived from the input reference angle, (0 deg) and the disturbance (rider leaning forward), to output states of angular position and velocity, and linear velocity. With this representation of the system, a PID and lead / lag compensator were designed to correct the transient and steady state responses.

The design process for the PID controller started with using Routh's Array to determine constraints on the integral, proportional, and derivative gains. Numerical solutions were used to find suitable values for the integral and derivative terms, leaving the proportional term free. A root locus plot was then made of the free term to see the possible closed loop pole locations, using it to choose a satisfactory proportional gain.

To design the compensator, the lead portion was constructed first, as it has the most significant impact on the poles of the closed loop system. A desired pole location was chosen on the complex plane, and the angle deficiency was used to determine the placement of the pole and zero of the lead compensator. The magnitude condition was then used to determine the k required to achieve the desired pole location. The lag compensator was designed to minimize the velocity error constant of the system, placing the pole and zero close enough to the origin to avoid significantly impacting the locus. 

The final controller tested was a full state feedback controller. The design of this controller required converting the transfer function representation of the system into a state space representation. The controllability and observability of the system were confirmed using the rank of their respective matrices. The place() function in MATLAB was used to determine the required gains to achieve the user-selected poles.

After testing each of the three controllers, it was found that all of them succeeded in the general goal of stabilizing the system in the presence of a step and impulse disturbance. However, the process revealed the advantages and disadvantages to each design process. The PID controller could be considered the "simplest" in the sense that it required the least amount of modifications from the original transfer function representation, and its implementation required a basic understanding of systems as opposed to the other two controllers. However, the tuning process was arduous, and provided little control over pole placement. The higher order compensator allowed for two separate controllers to be cascaded, each designed to tackle the issues of steady state error and transient response. Segregating the purpose of the controller into two groups made it easier to design for desired criteria, and the ability to directly control the poles and zeros of the controller was very useful. Ultimately, the state space representation provided the most efficient method of controlling the system. Once the system was put into a state space representation, much of the heavy lifting to determine the control law was performed by MATLAB's place() function, allowing the user to choose their desired poles and run a simple script as needed. 

IMG_1021.jpg

Active Humidity Control System with Server Oversight

Scope

The purpose of this project was to develop a cheaper, more effective method of active humidity control, while replacing the 3rd party system being used to monitor the performance of several humidity controlled environments. Powered by a RaspberryPi, making use of a solenoid valve, dry air line, ultrasonic humidifier, relay board, XPT 2046 touch display, and a DHT22 sensor, I was able to develop a control system with an average offset of .45%, amplitude of .84% , and recovery time of 1:39.

Throughout my time spent working on this project, I was introduced to many new aspects of engineering and the engineering design process. This includes control loops, experimental design + testing, calibration curves, fasteners, circuit design, measurement devices, 3D printing, laser cutting, and general construction methods to assemble my final product. 

This project sparked a great interest in programming, which used to intimidate me, to say the least. I learned python on the fly, and over the course of five months I developed a control loop program, a touchscreen GUI, as well as a rudimentary server program that collected data from multiple control systems. A few of the significant libraries used to accomplish this include threading, socket, tkinter, matplotlib, adafruit, pandas, and numpy. 

initialsetup.jpeg

Homemade Charcoal Forge

AN APPLICATION OF IN-CLASS KNOWLEDGE

Scope

The purpose of this project was to build upon what I learned in my Material Science class. I challenged myself to construct my own forge in my backyard, making use of fire brick, a heat gun, black steel piping, and a 15lb cast iron anvil to complete a functional forge setup. Then, using stock rebar, I drew out the face of a small knife, ground out the edges and bevel with an angle grinder, quenched in vegetable oil, and tempered in an oven.

simulink_diagram.png

Position Control of Physical + Simulated DC Motor

USING MATLAB AND AN ARDUINO UNO TO CONTROL THE POSITION OF A DC MOTOR

Scope

The purpose of this project was to create a mathematical model of a DC motor, and then design and implement a position controller in both Simulink and real world experiments. A 1-turn potentiometer was used to control the magnitude of an analog input signal that determined the commanded motor position. The motor returned encoder readings to the software, which converted it into position values. A high pass filter was implemented in MATLAB, and uploaded to an Arduino Uno to differentiate position and estimate motor speed. The direction change of the motor was made possible via an H-Bridge, and the quadrature encoder already built into the DC motor. The interface between MATLAB and Arduino was accomplished with the “Simulink Support Package for Arduino Hardware” Add-In. 

After a mathematical model of the motor was developed, hardware experiments were performed to determine the rise time, Tau, and DC gain, K, of the motor. The motor’s datasheet was referenced as needed to calculate motor constants. Once these values were known and the motor’s output could be predicted, the potentiometer signal was used as the input voltage to the motor, and a simple, yet effective p-controller was used to minimize error. 

Real world experiments yielded a rise time of .21 seconds, and a steady state angular velocity of 3.33 radians per second with a step input of 7.5 V. The controller used had a proportional gain of 250, and minimized steady state error to .02 radians. 

woodwork.jpg

Woodworking

A CONTINUOUS DOCUMENTATION OF MY WOODWORKING EXPERIENCE

bottom of page