This project was developed as a self-directed team project during the Mobile Robotics - ROB530/EECS568/NAVARCH568 course.
Team Members:
- Muhammad Bahru Sholahuddin
- Mohammed Buhlaigah
- Zih-En Tseng
- Usman Shahzad
- android_app_team16 containing the project code for building Android app using Java. The back-end codes are implemented here.
- Data_visualization containing the code and data for examining the testing.
- python_code containing the code on implementing Kalman and Particle Filter.
- figures containing the figures for documentation purpose.
This project implements an Android application for pose estimation in 6-DoF (
- Uses computer vision Perspective-n-Points (PnP) techniques to etimates the positions of the camera toward the object frame.
- Provides real-time feedback on user positioning for achieving the desired pose. It uses simple instructions: forward/backward right/left, up/down, and clockwise/counterclockwise
- To develop and install the application via Android Studio please read through this.
- To install the app more instantly you can follow through this step:
- Download through your Android device, the generated '.apk' file here.
- Install the package by the Android built-in package installer or by using third-party APK installer from the Google Play.
- Grant Permission for the application to access the camera by go through:
Settings → App → 'Team16_NA568' (app name) → Permissions → Camera → Allow - Open the app.
The app has three menus:
- HSV Object Segmentation
- Reference Input
- Pose Perfect Action
- HSV Object Segmentation
In this instant the user can first segment the wanted color by touching the object in the display. If further adjustment is needed, there are 5 buttons provided with its corresponding sliders:- H: Adjust Hue thresholding. The Top slider for the Minimum threshold and the Bottom slider for the Maximum threshold adjuster.
- S: Adjust Saturation thresholding. The Top slider for the Minimum threshold and the Bottom slider for the Maximum threshold adjuster.
- V: Adjust Value thresholding. The Top slider for the Minimum threshold and the Bottom slider for the Maximum threshold adjuster.
- ED: Adjust morphological operator Erode and Dilate mask size. The Top slider is for the Erode size and the Bottom for the Dilate size. This button also serve as toggle to display either the RGB or Binary color space. It can be used for removing unwanted contour.
- MG: Adjust the blurring operator MedianBlur and GaussianBlur mask size. The Top slider is for the Median size and the Bottom for the Gaussian size. This button also serve as toggle to display either the RGB or Binary color space. It can be used for smoothing out or removing unwanted contour.
If you prefer not to use the "touch" feature, you can adjust the segmentation just based on the HSV threshold. For doing this, first make all the HSV sliders ranged at their maximum (top slider to the most left and bottom slider to the most right). Then, adjust the minimum and maximum slider sequentially from H → S → V.
-
Reference Input
This is used to update the object dimensions, and manually input the desired reference image using the states (euclidean distance$r$ ,$\phi$ ,$\theta$ , and$\psi$ ). The default object size is 34.5 cm wide by 14.5 cm tall. Please change this according to your object.
- Pose Perfect Action
This part of the app guides the user on how to achieve the correct pose. It gives the following instructions: forward / back, up / down, right / left, and clockwise / counterclockwise.
The user can automatically selsect the new desired pose (reference pose) by clicking the play button (pointed by red arrow)
The user can reset the desired or reference pose by clicking the reset button (pointed by red arrow)
For correct pose estimation, the object dimension (which can be adjusted in the app) and the camera intrinsics should be defined. In this project, we use our calibrated Google Pixel 7 which has camera intrinsic parameters as:
If you have your intrinsic camera parameters and want to build the app via Android Studio, you can change those parameters in these lines.