Select Page

F19 – 51 Integrated Cleaning and Inspection Pig Localization Test Bench


In the oil and gas industry, it is often necessary to clean and inspect pipelines. This is done using what is known as a pipeline “pig”. A standard pig is often made from polyurethane and is meant to travel the length of the pipe and remove any debris or buildup. There also exist “Smart” pigs, which can scan the pipeline walls for corrosion or cracks. The issue with these pigs is that once a defect is found, it is often hard to distinguish where in the pipeline it occurred. Since most of these pipelines exists underground and are made of steel, it is likely that many places in the pipe are unable to receive GPS data. Therefore, a different method must exist for keeping track of the pig inside the pipeline, and that is what our solution focuses on. 

Our prototype makes use of what is known as an Inertial Measurement Unit (IMU), which contain both accelerometers and gyroscopes. By collecting acceleration and gyroscope data while the pig travels through the pipeline, we can perform a series of integrations to determine the position of the pig. However, this method alone is usually not accurate enough to give a good approximation of position. Our solution also makes use of a proximity detector, which can detect small changes in the distance to metallic object. By combining this data with our IMU data, we can perform multiple runs and using resampling techniques, are able to combine the position data across all runs in order to get a better approximation.     

Team Members

  • Alex Cieslewicz – Electrical Engineer
  • Carson Crooks – Electrical Engineer
  • Jack Deer – Mechanical Engineer
  • Nathan Giefer – Mechanical Engineer
  • Kamren McKee – Mechanical Engineer
  • Matthew Pollmiller – Electrical Engineer 

The Client

  • Craig Champlin 


We would like to thank our client Craig Champlin for all his guidance and for providing us with the opportunity to work on this amazing project. We would like to additionally thank Marcus Florida, our PA, for his input and endless support throughout the duration of this project



Elevator Pitch

Please Enjoy our Elevator Pitch!

Design Approach

The design approach for this project breaks down into three categories: test vehicle, test bench and code development. Each area had different challenges and different steps along the way to reaching the final solution. For each, the design decisions were driven by testing, development and client feedback. None of the initial designs from the beginning of the fall semester made it to the end without major adjustments.   

Test Vehicle Design  

The test vehicle went through many changes and iterations throughout the course of the project. We had originally planned to have a person drive the vehicle. We found that a human driver left to much uncertainty in the path of the vehicle. To achieve a repeatable path, we replaced the human driver with a pin and slot systemlike what is found in a slot car.  

The selection of sensors, micro-controllers and battery packs where a vital part in the vehicle design. Working with the client and using information from past groups, we determined the use of an Inertial Measurement Unit (IMU) would be the most appropriate sensor to collect localization data. Proximity sensors where determined to be best option to collected data from the steel portions of the track to pair with the IMU data. The next step was determining what micro-controllers would provide the most efficient methods to store the data and drive the motors. A Raspberry Pi was selected to collect data from the IMU and was paired with an Arduino that drove the motors and proximity sensorsWith the type of components selected, the next step in the design process was to design a sensor platform.     

The stock platform on the test vehicle was not large enough to support the multiple components needs for data collection. A design was developed with each sensor in mind. Our sensor platform design had the needed space for each IMU, proximity sensor, controller and battery pack, while keeping the weight equally distributed across the vehicle frame.   

Mechanical Test Bed (Track) Design   

The test track went through many conceptual changes before the final version was built. Due to limited materials, there was only one opportunity to build a full-scale test track. Initially, the whole track was going to be built from steel, but due to cost, issues with storage, transportation and fabrication that idea was quickly set aside. Working with the client, it was determined that a wooden track with the slot design to match the pin on the vehicle, with sections of steel, would be more fitting with the localization aspect being of greatest importance. A modular design was also important so that the test bed could easily be moved to different locations and arranged in different shapes.    

Code Development  

There are two distinct sections of the software in this project. First, the raw data from the sensors is collected and stored for processing. Second, there is the localization algorithm that estimates the position of the test vehicle using the raw acceleration and gyroscope data. At the start of the project, the team overcame multiple challenges when interfacing the sensors with the Raspberry Pi. A successful implementation was completed by the end of the first semester. 

The next challenge was data processing. Determining the vehicles position from raw acceleration and gyroscope data was a difficult challenge. After examining several approaches and working with advisors, the team settled on the final approach of integrating the acceleration data to obtain a position. In addition, the gyroscope data was combined in order to orient the test vehicle in 2D space. This position data was then resampled and combined across 10 runs in order to provide a better estimation. 

Design Solution

Mechanical Test Bed  

