data_package.h
Go to the documentation of this file.
1 // this is for emacs file handling -*- mode: c++; indent-tabs-mode: nil -*-
2 
3 // -- BEGIN LICENSE BLOCK ----------------------------------------------
4 // Copyright 2019 FZI Forschungszentrum Informatik
5 // Created on behalf of Universal Robots A/S
6 //
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
10 //
11 // http://www.apache.org/licenses/LICENSE-2.0
12 //
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 // -- END LICENSE BLOCK ------------------------------------------------
19 
20 //----------------------------------------------------------------------
27 //----------------------------------------------------------------------
28 
29 #ifndef UR_CLIENT_LIBRARY_DATA_PACKAGE_H_INCLUDED
30 #define UR_CLIENT_LIBRARY_DATA_PACKAGE_H_INCLUDED
31 
32 #include <unordered_map>
33 #include <variant>
34 #include <vector>
35 
38 
39 namespace urcl
40 {
41 namespace rtde_interface
42 {
46 enum class RUNTIME_STATE : uint32_t
47 {
48  STOPPING = 0,
49  STOPPED = 1,
50  PLAYING = 2,
51  PAUSING = 3,
52  PAUSED = 4,
53  RESUMING = 5
54 };
55 
60 class DataPackage : public RTDEPackage
61 {
62 public:
63  using _rtde_type_variant = std::variant<bool, uint8_t, uint32_t, uint64_t, int32_t, double, vector3d_t, vector6d_t,
65 
66  DataPackage() = delete;
67 
68  DataPackage(const DataPackage& other) : DataPackage(other.recipe_)
69  {
70  this->data_ = other.data_;
72  }
73 
81  DataPackage(const std::vector<std::string>& recipe, const uint16_t& protocol_version = 2)
82  : RTDEPackage(PackageType::RTDE_DATA_PACKAGE), recipe_(recipe), protocol_version_(protocol_version)
83  {
84  }
85  virtual ~DataPackage() = default;
86 
90  void initEmpty();
91 
100  virtual bool parseWith(comm::BinParser& bp);
106  virtual std::string toString() const;
107 
115  size_t serializePackage(uint8_t* buffer);
116 
127  template <typename T>
128  bool getData(const std::string& name, T& val)
129  {
130  if (data_.find(name) != data_.end())
131  {
132  val = std::get<T>(data_[name]);
133  }
134  else
135  {
136  return false;
137  }
138  return true;
139  }
140 
151  template <typename T, size_t N>
152  bool getData(const std::string& name, std::bitset<N>& val)
153  {
154  static_assert(sizeof(T) * 8 >= N, "Bitset is too large for underlying variable");
155 
156  if (data_.find(name) != data_.end())
157  {
158  val = std::bitset<N>(std::get<T>(data_[name]));
159  }
160  else
161  {
162  return false;
163  }
164  return true;
165  }
166 
177  template <typename T>
178  bool setData(const std::string& name, T& val)
179  {
180  if (data_.find(name) != data_.end())
181  {
182  data_[name] = val;
183  }
184  else
185  {
186  return false;
187  }
188  return true;
189  }
190 
196  void setRecipeID(const uint8_t& recipe_id)
197  {
198  recipe_id_ = recipe_id;
199  }
200 
201 private:
202  // Const would be better here
203  static std::unordered_map<std::string, _rtde_type_variant> g_type_list;
204  uint8_t recipe_id_;
205  std::unordered_map<std::string, _rtde_type_variant> data_;
206  std::vector<std::string> recipe_;
208 };
209 
210 } // namespace rtde_interface
211 } // namespace urcl
212 
213 #endif // ifndef UR_CLIENT_LIBRARY_DATA_PACKAGE_H_INCLUDED
urcl::rtde_interface::DataPackage::toString
virtual std::string toString() const
Produces a human readable representation of the package object.
Definition: data_package.cpp:604
urcl::rtde_interface::DataPackage::parseWith
virtual bool parseWith(comm::BinParser &bp)
Sets the attributes of the package by parsing a serialized representation of the package.
Definition: data_package.cpp:582
urcl::rtde_interface::RUNTIME_STATE::STOPPING
@ STOPPING
urcl::rtde_interface::DataPackage::setRecipeID
void setRecipeID(const uint8_t &recipe_id)
Setter of the recipe id value used to identify the used recipe to the robot.
Definition: data_package.h:196
urcl::rtde_interface::DataPackage
The DataPackage class handles communication in the form of RTDE data packages both to and from the ro...
Definition: data_package.h:60
types.h
urcl
Definition: bin_parser.h:36
urcl::rtde_interface::RUNTIME_STATE
RUNTIME_STATE
Possible values for the runtime state.
Definition: data_package.h:46
urcl::rtde_interface::DataPackage::DataPackage
DataPackage(const std::vector< std::string > &recipe, const uint16_t &protocol_version=2)
Creates a new DataPackage object, based on a given recipe.
Definition: data_package.h:81
urcl::rtde_interface::DataPackage::recipe_
std::vector< std::string > recipe_
Definition: data_package.h:206
urcl::rtde_interface::PackageType::RTDE_DATA_PACKAGE
@ RTDE_DATA_PACKAGE
urcl::vector6d_t
std::array< double, 6 > vector6d_t
Definition: types.h:30
urcl::rtde_interface::DataPackage::setData
bool setData(const std::string &name, T &val)
Set a data field in the DataPackage.
Definition: data_package.h:178
urcl::rtde_interface::DataPackage::protocol_version_
uint16_t protocol_version_
Definition: data_package.h:207
urcl::rtde_interface::DataPackage::DataPackage
DataPackage()=delete
urcl::rtde_interface::DataPackage::_rtde_type_variant
std::variant< bool, uint8_t, uint32_t, uint64_t, int32_t, double, vector3d_t, vector6d_t, vector6int32_t, vector6uint32_t, std::string > _rtde_type_variant
Definition: data_package.h:64
urcl::vector6uint32_t
std::array< uint32_t, 6 > vector6uint32_t
Definition: types.h:32
urcl::rtde_interface::RUNTIME_STATE::PLAYING
@ PLAYING
urcl::rtde_interface::DataPackage::DataPackage
DataPackage(const DataPackage &other)
Definition: data_package.h:68
urcl::vector6int32_t
std::array< int32_t, 6 > vector6int32_t
Definition: types.h:31
urcl::rtde_interface::DataPackage::getData
bool getData(const std::string &name, T &val)
Get a data field from the DataPackage.
Definition: data_package.h:128
rtde_package.h
urcl::rtde_interface::DataPackage::~DataPackage
virtual ~DataPackage()=default
urcl::rtde_interface::RTDEPackage
Definition: rtde_package.h:43
urcl::rtde_interface::RUNTIME_STATE::RESUMING
@ RESUMING
urcl::rtde_interface::DataPackage::recipe_id_
uint8_t recipe_id_
Definition: data_package.h:204
urcl::rtde_interface::RUNTIME_STATE::STOPPED
@ STOPPED
urcl::rtde_interface::PackageType
PackageType
Possible package types.
Definition: rtde/package_header.h:45
urcl::rtde_interface::DataPackage::serializePackage
size_t serializePackage(uint8_t *buffer)
Serializes the package.
Definition: data_package.cpp:616
urcl::rtde_interface::DataPackage::data_
std::unordered_map< std::string, _rtde_type_variant > data_
Definition: data_package.h:205
urcl::rtde_interface::DataPackage::g_type_list
static std::unordered_map< std::string, _rtde_type_variant > g_type_list
Definition: data_package.h:203
urcl::vector3d_t
std::array< double, 3 > vector3d_t
Definition: types.h:29
urcl::comm::BinParser
The BinParser class handles a byte buffer and functionality to iteratively parse the content.
Definition: bin_parser.h:44
urcl::rtde_interface::DataPackage::initEmpty
void initEmpty()
Initializes to contained list with empty values based on the recipe.
Definition: data_package.cpp:570
urcl::rtde_interface::RUNTIME_STATE::PAUSING
@ PAUSING
urcl::rtde_interface::RUNTIME_STATE::PAUSED
@ PAUSED
urcl::rtde_interface::DataPackage::getData
bool getData(const std::string &name, std::bitset< N > &val)
Get a data field from the DataPackage as bitset.
Definition: data_package.h:152


ur_client_library
Author(s): Thomas Timm Andersen, Simon Rasmussen, Felix Exner, Lea Steffen, Tristan Schnell
autogenerated on Mon May 26 2025 02:35:58