diff --git a/src/corner_detector.cpp b/src/corner_detector.cpp index f97c09eab415d0db0460634353cbee9a85974ddf..d79e779eb0a5f9c300a0531306cd142063c0cef5 100644 --- a/src/corner_detector.cpp +++ b/src/corner_detector.cpp @@ -237,6 +237,7 @@ unsigned int laserscanutils::extractCorners(const laserscanutils::ScanParams & _ } } std::cout << "Corners after removing duplicates: " << _corner_list.size() << std::endl; + for(std::list<laserscanutils::Corner>::iterator corner_it1 = _corner_list.begin(); corner_it1 != _corner_list.end(); corner_it1++) corner_it1->print(); return _corner_list.size(); } @@ -244,10 +245,10 @@ unsigned int laserscanutils::extractCorners(const laserscanutils::ScanParams & _ laserscanutils::ScalarT laserscanutils::cornerAperture(const Eigen::Vector3s & _p1, const Eigen::Vector3s & _c, const Eigen::Vector3s & _p2) { //TODO: use lines as inputs instead of _p1 and _p2 -> better estimation of the aperture value - /* + //buid lines from c to p1 and p2 - Eigen::Vector3s l1 = _p1.cross(_c); - Eigen::Vector3s l2 = _p2.cross(_c); + Eigen::Vector3s l1 = _c.cross(_p1); + Eigen::Vector3s l2 = _c.cross(_p2); //normalize lines l1 = l1 / ( sqrt( l1(0)*l1(0)+l1(1)*l1(1) ) ); @@ -256,19 +257,14 @@ laserscanutils::ScalarT laserscanutils::cornerAperture(const Eigen::Vector3s & _ //compute angle ScalarT aux = l1(0)*l2(0) + l1(1)*l2(1); if (fabs(aux) > 1.) aux = aux / fabs(aux); //limit here to +-1 to avoid complex numbers due to numerical precision when acos(>1). Anyway, corners will be far from this situation - alpha = acos(aux); //alpha in [0,pi] + ScalarT alpha = acos(aux); //alpha in [0,pi] //build matrix M and compute its determinant - Eigen::Matrix3s M << _p1,_c - ScalarT detM = - + Eigen::Matrix3s M; + M << _p1,_c, _p2; + ScalarT detM = M.determinant(); //if det<0, return the complementary angle - if(detM<0) then - ret_alpha = 2*%pi-alpha; - else - ret_alpha = alpha; - end -*/ - return 0; + if ( detM < 0 ) return ( 2*M_PI - alpha ); + else return alpha; } diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 741291947b7cd12e5d565a3b6e6da4d26e81dc35..a121632f9e66ba51897e1d8e442c95d236bf50df 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -2,4 +2,8 @@ IF(faramotics_FOUND) ADD_EXECUTABLE(test_extract_corners test_extract_corners.cpp) TARGET_LINK_LIBRARIES(test_extract_corners ${GLUT_glut_LIBRARY} ${pose_state_time_LIBRARIES} ${faramotics_LIBRARIES} ${PROJECT_NAME}) -ENDIF(faramotics_FOUND) \ No newline at end of file +ENDIF(faramotics_FOUND) + +# corner aperture test +ADD_EXECUTABLE(test_corner_aperture test_corner_aperture.cpp) +TARGET_LINK_LIBRARIES(test_corner_aperture ${PROJECT_NAME}) diff --git a/src/examples/test_corner_aperture.cpp b/src/examples/test_corner_aperture.cpp new file mode 100644 index 0000000000000000000000000000000000000000..cf3bd15180fba1050415c7fc4554ccacd16a38f1 --- /dev/null +++ b/src/examples/test_corner_aperture.cpp @@ -0,0 +1,24 @@ +//std includes +#include <iostream> + +//laserscanutils +#include "entities.h" +#include "corner_detector.h" + +//main +int main(int argc, char** argv) +{ + std::cout << "\n ========= Corner aperture test ===========\n"; + + //declare two points and a corner in between + Eigen::Vector3s p1; p1 << 2,4,1; + Eigen::Vector3s p2; p2 << 4,1,1; + Eigen::Vector3s c; c << 4,4,1; + + //compute aperture + laserscanutils::ScalarT ap = laserscanutils::cornerAperture(p1,c,p2); + std::cout << "Aperture: " << ap << std::endl; + + //exit + return 0; +} diff --git a/src/examples/test_extract_corners.cpp b/src/examples/test_extract_corners.cpp index a5af525c1b68b888dde0387282d10f8e741decac..55573b584fcedf0f982520bcc3e422b3b0051757 100644 --- a/src/examples/test_extract_corners.cpp +++ b/src/examples/test_extract_corners.cpp @@ -158,6 +158,6 @@ int main(int argc, char** argv) delete myRender; delete myScanner; - //exit + //exit return 0; }