Qualisys Obstacle Avoidance

Skills: Qualisys, Python, System Testing, Data Analysis
A system test using Qualisys, an infrared 3D motion capturing system, used to asses a robot's ability to detect and avoid a personalized set of obstacles.

Objective

This was one of my primary projects during my time as a System Test Engineer at iRobot. The goal was to test the obstacle avoidance algorithm in an unreleased product by utilizing Qualisys, a 3D motion-capturing system with IR technology. We tested the product on various types of carpets, rugs, and other obstacles, collecting data to analyze how effectively it avoided them. I was responsible for creating a Python script to gather and analyze the data from Qualisys, generating plots to assess whether the robot ever crossed over the carpets and what path it took after detecting an obstacle.

Test Setup

Arena Setup

The arena used was about 10' by 10', and we adjusted its size and layout based on the specific needs of each test. The following images show two of the many arena setups that I designed. The first image shows a smaller version of the arena, with obstacles placed very close together to make it extremely challenging for the robot to avoid them entirely. The second arena, however, is larger and the obstacles are more spaced out, simulating a more realistic testing environment.

Robot Setup

The robot was set up with 15 total Qualisys markers for the infrared sensors to track its movement. Three of these markers were used for 3D tracking, while the remaining 12 helped create an outline of the robot’s pad, an area of interest for us when analyzing how the robot interacted with carpets and rugs. The following image shows an example of what the robot setup looked like, but due to my NDA, I had to use a CAD model of the Create 3 robot as an example, since the original robot was unreleased at the time of my testing.

Obstacle Selection

These are some of the selected rugs/carpets and why we chose them:
  • Oval Rug: We selected this rug because its shape is not a rectangle, and we wanted to observe how the robot's avoidance behavior adapted to a non-standard shape.
  • High-Pile Rug: We had a handful of high-pile rugs, all with a standard rectangular shape. These rugs were chosen because they are common in households and tend to get the dirtiest when a dirty robot runs over them.
  • Japanese Tatami Mat: We chose this mat because iRobot has a high number of sales in Japan, and it provided us with a high-elevation obstacle, unlike any of the other rugs we tested.
  • Low-Pile Rug: We selected this type of rug because it has the lowest elevation, making it more likely for the robot to cross over it, as there is little to no height difference compared to the floor.

Data Analysis

Data Structure

All data was collected and converted to CSV files using the Qualisys application. The data includes the positions of every Qualisys marker for both the robot and each obstacle in the arena. This dataset consists of each marker's x, y, and z positions relative to the time elapsed since the beginning of the test.

Data Analysis

Due to an NDA, the GitHub repository for this project does not contain all the Python files required for the complete data analysis and plotting, it only contains the code that was written by me. However, I am allowed to discuss all the different sections of the analysis.
  • Read Data and Get Marker: In this section, we read the CSV files and saved the data as a Pandas DataFrame. We then input another CSV file containing the obstacle names and their respective Qualisys names. After that, we extracted the x and y coordinates for each point on each object and used them for further analysis.
  • Cross Line Check: With the x and y coordinates for both the robot and the obstacles, we needed to determine if the robot’s pad ever crossed over the obstacles. Since the obstacles were fixed to the ground, I kept their initial positions constant throughout the run. I used the Polygon function from the Shapely library to convert both the robot and the pad into Polygon objects, making it easier to check where they intersected and to get all instances that the robot was a certain distance from the obstacle.
  • Plotting: There was one type of plotting required for this test, but it was repeated multiple times. The plot consisted of a single obstacle outline in red, the pad trajectory that didn’t touch the obstacle in green, and the pad trajectory that came into contact with the obstacle in orange. For each obstacle in each run, we adjusted the maximum distance shown in the plot to either get a close-up view of where the pad touched the obstacle or a wider view to capture the overall pad movement around the obstacle. The following plot shows a close-up of the pad interacting with one of the high-pile rugs. Due to an NDA, I can't show any other plots aside from this one.
  • Statistical Analysis: The data collected was also used for statistical analysis, including the percentage of each obstacle that was covered by the pad and the time the robot spent in contact with the obstacle relative to the entire run. These values helped us better understand the robot's behavior and make adjustments to calibrate its algorithm more effectively.

Conclusion

Here’s your revised conclusion with some bolded words for emphasis:This test was extremely successful, as all the data we aimed to collect was gathered and analyzed effectively. The analysis provided detailed insights into the robot's behavior and significantly helped the software team improve their movement algorithm. Due to the NDA, I can't go in-depth into the results or share the detailed plotting. Despite these constraints, the results demonstrated a solid foundation for enhancing the robot’s performance and calibrating its behavior for future iterations.