Skip to content
Snippets Groups Projects
Commit 8973ee30 authored by Rainer Kartmann's avatar Rainer Kartmann
Browse files

Update ObjectPoseObserver to correctly handle none oobbs

parent d9cbf086
No related branches found
No related tags found
No related merge requests found
......@@ -164,7 +164,7 @@ namespace armarx
pose.objectID = { objectInfo->dataset(), pose.objectID.className(), pose.objectID.instanceName() };
}
}
if (!(provided.localOOBB.position && provided.localOOBB.orientation && provided.localOOBB.extents))
if (!provided.localOOBB)
{
pose.localOOBB = getObjectOOBB(pose.objectID);
}
......@@ -385,9 +385,9 @@ namespace armarx
ARMARX_WARNING << "Cannot visualize object '" << key << "'.";
}
if (visu.oobbs)
if (visu.oobbs && objectPose.localOOBB)
{
simox::OrientedBox<float> oobb = objectPose.localOOBB;
const simox::OrientedBoxf& oobb = *objectPose.localOOBB;
layer.add(viz::Box(key + " OOBB")
.pose(pose * simox::math::pose(oobb.center(), oobb.rotation()))
.size(oobb.dimensions()).color(simox::Color::lime(255, 64)));
......@@ -402,31 +402,30 @@ namespace armarx
return getProxy<objpose::ObjectPoseProviderPrx>(providerName, false, "", false);
}
simox::OrientedBoxf ObjectPoseObserver::getObjectOOBB(const ObjectID& id)
std::optional<simox::OrientedBoxf> ObjectPoseObserver::getObjectOOBB(const ObjectID& id)
{
if (auto it = oobbCache.find(id); it != oobbCache.end())
{
return it->second;
}
else
// Try to get OOBB from repository.
std::optional<simox::OrientedBoxf> oobb;
if (std::optional<ObjectInfo> objectInfo = objectFinder.findObject(id))
{
// Try to get OOBB from repository.
simox::OrientedBoxf oobb;
if (std::optional<ObjectInfo> objectInfo = objectFinder.findObject(id))
try
{
try
{
oobb = objectInfo->oobb();
}
catch (const std::ios_base::failure&)
{
// Give up - no OOBB information.
ARMARX_WARNING << "Could not get OOBB of object " << id << ".";
}
oobb = objectInfo->oobb();
}
catch (const std::ios_base::failure& e)
{
// Give up - no OOBB information.
ARMARX_WARNING << "Could not get OOBB of object " << id << ".\n- " << e.what();
oobb = std::nullopt;
}
oobbCache[id] = oobb; // Store result in any case.
return oobb;
}
oobbCache[id] = oobb; // Store result in any case.
return oobb;
}
}
......
......@@ -126,7 +126,7 @@ namespace armarx
objpose::ObjectPoseProviderPrx getProviderProxy(const std::string& providerName);
simox::OrientedBoxf getObjectOOBB(const ObjectID& id);
std::optional<simox::OrientedBoxf> getObjectOOBB(const ObjectID& id);
private:
......@@ -143,7 +143,8 @@ namespace armarx
ObjectFinder objectFinder;
std::map<ObjectID, simox::OrientedBox<float>> oobbCache;
/// Caches results of attempts to retrieve the OOBB from ArmarXObjects.
std::map<ObjectID, std::optional<simox::OrientedBoxf>> oobbCache;
struct Visu
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment