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

Merge branch 'object-memory-and-pose-gui-improvements' into 'master'

Object memory and pose gui improvements

See merge request !368
parents 7e2a10de 286f560d
No related branches found
No related tags found
1 merge request!368Object memory and pose gui improvements
......@@ -43,6 +43,29 @@
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="detchAllButton">
<property name="text">
<string>Detach All Objects</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="detchAllCommitAttachedCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the object's pose according to the attachment will be committed as a new snapshot when the object is detached.&lt;/p&gt;&lt;p&gt;If unchecked, no new snapshot will be created, and the object's pose will return to where it was before the attachment. &lt;/p&gt;&lt;p&gt;In both cases, new snapshots to the object ID will overwrite the previous/committed snapshot.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Commit Attached Pose</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="tristate">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
......
......@@ -21,17 +21,15 @@
*/
#pragma once
#include <RobotAPI/gui-plugins/ObjectPoseGui/ui_ObjectPoseGuiWidget.h>
#include <ArmarXCore/core/system/ImportExportComponent.h>
#include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXGuiPlugin.h>
#include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXComponentWidgetController.h>
#include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXGuiPlugin.h>
#include <ArmarXGui/libraries/SimpleConfigDialog/SimpleConfigDialog.h>
#include <ArmarXCore/core/system/ImportExportComponent.h>
#include <RobotAPI/gui-plugins/ObjectPoseGui/ui_ObjectPoseGuiWidget.h>
#include <RobotAPI/interface/objectpose/ObjectPoseStorageInterface.h>
namespace armarx
{
/**
......@@ -52,9 +50,8 @@ namespace armarx
*
* Detailed description
*/
class ARMARXCOMPONENT_IMPORT_EXPORT
ObjectPoseGuiWidgetController :
public armarx::ArmarXComponentWidgetControllerTemplate < ObjectPoseGuiWidgetController >
class ARMARXCOMPONENT_IMPORT_EXPORT ObjectPoseGuiWidgetController :
public armarx::ArmarXComponentWidgetControllerTemplate<ObjectPoseGuiWidgetController>
{
Q_OBJECT
......@@ -98,9 +95,12 @@ namespace armarx
void updateRequestTab();
void prepareObjectContextMenu(const QPoint& pos);
void attachObjectToRobotNode(QString providerName, QString objectID,
const std::string& agentName, const std::string& frameName);
void attachObjectToRobotNode(QString providerName,
QString objectID,
const std::string& agentName,
const std::string& frameName);
void detachObjectFromRobotNode(QString providerName, QString objectID);
void detachAllObjectsFromRobotNodes(bool commitAttachedPose);
void requestSelectedObjects();
......@@ -109,18 +109,14 @@ namespace armarx
/* QT signal declarations */
private:
/// Widget Form
Ui::ObjectPoseGuiWidget widget;
QPointer<SimpleConfigDialog> configDialog;
std::string ObjectPoseStorageName;
std::string objectPoseStorageName;
armarx::objpose::ObjectPoseStorageInterfacePrx ObjectPoseStorage;
objpose::AgentFramesSeq attachableFrames;
};
}
} // namespace armarx
......@@ -9,24 +9,20 @@
#include <SimoxUtility/shapes/OrientedBox.h>
#include "RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h"
#include <RobotAPI/components/ArViz/Client/Client.h>
#include <RobotAPI/interface/core/RobotState.h>
#include <RobotAPI/interface/objectpose/ObjectPoseStorageInterface.h>
#include <RobotAPI/components/ArViz/Client/Client.h>
#include <RobotAPI/libraries/ArmarXObjects/ObjectFinder.h>
#include <RobotAPI/libraries/ArmarXObjects/ObjectID.h>
#include <RobotAPI/libraries/ArmarXObjects/ObjectPose.h>
#include <RobotAPI/libraries/ArmarXObjects/ObjectFinder.h>
#include <RobotAPI/libraries/ArmarXObjects/forward_declarations.h>
#include <RobotAPI/libraries/armem/core/Prediction.h>
#include <RobotAPI/libraries/armem/server/wm/memory_definitions.h>
#include <RobotAPI/libraries/armem/server/segment/SpecializedSegment.h>
#include <RobotAPI/libraries/armem/server/wm/memory_definitions.h>
#include "ArticulatedObjectVisu.h"
#include "Decay.h"
namespace armarx::armem::arondto
{
class ObjectInstance;
......@@ -38,11 +34,11 @@ namespace armarx::armem::server::obj::instance
class Segment : public segment::SpecializedCoreSegment
{
public:
struct CommitStats
{
int numUpdated = 0;
};
using ObjectPose = objpose::ObjectPose;
using ObjectPoseSeq = objpose::ObjectPoseSeq;
using ObjectPoseMap = std::map<ObjectID, ObjectPose>;
......@@ -53,41 +49,46 @@ namespace armarx::armem::server::obj::instance
std::string robotNode = "Neck_2_Pitch";
float offset = 0.0f;
void defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string& prefix = "calibration.");
void defineProperties(armarx::PropertyDefinitionsPtr defs,
const std::string& prefix = "calibration.");
};
public:
Segment(server::MemoryToIceAdapter& iceMemory);
virtual ~Segment() override;
void defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string& prefix = "") override;
void defineProperties(armarx::PropertyDefinitionsPtr defs,
const std::string& prefix = "") override;
void init() override;
void connect(viz::Client arviz);
CommitStats commitObjectPoses(
const std::string& providerName,
const objpose::data::ProvidedObjectPoseSeq& providedPoses,
const Calibration& calibration,
std::optional<Time> discardUpdatesUntil = std::nullopt);
void commitObjectPoses(const ObjectPoseSeq& objectPoses, const std::string& providerName = "");
CommitStats commitObjectPoses(const std::string& providerName,
const objpose::data::ProvidedObjectPoseSeq& providedPoses,
const Calibration& calibration,
std::optional<Time> discardUpdatesUntil = std::nullopt);
void commitObjectPoses(const ObjectPoseSeq& objectPoses,
const std::string& providerName = "");
objpose::ObjectPoseMap getObjectPoses(const DateTime& now);
objpose::ObjectPoseMap getObjectPosesByProvider(const std::string& providerName, const DateTime& now);
objpose::ObjectPoseMap getObjectPosesByProvider(const std::string& providerName,
const DateTime& now);
wm::Entity* findObjectEntity(const ObjectID& objectID, const std::string& providerName = "");
wm::Entity* findObjectEntity(const ObjectID& objectID,
const std::string& providerName = "");
std::optional<simox::OrientedBoxf> getObjectOOBB(const ObjectID& id);
objpose::ProviderInfo getProviderInfo(const std::string& providerName);
objpose::AttachObjectToRobotNodeOutput attachObjectToRobotNode(const objpose::AttachObjectToRobotNodeInput& input);
objpose::DetachObjectFromRobotNodeOutput detachObjectFromRobotNode(const objpose::DetachObjectFromRobotNodeInput& input);
objpose::DetachAllObjectsFromRobotNodesOutput detachAllObjectsFromRobotNodes(const objpose::DetachAllObjectsFromRobotNodesInput& input);
objpose::AttachObjectToRobotNodeOutput
attachObjectToRobotNode(const objpose::AttachObjectToRobotNodeInput& input);
objpose::DetachObjectFromRobotNodeOutput
detachObjectFromRobotNode(const objpose::DetachObjectFromRobotNodeInput& input);
objpose::DetachAllObjectsFromRobotNodesOutput
detachAllObjectsFromRobotNodes(const objpose::DetachAllObjectsFromRobotNodesInput& input);
/**
......@@ -100,7 +101,8 @@ namespace armarx::armem::server::obj::instance
*
* @param synchronized Indicates whether the agent is already synchronized to the current time.
*/
void updateAttachement(ObjectPose& objectPose, VirtualRobot::RobotPtr agent,
void updateAttachement(ObjectPose& objectPose,
VirtualRobot::RobotPtr agent,
bool& synchronized) const;
......@@ -120,34 +122,26 @@ namespace armarx::armem::server::obj::instance
getObjectPosesInRange(const wm::Entity& entity, const DateTime& start, const DateTime& end);
private:
ObjectPoseMap getLatestObjectPoses() const;
void updateObjectPoses(
ObjectPoseMap& objectPoses,
const DateTime& now);
void updateObjectPoses(
ObjectPoseMap& objectPoses,
const DateTime& now,
VirtualRobot::RobotPtr agent,
bool& agentSynchronized
) const;
void updateObjectPose(
ObjectPose& objectPose,
const DateTime& now,
VirtualRobot::RobotPtr agent,
bool& agentSynchronized
) const;
void updateObjectPoses(ObjectPoseMap& objectPoses, const DateTime& now);
void updateObjectPoses(ObjectPoseMap& objectPoses,
const DateTime& now,
VirtualRobot::RobotPtr agent,
bool& agentSynchronized) const;
void updateObjectPose(ObjectPose& objectPose,
const DateTime& now,
VirtualRobot::RobotPtr agent,
bool& agentSynchronized) const;
ObjectPoseMap filterObjectPoses(const ObjectPoseMap& objectPoses) const;
void storeDetachedSnapshot(
wm::Entity& entity,
const arondto::ObjectInstance& data,
Time now,
bool commitAttachedPose);
void storeDetachedSnapshot(wm::Entity& entity,
const arondto::ObjectInstance& data,
Time now,
bool commitAttachedPose);
std::optional<wm::EntityInstance> findClassInstance(const ObjectID& objectID) const;
......@@ -156,7 +150,6 @@ namespace armarx::armem::server::obj::instance
private:
void storeScene(const std::string& filename, const armarx::objects::Scene& scene);
std::optional<armarx::objects::Scene> loadScene(const std::string& filename);
std::optional<armarx::objects::Scene> loadScene(const std::filesystem::path& path);
......@@ -168,7 +161,6 @@ namespace armarx::armem::server::obj::instance
public:
/// Loaded robot models identified by the robot name.
struct RobotsCache : public armarx::Logging
{
......@@ -177,8 +169,10 @@ namespace armarx::armem::server::obj::instance
std::map<std::string, VirtualRobot::RobotPtr> loaded;
VirtualRobot::RobotPtr get(const std::string& robotName, const std::string& providerName = "");
VirtualRobot::RobotPtr get(const std::string& robotName,
const std::string& providerName = "");
};
RobotsCache robots;
......@@ -192,7 +186,6 @@ namespace armarx::armem::server::obj::instance
private:
struct Properties
{
bool discardSnapshotsWhileAttached = true;
......@@ -201,7 +194,10 @@ namespace armarx::armem::server::obj::instance
std::string sceneSnapshotsPackage = armarx::ObjectFinder::DefaultObjectsPackageName;
std::string sceneSnapshotsDirectory = "scenes";
std::string sceneSnapshotsToLoad = "";
std::vector<std::string> getSceneSnapshotsToLoad() const;
};
Properties p;
......@@ -216,7 +212,6 @@ namespace armarx::armem::server::obj::instance
static const std::string timestampPlaceholder;
public:
struct RemoteGui
{
armarx::RemoteGui::Client::GroupBox group;
......@@ -229,15 +224,16 @@ namespace armarx::armem::server::obj::instance
armarx::RemoteGui::Client::CheckBox infiniteHistory;
armarx::RemoteGui::Client::CheckBox discardSnapshotsWhileAttached;
armarx::RemoteGui::Client::Button detachAllObjectsButton;
armarx::RemoteGui::Client::CheckBox detachAllObjectsCommitAttachedPoseCheckBox;
void setup(const Segment& data);
void update(Segment& data);
};
private:
std::unique_ptr<ArticulatedObjectVisu> visu;
};
}
} // namespace armarx::armem::server::obj::instance
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