LCOV - code coverage report
Current view: top level - src/PointCloud - ObjectInterpreter.cpp (source / functions) Hit Total Coverage
Test: HLR Lines: 1 45 2.2 %
Date: 2018-01-09 08:28:10 Functions: 2 6 33.3 %

          Line data    Source code
       1             : #include "ObjectInterpreter.hpp"
       2             : #include <boost/filesystem.hpp>
       3             : #include <boost/filesystem/fstream.hpp>
       4             : 
       5             : namespace HLR
       6             : {
       7             : namespace PointCloud
       8             : {
       9             : namespace
      10             : {
      11             : std::optional<CGAL::Surface_mesh<CGAL::Simple_cartesian<double>::Point_3>>
      12             : get_static_polyhedron();
      13             : }
      14             : 
      15           0 : std::vector<Object> ObjectInterpreter::get_current_objects(
      16             :     const HLR::Vision::CupDetection& detected_cups,
      17             :     const pcl::PointCloud<pcl::PointXYZ>& point_cloud)
      18             : {
      19           0 :     merge_objects(detected_cups, point_cloud);
      20           0 :     return current_objects;
      21             : }
      22             : 
      23           0 : std::vector<Object> ObjectInterpreter::get_changed_objects(
      24             :     const HLR::Vision::CupDetection& detected_cups,
      25             :     const pcl::PointCloud<pcl::PointXYZ>& point_cloud)
      26             : {
      27           0 :     merge_objects(detected_cups, point_cloud);
      28           0 :     std::vector<Object> changed_objects;
      29           0 :     if (!history.empty())
      30             :     {
      31           0 :         for (const auto& i : current_objects)
      32             :         {
      33           0 :             bool is_new = true;
      34           0 :             for (const auto& j : history[0])
      35             :             {
      36           0 :                 if (i.id == j.id)
      37             :                 {
      38           0 :                     is_new = false;
      39           0 :                     if (i != j)
      40             :                     {
      41           0 :                         changed_objects.push_back(i);
      42             :                     }
      43             :                 }
      44             :             }
      45           0 :             if (is_new)
      46             :             {
      47           0 :                 changed_objects.push_back(i);
      48             :             }
      49             :         }
      50           0 :         return changed_objects;
      51             :     }
      52           0 :     return current_objects;
      53             : }
      54             : 
      55           0 : void ObjectInterpreter::merge_objects(
      56             :     const HLR::Vision::CupDetection& detected_cups,
      57             :     const pcl::PointCloud<pcl::PointXYZ>& point_cloud)
      58             : {
      59           0 :     static auto polyhedron = get_static_polyhedron().value_or(
      60           0 :         CGAL::Surface_mesh<CGAL::Simple_cartesian<double>::Point_3>{});
      61             : 
      62           0 :     history.push_back(std::move(current_objects));
      63             : 
      64           0 :     Object object;
      65           0 :     object.id = 0;
      66           0 :     object.polyhedron = polyhedron;
      67           0 :     object.speed = std::nullopt;
      68           0 :     object.is_cup = false;
      69           0 :     object.is_deleted = false;
      70           0 :     lidar_interpreter.get_objects(detected_cups, point_cloud);
      71           0 :     current_objects.push_back(object);
      72           0 : }
      73             : namespace
      74             : {
      75             : std::optional<CGAL::Surface_mesh<CGAL::Simple_cartesian<double>::Point_3>>
      76           0 : get_static_polyhedron() try
      77             : {
      78           0 :     boost::system::error_code ec;
      79           0 :     auto path = boost::filesystem::read_symlink("/proc/self/exe", ec);
      80             : 
      81           0 :     if (!ec)
      82             :     {
      83           0 :         path.remove_filename();
      84           0 :         path /= "poly.off";
      85             :     }
      86             :     else
      87             :     {
      88           0 :         path = "poly.off";
      89             :     }
      90             : 
      91           0 :     boost::filesystem::ifstream poly_stream{path};
      92             : 
      93           0 :     CGAL::Surface_mesh<CGAL::Simple_cartesian<double>::Point_3> polyhedron;
      94           0 :     poly_stream >> polyhedron;
      95             : 
      96           0 :     return polyhedron;
      97             : }
      98           0 : catch (...)
      99             : {
     100           0 :     return std::nullopt;
     101             : }
     102             : } // namespace
     103             : 
     104             : } // namespace PointCloud
     105           3 : } // namespace HLR

Generated by: LCOV version 1.12