From 68e8aedfd98cbec887b5d5eed37fd8b288c9f918 Mon Sep 17 00:00:00 2001
From: Rainer Kartmann <rainer.kartmann@kit.edu>
Date: Mon, 25 May 2020 14:21:24 +0200
Subject: [PATCH] Update OOBB loading

---
 .../ObjectPoseObserver/ObjectFinder.cpp       | 20 ++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectFinder.cpp b/source/RobotAPI/components/ObjectPoseObserver/ObjectFinder.cpp
index eef7faa22..d24b27e90 100644
--- a/source/RobotAPI/components/ObjectPoseObserver/ObjectFinder.cpp
+++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectFinder.cpp
@@ -246,26 +246,40 @@ namespace armarx
     {
         nlohmann::json j = nlohmann::read_json(boundingBoxJson().absolutePath);
         nlohmann::json jaabb = j.at("aabb");
+
+        auto center = jaabb.at("center").get<Eigen::Vector3f>();
+        auto extents = jaabb.at("extents").get<Eigen::Vector3f>();
         auto min = jaabb.at("min").get<Eigen::Vector3f>();
         auto max = jaabb.at("max").get<Eigen::Vector3f>();
 
-        return simox::AxisAlignedBoundingBox(min, max);
+        simox::AxisAlignedBoundingBox aabb(min, max);
+
+        ARMARX_CHECK(aabb.center().isApprox(center)) << aabb.center().transpose() << "\n" << center.transpose();
+        ARMARX_CHECK(aabb.extents().isApprox(extents)) << aabb.extents().transpose() << "\n" << extents.transpose();
+        ARMARX_CHECK(aabb.min().isApprox(min)) << aabb.min().transpose() << "\n" << min.transpose();
+        ARMARX_CHECK(aabb.max().isApprox(max)) << aabb.max().transpose() << "\n" << max.transpose();
+
+        return aabb;
     }
 
     simox::OrientedBox<float> ObjectInfo::oobb() const
     {
         nlohmann::json j = nlohmann::read_json(boundingBoxJson().absolutePath);
         nlohmann::json joobb = j.at("oobb");
+        auto pos = joobb.at("pos").get<Eigen::Vector3f>();
         auto ori = joobb.at("ori").get<Eigen::Quaternionf>().toRotationMatrix();
-        auto min = joobb.at("min").get<Eigen::Vector3f>();
         auto extents = joobb.at("extents").get<Eigen::Vector3f>();
 
-        Eigen::Vector3f corner = ori * min;
+        Eigen::Vector3f corner = pos - ori * extents / 2;
 
         simox::OrientedBox<float> oobb(corner,
                                        ori.col(0) * extents(0),
                                        ori.col(1) * extents(1),
                                        ori.col(2) * extents(2));
+
+        ARMARX_CHECK(oobb.center().isApprox(pos)) << oobb.center().transpose() << "\n" << pos.transpose();
+        ARMARX_CHECK(oobb.rotation().isApprox(ori)) << oobb.rotation() << "\n" << ori;
+        ARMARX_CHECK(oobb.dimensions().isApprox(extents)) << oobb.dimensions().transpose() << "\n" << extents.transpose();
         return oobb;
     }
 
-- 
GitLab