Our test bed meets the requirements given by our client. Firstly, since we designed the track to be modular, it can be rearranged quickly to change the overall track layout. Additionally, this allows the track to be stored in a reasonable amount of space when it is not being used.  The simple design structure also allows for additional pieces to be fabricated and added. This 40-foot section was made with only one standard sheet of plywood and a couple 2 X 4s. The final track solution can be viewed in the photo gallery. 

Test Vehicle    

The RC car that housed the sensing equipment and provided transportation around the track also met our design requirements. It allowed for data collection on multiple loops around the track and collected data as designed. The frame of the RC car is the original store-bought frame, but the team added in several holes for the pins and platform. The platform is designed in three sections. Section one is the proximity sensor housing which was designed to fit three proximity sensors on the side of the vehicle. The main section sits on top and stores the four IMU sensors and two controllers. The third section houses the two batteries used to power all the components and is located on the opposite side of the main section. This was designed to keep the vehicles weight centered and allows for the proximity sensors height to be easily adjusted for any thickness of steel. Being designed in 3 separate sections, it is not necessary to change the whole platform if a section breaks or if new sensors need to be added.   

The path system was designed so that two pins were in contact with the track. The portion that contacts the track has four small bearings to reduce friction. The upper portion of the pin is attached to the metal frame as well as the sensor platform to provided added stability and strength.  The images provided are from the first full scale testing.  

Code Development and Implementation  

First, the sensors go through a setup process that ensure they are collecting the correct data with the correct units. Next, a main loop runs at a rate of 50 Hz that collects the data from the Xsens IMU, Sparkfun IMUs, and the proximity sensor. The Raspberry Pi communicates to the Xsens IMU via USB, and to the Sparkfun IMUs and Arduino via I2C communication protocol. At the end of each loop, the data is output to a CSV file to be transferred to the localization code. 

The processing portion of the software was done using MATLAB; however, the code could be adapted to any platform if needed. The raw acceleration data is integrated twice to estimate the test vehicles position. The gyroscope data is integrated once to obtain the angular position of the vehicle. The angular position is combined with the vehicles spatial position to produce a final estimate in 2D space. The timestamp of the data is used to combine the proximity data with the calculated position.

Collected Data 

The team was able to collect one set of data before COVID-19 shut down all testing for the semester. The data set included 10 laps around the track, collecting data from both the IMU’s and proximity sensors. The results from these tests are seen in the photo gallery. Image 3 shows the raw data collected from the IMU’s and each refinement to a velocity and position plot. In the Estimated Position plots, images 1 and 2, the start and end do not match up. This spiral is what the team expected and validates our results and localization algorithm. Future research will build upon these results and examine techniques to close the loop.  

Next Steps

The following steps for this project will include building off the results we have obtained and developing a method to correct for the open loop nature (where the start and end positions no longer line up). All code and hardware that has been developed will be passed along to our client to ensure a smooth transition and allow further refinement in the future. Our work will support a follow up project whereby a future team will build an actual in-pipe robot leveraging our techniques for an in-depth analysis of internal pipeline corrosion.  

Meet the Team

Nathan Giefer

Hi! I am Nate. I am a senior studying mechanical engineering. I am also a pitcher on the Oredigger baseball team. I started my academic career at Western Nebraska Community College in 2015 and transferred to Mines in 2017 to earn my B.S. Outside of school and baseball I enjoy being outdoors, hiking, fishing and skiing. 

Alex Cieslewicz

Hey, I am Alex. I am currently a senior studying electrical engineering with a minor in computer science. After graduation I am planning on continuing my studies by pursuing a Master’s in Computer Science. Outside of academics I enjoy gaming, skiing and playing the piano.

Carson Crooks

Hi! I am Carson (and that’s my dog Heidi) . I am currently a senior in electrical engineering. Outside of school I enjoy wildlife photography and collecting vinyl records.

Jack Deer

Hello I’m Jack. I am a senior Mechanical Engineering student with a minor in Robotics and Intelligent Systems. After Graduation I plan on working with Fast Enterprises as a code developer. I enjoy watching sports and hanging out with my friends in my free time. Earlier this spring i suffered fro a brain bleed that caused me to be put in the hospital. I am expected to make a full recover while finishing recovery at Craig Hospital. 

Kamren McKee

Hello I’m Kamren. I am a senior Mechanical Engineering student with a minor in Robotics and Intelligent Systems. After graduation I plan on working in the petroleum sector. In my free time I enjoy hiking, hunting, fishing, and working of cars. I was born and raised on the western slope of Colorado in Grand Junction but will be moving to Texas this summer for work.

Matthew Pollmiller

Hi, I am Matthew. I am currently studying Electrical Engineering. After graduation, I will pursue a Masters degree in Electrical Engineering with a focus on Information and Systems Science at the School of Mines. Outside of school, my hobbies include swimming and weightlifting.