diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.cpp b/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.cpp index f7ca54aae57a8c789cb5b425dd5408308542a391..dd24a1ecc8cc9cf390684902112e5ac44a49c624 100644 --- a/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.cpp +++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.cpp @@ -1,10 +1,24 @@ #include "ObjectPose.h" +#include <VirtualRobot/Robot.h> +#include <VirtualRobot/RobotConfig.h> + +#include <ArmarXCore/core/exceptions/local/ExpressionException.h> + #include <RobotAPI/libraries/core/Pose.h> +#include <RobotAPI/libraries/core/FramedPose.h> namespace armarx::objpose { + + Eigen::Matrix4f toEigen(const PoseBasePtr pose) + { + auto cast = PosePtr::dynamicCast(pose); + ARMARX_CHECK_NOT_NULL(cast); + return cast->toEigen(); + } + ObjectPose::ObjectPose() { } @@ -20,13 +34,13 @@ namespace armarx::objpose objectType = ice.objectType; objectID = ice.objectID; - objectPoseRobot = PosePtr::dynamicCast(ice.objectPoseRobot)->toEigen(); - objectPoseGlobal = PosePtr::dynamicCast(ice.objectPoseGlobal)->toEigen(); - objectPoseOriginal = PosePtr::dynamicCast(ice.objectPoseOriginal)->toEigen(); + objectPoseRobot = toEigen(ice.objectPoseRobot); + objectPoseGlobal = toEigen(ice.objectPoseGlobal); + objectPoseOriginal = toEigen(ice.objectPoseOriginal); objectPoseOriginalFrame = ice.objectPoseOriginalFrame; robotConfig = ice.robotConfig; - robotPose = PosePtr::dynamicCast(ice.robotPose)->toEigen(); + robotPose = toEigen(ice.robotPose); confidence = ice.confidence; timestamp = IceUtil::Time::microSeconds(ice.timestampMicroSeconds); @@ -61,17 +75,46 @@ namespace armarx::objpose ice.localOOBB = localOOBB; } + void ObjectPose::fromProvidedPose(const data::ProvidedObjectPose& provided, VirtualRobot::RobotPtr robot) + { + providerName = provided.providerName; + objectType = provided.objectType; + + objectID = provided.objectID; + + objectPoseOriginal = toEigen(provided.objectPose); + objectPoseOriginalFrame = provided.objectPoseFrame; + + armarx::FramedPose framed(objectPoseOriginal, objectPoseOriginalFrame, robot->getName()); + framed.changeFrame(robot, robot->getRootNode()->getName()); + objectPoseRobot = framed.toEigen(); + framed.changeToGlobal(robot); + objectPoseGlobal = framed.toEigen(); + + robotConfig = robot->getConfig()->getRobotNodeJointValueMap(); + robotPose = robot->getGlobalPose(); + + confidence = provided.confidence; + timestamp = IceUtil::Time::microSeconds(provided.timestampMicroSeconds); + + localOOBB = provided.localOOBB; + } + +} + +namespace armarx +{ - void fromIce(const data::ObjectPose& ice, ObjectPose& pose) + void objpose::fromIce(const data::ObjectPose& ice, ObjectPose& pose) { pose.fromIce(ice); } - ObjectPose fromIce(const data::ObjectPose& ice) + objpose::ObjectPose objpose::fromIce(const data::ObjectPose& ice) { return ObjectPose(ice); } - void fromIce(const data::ObjectPoseSeq& ice, ObjectPoseSeq& poses) + void objpose::fromIce(const data::ObjectPoseSeq& ice, ObjectPoseSeq& poses) { poses.clear(); poses.reserve(ice.size()); @@ -80,7 +123,7 @@ namespace armarx::objpose poses.emplace_back(i); } } - ObjectPoseSeq fromIce(const data::ObjectPoseSeq& ice) + objpose::ObjectPoseSeq objpose::fromIce(const data::ObjectPoseSeq& ice) { ObjectPoseSeq poses; fromIce(ice, poses); @@ -88,16 +131,16 @@ namespace armarx::objpose } - void toIce(data::ObjectPose& ice, const ObjectPose& pose) + void objpose::toIce(data::ObjectPose& ice, const ObjectPose& pose) { pose.toIce(ice); } - data::ObjectPose toIce(const ObjectPose& pose) + objpose::data::ObjectPose objpose::toIce(const ObjectPose& pose) { return pose.toIce(); } - void toIce(const ObjectPoseSeq& poses, data::ObjectPoseSeq& ice) + void objpose::toIce(data::ObjectPoseSeq& ice, const ObjectPoseSeq& poses) { ice.clear(); ice.reserve(poses.size()); @@ -106,7 +149,7 @@ namespace armarx::objpose ice.emplace_back(p.toIce()); } } - data::ObjectPoseSeq toIce(const ObjectPoseSeq& poses) + objpose::data::ObjectPoseSeq objpose::toIce(const ObjectPoseSeq& poses) { data::ObjectPoseSeq ice; toIce(ice, poses); diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.h b/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.h index 76be353c997825fbd2a15a19fa820cfd8021f74a..6a237e319daaae4c6e43ff0d6cd933990d2ae2f2 100644 --- a/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.h +++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.h @@ -1,9 +1,11 @@ #pragma once -#include <IceUtil/Time.h> - #include <Eigen/Core> +#include <VirtualRobot/VirtualRobot.h> + +#include <IceUtil/Time.h> + #include <RobotAPI/interface/objectpose/types.h> @@ -23,6 +25,8 @@ namespace armarx::objpose data::ObjectPose toIce() const; void toIce(data::ObjectPose& ice) const; + void fromProvidedPose(const data::ProvidedObjectPose& provided, VirtualRobot::RobotPtr robot); + /// Name of the providing component. std::string providerName; diff --git a/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.cpp b/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.cpp index 958747a46836e4171f5f1987962d548fee2511ce..e40d29d709de816fedbd44e84d54f08961542eff 100644 --- a/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.cpp +++ b/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.cpp @@ -23,43 +23,6 @@ namespace armarx { objpose::ObjectTypeEnum::UnknownObject, "UnknownObject" } }; - void objpose::objectPoseFromProvidedPose( - ObjectPose& pose, - const ProvidedObjectPose& provided, VirtualRobot::RobotPtr robot) - { - pose.providerName = provided.providerName; - pose.objectType = provided.objectType; - - pose.objectID = provided.objectID; - - pose.objectPoseOriginal = provided.objectPose; - pose.objectPoseOriginalFrame = provided.objectPoseFrame; - - armarx::PosePtr p = armarx::PosePtr::dynamicCast(provided.objectPose); - ARMARX_CHECK_NOT_NULL(p); - armarx::FramedPose framed(p->toEigen(), provided.objectPoseFrame, robot->getName()); - framed.changeFrame(robot, robot->getRootNode()->getName()); - pose.objectPoseRobot = new Pose(framed.toEigen()); - framed.changeToGlobal(robot); - pose.objectPoseGlobal = new Pose(framed.toEigen()); - - pose.robotConfig = robot->getConfig()->getRobotNodeJointValueMap(); - pose.robotPose = new Pose(robot->getGlobalPose()); - - pose.confidence = provided.confidence; - pose.timestampMicroSeconds = provided.timestampMicroSeconds; - - pose.localOOBB = provided.localOOBB; - } - - - objpose::ObjectPose objpose::objectPoseFromProvidedPose( - const ProvidedObjectPose& provided, VirtualRobot::RobotPtr robot) - { - ObjectPose pose; - objectPoseFromProvidedPose(pose, provided, robot); - return pose; - } } diff --git a/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.h b/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.h index 2b5ee66be9b221f956c3118634fea3cfe6a8ee82..e9a0da5413706e3e53eea0f4fb4fee267c5f8354 100644 --- a/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.h +++ b/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.h @@ -2,10 +2,10 @@ #include <SimoxUtility/meta/enum/EnumNames.hpp> -#include <VirtualRobot/VirtualRobot.h> - #include <RobotAPI/interface/objectpose/types.h> +#include "ObjectPose.h" + namespace armarx::objpose { @@ -14,8 +14,4 @@ namespace armarx::objpose extern const simox::meta::EnumNames<objpose::ObjectTypeEnum> ObjectTypeEnumNames; - - void objectPoseFromProvidedPose(ObjectPose& pose, const ProvidedObjectPose& provided, VirtualRobot::RobotPtr robot); - ObjectPose objectPoseFromProvidedPose(const ProvidedObjectPose& provided, VirtualRobot::RobotPtr robot); - }