17 #ifndef __PSO_THREAD_H__ 18 #define __PSO_THREAD_H__ 23 #include <yarp/os/RateThread.h> 24 #include <yarp/os/ResourceFinder.h> 25 #include <yarp/os/Time.h> 26 #include <yarp/os/Random.h> 27 #include <yarp/sig/Vector.h> 28 #include <yarp/sig/Matrix.h> 29 #include <yarp/math/Math.h> 30 #include <yarp/math/Rand.h> 31 #include <yarp/dev/CartesianControl.h> 32 #include <yarp/dev/ControlBoardInterfaces.h> 33 #include <yarp/dev/PolyDriver.h> 34 #include <iCub/iKin/iKinFwd.h> 35 #include <iCub/grasp/forceClosure.h> 36 #include <pcl/common/common_headers.h> 37 #include <pcl/io/io.h> 38 #include <pcl/octree/octree.h> 39 #include <pcl/kdtree/kdtree_flann.h> 41 class PsoThread :
public yarp::os::RateThread
50 int overlapping_cones;
56 double limit_finger_min;
57 double limit_finger_max;
64 std::deque<yarp::sig::Vector> x;
65 std::deque<yarp::sig::Vector> ns;
66 std::deque<yarp::sig::Vector> v;
67 std::deque<yarp::sig::Vector> p;
68 yarp::sig::Vector nsg;
71 std::vector<yarp::sig::Vector> visited;
73 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
74 pcl::PointCloud <pcl::Normal>::Ptr normals;
75 pcl::KdTreeFLANN<pcl::PointXYZ> kdtree;
77 yarp::sig::Vector findDifferentIds(
const yarp::sig::Vector &ids);
78 yarp::sig::Vector findTriplet(
const yarp::sig::Vector &vect);
79 int findClosestPoint(pcl::PointXYZ &point);
80 yarp::sig::Vector assignPoints(
const yarp::sig::Vector &ids);
81 yarp::sig::Vector assignNormals(
const yarp::sig::Vector &ids);
83 bool counterOverlap(yarp::sig::Vector &n1, yarp::sig::Vector &n2,
double &angle);
84 double penaltyCones(
int n_cones, yarp::sig::Vector &idx, yarp::sig::Vector &angles);
85 double triangleArea(yarp::sig::Vector &p1, yarp::sig::Vector &p2, yarp::sig::Vector &p3);
87 void initialization();
88 yarp::sig::Vector findRandomId();
95 bool open(
const yarp::os::Property &options);
100 void setData(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, pcl::PointCloud <pcl::Normal>::Ptr normals,
double alpha,
int overlapping_cones);