Reader.h
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * ArmarX is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * ArmarX is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * @author Fabian Reister ( fabian dot reister at kit dot edu )
17 * @date 2021
18 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
19 * GNU General Public License
20 */
21
22#pragma once
23
24#include <mutex>
25#include <optional>
26
27#include <VirtualRobot/VirtualRobot.h>
28
30
33
34#include "interfaces.h"
35
36// #include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h>
37// #include <RobotAPI/libraries/armem/client/MemoryNameSystem.h>
38
39
41{
42
43 class Reader : virtual public ReaderInterface
44 {
45 public:
46 Reader() = default;
47 ~Reader() override = default;
48
49 void
53
54 void connect(armem::client::MemoryNameSystem& memoryNameSystem);
55
56 [[nodiscard]] bool
59 const std::optional<std::string>& providerName) const override;
60
61 std::optional<ArticulatedObject>
62 get(const std::string& name,
64 const std::optional<std::string>& providerName) const override;
67 const std::string& instanceName,
68 const std::optional<std::string>& providerName) const override;
69
70 std::optional<robot_state::RobotState>
71 queryState(const std::string& instanceName,
73 const std::optional<std::string>& providerName) const;
74 std::optional<robot_state::description::RobotDescription>
75 queryDescription(const std::string& name,
77 const std::optional<std::string>& providerName) const;
78
79 std::vector<robot_state::description::RobotDescription>
81 const std::optional<std::string>& providerName) const;
82
83 std::string getProviderName() const;
84 void setProviderName(const std::string& providerName);
85
86 protected:
87 std::optional<robot_state::RobotState>
89 std::optional<robot_state::description::RobotDescription>
91 std::vector<robot_state::description::RobotDescription>
93
94 private:
95 void updateKnownObjects(const armem::MemoryID& subscriptionID,
96 const std::vector<armem::MemoryID>& snapshotIDs);
97 void updateKnownObject(const armem::MemoryID& snapshotId);
98
99 const std::string propertyPrefix = "mem.obj.articulated.";
100
101 armem::client::Reader memoryReader;
102 std::mutex memoryWriterMutex;
103 };
104
105
106} // namespace armarx::armem::articulated_object
std::string timestamp()
std::optional< robot_state::RobotState > queryState(const std::string &instanceName, const armem::Time &timestamp, const std::optional< std::string > &providerName) const
Definition Reader.cpp:262
void connect(armem::client::MemoryNameSystem &memoryNameSystem)
Definition Reader.cpp:33
std::optional< ArticulatedObject > get(const std::string &name, const armem::Time &timestamp, const std::optional< std::string > &providerName) const override
Definition Reader.cpp:99
bool synchronize(ArticulatedObject &obj, const armem::Time &timestamp, const std::optional< std::string > &providerName) const override
Definition Reader.cpp:141
std::vector< robot_state::description::RobotDescription > queryDescriptions(const armem::Time &timestamp, const std::optional< std::string > &providerName) const
Definition Reader.cpp:164
std::optional< robot_state::description::RobotDescription > queryDescription(const std::string &name, const armem::Time &timestamp, const std::optional< std::string > &providerName) const
Definition Reader.cpp:215
std::optional< robot_state::description::RobotDescription > getRobotDescription(const armarx::armem::wm::Memory &memory) const
Definition Reader.cpp:361
void setProviderName(const std::string &providerName)
std::optional< robot_state::RobotState > getArticulatedObjectState(const armarx::armem::wm::Memory &memory) const
Definition Reader.cpp:339
void registerPropertyDefinitions(armarx::PropertyDefinitionsPtr &def)
Definition Reader.h:50
std::vector< robot_state::description::RobotDescription > getRobotDescriptions(const armarx::armem::wm::Memory &memory) const
Definition Reader.cpp:382
The memory name system (MNS) client.
Reads data from a memory server.
Definition Reader.h:25
Client-side working memory.
Brief description of class memory.
Definition memory.h:39
armarx::armem::robot_state::Robot ArticulatedObject
Definition types.h:140
armarx::armem::robot_state::description::RobotDescription ArticulatedObjectDescription
Definition types.h:138
armarx::core::time::DateTime Time
IceUtil::Handle< class PropertyDefinitionContainer > PropertyDefinitionsPtr
PropertyDefinitions smart pointer type.