WSU Senior Capstone: Project Lead and Programmer

A group project sponsored by Los Alamos National Lab

Project Definition

Los Alamos National Lab (LANL) looked to automate the scanning of decommissioned radioactive material. Their goal was to accomplish this using the Spot robot, with associated robotic arm, from Boston Dynamics and an attached gamma detector.

Project Scope

Create an algorithm that can accept a point cloud of a common. simple object (as shown) and create a path for the robotic arm and gamma detector around the object.

Team Dynamic

Team Member

Role(s)

Responsibilities

Ashley Sande

Note Taker

Documented group progress for the final report and worked as the secretary for group and client meetings.

Jakob Darrow

Evaluator/Coordinator

Ensured each member was on track with individual tasks and coordinated meetings with the group and client.

Kyle Appel

Critic/Monitor

Evaluated solutions for feasibility and implementation. Compared each step to the goal of the project.

Petra Jonson

Leader/Implementer

Project organizer and primary developer. Led all software implementation, development, and organization.

Shea Cooke

Implementer/Resource Investigator

Implementation of Point Cloud Library. Primary contact with external resources and code libraries.

My contribution and details on role

Project Lead, Implementer, Task Organization and Assignment, Timeline Generation

As the project lead and implementer, I was in charge of breaking down the project into reasonable, manageable tasks and designing the software that is described in the methodology section below. Leading often took the form of whiteboard discussions where I would explain ideas and query the group for theirs. After idea generation, these would be broken into tasks that could be accomplished prior to the next meeting where I would assign each to a group member. When questions or concerns arose, I was the primary contact to work with and solve the problem.

Progression and Problem Solving

Identifying the Problem

Identification of the Problem

As a group, we would each ideate to find various questions we had and important points regarding the project as a whole.

Discussion of Individual Points

Each member took turns discussing each point they found and ensured that the entire group was in agreement.

Organization of Thoughts

These thoughts were organized based on categories such as logistical, hardware, software, etc. Repeated ideas and comments were discarded.

Organization and Planning

Task organization, planning, project criteria, and problem defining

The capstone team utilized excel heavily. Two primary examples include the Gantt chart (shown above) and the modified House of Quality (HOQ, shown below) from the quality function deployment (QFD) methodology. The Gantt chart allowed us to organize major tasks and benchmarks along the way and the HOQ helped to compare the expectations of LANL with how these could be realistically implemented. These were all rated in how they impact one another on the bottom of the HOQ and how each correlated to one another on the top of the HOQ.

Methodology, Approach, and Solution

Step 1: Isolate the planes and find the normal equation*

*Plane isolation using Point Cloud Library and normal equation determination using Python RANSAC code was written by Shea Cooke and Kyle Appel, respectively

Isolate a single side of the object

The Point Cloud Library was utilized to detect planar sides of the object. By modifying the input resolution, each side of the cuboid was found.

Detect the equation for the normal

Using Python RANSAC, the normal is detected by iterating through 50000 plane normal equations and finding that which is the best fit to the entire plane.

Step 2: Rotate the plane parallel to the x-y cartesian plane

Example plane not normal to the x-y plane

Plane after rotation, normal to the x-y plane

Using the normal direction of the plane and the normal direction of the x-y plane, the x, y, z, and w components of the quaternion to align these vectors was found. This quaternion was then applied to each point of the plane to give the plot shown above

Step 3: Simplify and offset the plane

Example plane (red) and offset points (blue)

Once normal, the plane is divided into squares based on the detection diameter of the gamma detector. The center of these squares (black x's) are used to find the nearest points in the points cloud (red circles). These points (blue squares) are then offset the necessary amount to prevent collision. This offset amount was variable depending on desired safety.

Each side of the object rotated and offset

With all object sides rotated parallel to the x-y plane, the minimum number of points are found to offset. This minimum ensures that all points can be successfully scanned while minimizing the amount of re-scanning necessary. This minimum was determined based on the the detection diameter of the gamma detector

Step 4: Ensure offset direction is outward

Isometric view, depicting the two front planes offset inward, and two back planes offset outward (correctly)

Top view, depicting the remaining, hidden planes being offset inside the object

Correcting the offset direction

Due to the plane normal equation being indifferent to outward and inward, a check was necessary to ensure the offset direction was outward. A representative point of the entire object, the side, and the offset points were found by averaging the x, y, and z cartesian values. If the distance of the offset points to the center (Doffset-center) was smaller than that of the plane to the center (Dplane-center), the offset points were re-rotated normal to x-y and offset twice the original distance in the opposite direction. This guaranteed the points were outside the object.

Final Product

The final deliverable consisted of a two part python code that would isolate the planes from the original .ply file, output them into a .csv, then process each .csv file to offset each side of the object. The code was designed to work on convex, cuboid object. This served as a proof of concept for LANL that a simple solution is achievable within Python.