3#include <SimoxUtility/algorithm/string.h>
4#include <SimoxUtility/shapes/AxisAlignedBoundingBox.h>
5#include <SimoxUtility/shapes/OrientedBox.h>
6#include <VirtualRobot/Robot.h>
7#include <VirtualRobot/RobotConfig.h>
21 os <<
"'" <<
id.dataset <<
"/" <<
id.className;
22 if (!
id.instanceName.empty())
24 os <<
"/" <<
id.instanceName;
40 return {ice.dataset, ice.className, ice.instanceName};
47 ice.className =
id.className();
48 ice.instanceName =
id.instanceName();
63 std::transform(ice.begin(),
65 std::back_inserter(ids),
69std::vector<armarx::ObjectID>
72 std::vector<ObjectID> ids;
81 std::transform(ids.begin(),
83 std::back_inserter(ice),
87armarx::data::ObjectIDSeq
90 data::ObjectIDSeq ice;
98 {objpose::ObjectType::AnyObject,
"AnyObject"},
99 {objpose::ObjectType::KnownObject,
"KnownObject"},
100 {objpose::ObjectType::UnknownObject,
"UnknownObject"}};
106 ice.center =
new Vector3(aabb.center());
107 ice.extents =
new Vector3(aabb.extents());
117 Eigen::Matrix3f ori =
armarx::fromIce(box.orientation).toRotationMatrix();
119 Eigen::Vector3f corner = pos - ori * extents / 2;
122 corner, ori.col(0) * extents(0), ori.col(1) * extents(1), ori.col(2) * extents(2));
124 catch (
const armarx::LocalException&)
147 simox::OrientedBoxf oobb;
155 box.position =
new Vector3(oobb.center());
156 box.orientation =
new Quaternion(oobb.rotation().eval());
157 box.extents =
new Vector3(oobb.dimensions());
182 if (
static_cast<Eigen::Index
>(ice.covariance6x6.size()) != cov.
covariance.size())
186 <<
"Float sequence representing 6x6 covariance matrix must have "
187 << cov.
covariance.size() <<
" values, but has " << ice.covariance6x6.size()
189 <<
"[" << simox::alg::join(simox::alg::multi_to_string(ice.covariance6x6),
", ")
200 std::optional<PoseManifoldGaussian>& cov)
213 std::optional<objpose::PoseManifoldGaussian>
216 std::optional<objpose::PoseManifoldGaussian> cov;
226 ice.covariance6x6.resize(cov.
covariance.size());
227 Eigen::MatrixXf::Map(ice.covariance6x6.data(),
234 const std::optional<PoseManifoldGaussian>& cov)
238 ice =
new data::PoseManifoldGaussian;
239 toIce(*ice, cov.value());
247 objpose::data::PoseManifoldGaussianPtr
250 data::PoseManifoldGaussianPtr ice;
A known object ID of the form "Dataset/ClassName" or "Dataset/ClassName/InstanceName".
std::string dataset() const
#define ARMARX_CHECK_EQUAL(lhs, rhs)
This macro evaluates whether lhs is equal (==) rhs and if it turns out to be false it will throw an E...
std::ostream & operator<<(std::ostream &os, const ObjectID &id)
void fromIce(const Box &box, simox::OrientedBox< float > &oobb)
objpose::AABB toIce(const simox::AxisAlignedBoundingBox &aabb)
const simox::meta::EnumNames< objpose::ObjectType > ObjectTypeNames
This file offers overloads of toIce() and fromIce() functions for STL container types.
void fromIce(const std::map< IceKeyT, IceValueT > &iceMap, boost::container::flat_map< CppKeyT, CppValueT > &cppMap)
void toIce(std::map< IceKeyT, IceValueT > &iceMap, const boost::container::flat_map< CppKeyT, CppValueT > &cppMap)
A "gaussian" distribution in pose space (i.e.
Eigen::Matrix4f mean
The mean (i.e. a pose).
Eigen::Matrix< float, 6, 6 > covariance
The covariance matrix.