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

Add robot state

parent d000fb03
No related branches found
No related tags found
No related merge requests found
......@@ -3,6 +3,7 @@ armarx_component_set_name("ObjectPoseObserver")
set(COMPONENT_LIBS
ArmarXCore ArmarXCoreInterfaces
ArmarXGuiComponentPlugins
RobotAPIComponentPlugins
${PROJECT_NAME}Interfaces
......
......@@ -71,6 +71,7 @@ namespace armarx
void ObjectPoseObserver::onInitObserver()
{
usingTopicFromProperty("ObjectPoseTopicName");
this->robot = RobotState::addRobot("robot", VirtualRobot::RobotIO::RobotDescription::eStructure);
}
void ObjectPoseObserver::onConnectObserver()
......@@ -101,7 +102,13 @@ namespace armarx
std::scoped_lock lock(dataMutex);
if (providers.count(providerName) == 0)
{
ARMARX_VERBOSE << "New provider '" << providerName << "' available.";
std::stringstream ss;
for (const auto& id : info.supportedObjects)
{
ss << "- " << id << "\n";
}
ARMARX_VERBOSE << "New provider '" << providerName << "' available.\n"
<< "Supported objects: \n" << ss.str();
}
providers[providerName] = info;
......@@ -148,7 +155,7 @@ namespace armarx
{
for (const auto& [name, info] : providers)
{
// ToDo: optimize look up by using sets.
// ToDo: optimize look.
if (std::find(info.supportedObjects.begin(), info.supportedObjects.end(), objectID) != info.supportedObjects.end())
{
requests[name].push_back(objectID);
......@@ -171,22 +178,41 @@ namespace armarx
objpose::ProviderInfoMap ObjectPoseObserver::getAvailableProvidersWithInfo(const Ice::Current&)
{
return {};
return providers;
}
Ice::StringSeq ObjectPoseObserver::getAvailableProviderNames(const Ice::Current&)
{
return {};
Ice::StringSeq names;
for (const auto& [name, _] : providers)
{
names.push_back(name);
}
return names;
}
objpose::ProviderInfo ObjectPoseObserver::getProviderInfo(const std::string& providerName, const Ice::Current&)
{
return {};
try
{
return providers.at(providerName);
}
catch (const std::out_of_range&)
{
std::stringstream ss;
ss << "No provider with name '" << providerName << "' available.\n";
ss << "Available are:\n";
for (const auto& [name, _] : providers)
{
ss << "- '" << name << "'\n";
}
throw std::out_of_range(ss.str());
}
}
bool ObjectPoseObserver::hasProvider(const std::string& providerName, const Ice::Current&)
{
return {};
return providers.count(providerName) > 0;
}
......@@ -202,6 +228,20 @@ namespace armarx
}
void ObjectPoseObserver::createRemoteGuiTab()
{
using namespace armarx::RemoteGui::Client;
VBoxLayout root = {};
RemoteGui_createTab(getName(), root, &tab);
}
void ObjectPoseObserver::RemoteGui_update()
{
}
void ObjectPoseObserver::handleProviderUpdate(const std::string& providerName)
{
// Initialized to 0 on first access.
......
......@@ -26,8 +26,11 @@
#include <ArmarXCore/observers/Observer.h>
#include <ArmarXGui/libraries/ArmarXGuiComponentPlugins/LightweightRemoteGuiComponentPlugin.h>
#include <RobotAPI/interface/objectpose/ObjectPoseObserver.h>
#include <RobotAPI/libraries/RobotAPIComponentPlugins/ArVizComponentPlugin.h>
#include <RobotAPI/libraries/RobotAPIComponentPlugins/RobotStateComponentPlugin.h>
#include "ObjectFinder.h"
......@@ -69,9 +72,13 @@ namespace armarx
class ObjectPoseObserver :
virtual public Observer
, virtual public objpose::ObjectPoseObserverInterface
, virtual public armarx::RobotStateComponentPluginUser
, virtual public armarx::LightweightRemoteGuiComponentPluginUser
, virtual public armarx::ArVizComponentPluginUser
{
public:
using RobotState = armarx::RobotStateComponentPluginUser;
/// @see armarx::ManagedIceObject::getDefaultName()
std::string getDefaultName() const override;
......@@ -100,6 +107,11 @@ namespace armarx
StringIntDictionary getAllUpdateCounters(ICE_CURRENT_ARG) override;
// Remote GUI
void createRemoteGuiTab();
void RemoteGui_update() override;
protected:
void onInitObserver() override;
......@@ -120,8 +132,8 @@ namespace armarx
private:
Ice::StringSeq getAvailableProviderNames();
std::mutex robotMutex;
VirtualRobot::RobotPtr robot;
std::mutex dataMutex;
objpose::ProviderInfoMap providers;
......@@ -139,6 +151,12 @@ namespace armarx
};
Visu visu;
struct RemoteGuiTab : RemoteGui::Client::Tab
{
};
RemoteGuiTab tab;
};
}
......
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