top of page

11/2020 – present

VIAM is a robotics platform composed of hardware, open-source software, and cloud services revolutionizing how quickly and easily practical robots can be built. I currently work as a Robotic Engineer leading researching and designing efforts in sensor and hardware work for VIAM's robots. 

Sensor Development

In order for robots to adapt to their environment a robot’s hand needs to be able to grasp and operate a variety of objects. To perform these operations tactile sensors are required to obtain information regarding contact position, force, and slip. While at VIAM I worked on designing various sensors that were implemented and tested by VIAM and external robotics companies. 



Provide a robotic gripper with better tactile feedback on its surroundings by providing force mapping applications and slip detection.


Force sensing resistors (FSRs) exhibit varying resistance as a response to the force applied.  A Force sense matrix consists of an array of resistors individually actuated through the row and column intersection. Force-sensing resistors are relatively common and robust tactile sensors. Unfortunately, if one wants to use a force-sensing resistor matrix, one either needs to choose from the limited FSR matrix on the market or get expensive custom-made sensors from different manufacturers. I decided to learn how to design and drive our own FSR's to optimize the shape and behavior for our robots.  

Learn how to make your own sensor! How to make a Matrix Pressure Sensor


To read the change in resistance of the FSR’s going into an ADC, we need to convert the current into a voltage. The simplest way to do this is with a voltage divider. Using a voltage divider alone, though, will be problematic. This is because, typically, the input impedance of an ADC is low, so the values from the voltage divider will be affected by this. Op-amps are a way to convert a high impedance input to a low impedance input and thus not affect the behavior of an ADC. Trans impedance op-amps convert current to a voltage just like a voltage divider while exhibiting more uniform/ideal transfer functions and providing a virtual GND to eliminate cross-talk. Because our trans-impedance op-amp is dual supply, Vout will be negative, so we have to send Vout through an inverting op-amp to get a value the ADC can interpret. 

This hardware integration was incorporated into VIAM's motor driver board which can be found here  


Screen Shot 2021-08-23 at 1.25.59 PM.png

Create a sensor that can distinguish between pressure and slip using a discrete wavelet transform.


Three different sensor designs were tested against two different conductive rubbers.  The rubbers were applied over the spiral conductive pattern. The sensor was connected to a 1kohm resistor to create a voltage difference read into an analog pin on an Arduino. I created a slip algorithm using Discrete Wavelet Transforms (DWT) in Python with Matplotlib used to distinguish between pressure and slip. In order to find when slippage occurs, we need to look at when a certain frequency threshold is met. The Fourier transform only tells us the frequency but not the region of time the frequency has occurred; we use the DWT to help describe our signal in both the time and frequency domain.

Note: The sensor was developed based on the work done at UEC Shimojo Laboratory.


Figure: Plot demonstrating the difference between slippage with pressure vs. pressure that is picked up from by using a DWT.


The Inaba Rubber (the conductive rubber used by UEC Shimojo Laboratory) was noted to have different properties than the research performed in 2011. Since the pressure-sensitive conductive rubber is crucial for the slip sensor, without having/knowing the specific properties of rubber from UEC Shimojo Laboratory, it is near impossible to reproduce the sensor results correctly. The Python script also had issues reading the analog values from the sensor from the Arduino due to buffering problems, but when delays were added into the Arduino script, data collection was slowed down significantly. The university that produced these results was sampling at a frequency of 10kHz and collecting 64 data points at this time. The Arduino can only output data at a rate of 8.9kHz, and adding delays to deal with the buffer made this even slower. We would need to improve the data collection speed further, but that wouldn't solve the unknown conductive materials property issue. Thus it was decided to stop further research in this approach. 

Motor Driver Board

I designed and built a motor driver PCB in order to drive a planetary brush dc gear motor and sensors inside VIAM's gripper. Several versions of the motor drive board can be found below.


Check out a reference manual for one of the PCB's here!  

Version 2
Version 1
Version 2
Version 1

I designed a passive Power over ethernet board (PoE) for the Raspberry pi 3B + onward. This PoE board uses passive PoE and allows for both powers to the Raspberry pi as well as a separate power supply to external devices at 12V 5A. The board features a bridge rectifier to prevent damage from different passive PoE injectors. Several Versions of the PoE board can be found below.

Check out a reference manual for one of the PCB's here

Power Over Ethernet Board

name for ring.png
bottom of page