Difference between revisions of "AutoQuad"

From Imperial College Robotics Society
Jump to: navigation, search
Line 38: Line 38:
== kdtree code repository==
== kdtree code repository==
<syntaxhighlight lang="c">
vector<int> regionQuery(pcl::KdTree kdPoints, int currentPoint, double radius) {
vector<int> regionQuery(pcl::KdTree kdPoints, int currentPoint, double radius) {
vector<int> k_indicies;
vector<int> k_indicies;
Line 90: Line 91:

Revision as of 16:58, 25 April 2013

Scratch area for the third year project in EEE on autonomous indoor quad navigation.

Plan overview

Click here



Someone should do a parse of http://www.informatik.uni-trier.de/~ley/db/conf/icra/icra2012.html (plus 2011, etc) for relevant papers, some MAV stuff there.

Plane segmentation

Real-Time Plane Segmentation using RGB-D Cameras
The PCL fast plane segmentation is based on this paper. Current plan is to reuse the integral image calculation for local normal finding.
An idea is to use DBSCAN to perform the clustering which is not that well described in the paper.

Extra stuff: KD-tree construction with GPUs - Although we should try to just use kd trees from PCL.


Extra stuff:

  • paper on a novel approach to the plane data association: [2]
  • These guys use something different than a EKF: a hybrid. "hybrid filter that uses an IMU-driven EKF process model with pseudo-measurements computed from Gaussian Particle Filter (GPF) laser measurement updates" [3]


Extra stuff: use quaternions for rotation state


[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5980095 Autonomous Obstacle Avoidance and Maneuvering on a Vision-Guided MAV Using On-Board Processing] - seems very relevant at a glance, will revisit later


Visual Studio tips

Use PCL 1.6 from the web, update cmakelists to https://dl.dropboxusercontent.com/u/48184712/CMakeLists.txt ,and install drivers from https://dl.dropboxusercontent.com/u/48184712/V1049_0430.iso

kdtree code repository

	vector<int> regionQuery(pcl::KdTree kdPoints, int currentPoint, double radius) {
		vector<int> k_indicies;
		vector<float> k_sqr_distances;
		pcl::KdPoints<pcl::Normal>::radiusSearch(currentPoint, radius, k_indicies, k_sqr_distances);
		return k_indicies;
	void DBSCAN (pcl::PointCloud<pcl::Normal> mynormals, double radius, int minPoints){
		vector<int> NeighborPts;
		pcl::KdTree kdPoints;
		pcl::IndicesConstPtr ind = pcl::IndicesConstPtr();
		kdPoints.setInputCloud(*myNormals, ind);
		int sizeOfData = mynormals.size();
		bool Visited[sizeOfData];
		for(int i = 0; i<sizeOfData; i++){
		vector<int> currentCluster;
		vector<vector<int>> clusters;
		int clusterInd = 0;
		for(i = 0; i<sizeOfData; i++){
				Visited[i] = true;
				NeighborPts = regionQuery(kdPoints, i, radius);
					//nothing here could call it noise explicitly
	void expandCluster(int inputInd, vector<int> NeighborPts,vector<int> currentCluster,double radius, int minPoints, pcl::KdTree kdPoints,bool Visited[sizeOfData]){
		vector<int> secondNeighborPts;
		for(int j = 0; j < NeighborPts.size(); j++){
				secondNeighborPts = regoinQuery(KdPoints,NeighborPts[j],radius);
					//take the union of neighborPts and secondneighborPts
			//if neighborPts[j] has yet to be added to a cluster add it to this one