00001 #include <agile_grasp/learning.h>
00002 #include <agile_grasp/localization.h>
00003
00004 int main(int argc, char** argv)
00005 {
00006 if (argc > 1)
00007 {
00008 std::string file_name = argv[1];
00009 std::string file_name_left = file_name + "l_reg.pcd";
00010 std::string file_name_right = file_name + "r_reg.pcd";
00011
00012 int num_samples = 400;
00013 if (argc > 2)
00014 num_samples = atoi(argv[2]);
00015
00016 int num_threads = 1;
00017 if (argc > 3)
00018 num_threads = atoi(argv[3]);
00019
00020 double taubin_radius = 0.03;
00021 double hand_radius = 0.08;
00022
00023 Eigen::Matrix4d base_tf, sqrt_tf;
00024
00025 base_tf << 0, 0.445417, 0.895323, 0.21, 1, 0, 0, -0.02, 0, 0.895323, -0.445417, 0.24, 0, 0, 0, 1;
00026
00027 sqrt_tf << 0.9366, -0.0162, 0.3500, -0.2863, 0.0151, 0.9999, 0.0058, 0.0058, -0.3501, -0.0002, 0.9367, 0.0554, 0, 0, 0, 1;
00028
00029 Eigen::VectorXd workspace(6);
00030 workspace << 0.4, 0.7, -0.02, 0.06, -0.2, 10;
00031
00032 Localization loc(num_threads, false, true);
00033 loc.setCameraTransforms(base_tf * sqrt_tf.inverse(), base_tf * sqrt_tf);
00034 loc.setWorkspace(workspace);
00035 loc.setNumSamples(num_samples);
00036 loc.setNeighborhoodRadiusTaubin(taubin_radius);
00037 loc.setNeighborhoodRadiusHands(hand_radius);
00038 loc.setFingerWidth(0.01);
00039 loc.setHandOuterDiameter(0.09);
00040 loc.setHandDepth(0.06);
00041 loc.setInitBite(0.015);
00042 loc.setHandHeight(0.02);
00043 std::cout << "Localizing hands ...\n";
00044
00045
00046 std::vector<int> indices(5);
00047 indices[0] = 731;
00048 indices[1] = 4507;
00049 indices[2] = 4445;
00050 indices[3] = 2254;
00051 indices[4] = 3716;
00052
00053
00054
00055
00056
00057
00058 std::vector<GraspHypothesis> hand_list = loc.localizeHands(file_name_left, file_name_right, true);
00059 Learning learn;
00060 Eigen::Matrix<double,3,2> cam_pos;
00061 cam_pos.col(0) = loc.getCameraTransform(true).block<3,1>(0,3);
00062 cam_pos.col(1) = loc.getCameraTransform(false).block<3,1>(0,3);
00063 learn.train(hand_list, "svm", cam_pos);
00064 hand_list = loc.localizeHands(file_name_left, file_name_right, indices);
00065 loc.predictAntipodalHands(hand_list, "svm");
00066
00067 return 0;
00068 }
00069
00070 std::cout << "No PCD filename given!\n";
00071 std::cout << "Usage: learning_test filename [num_samples]\n";
00072 return (-1);
00073 }
00074