group_command.cpp
Go to the documentation of this file.
1 #include "group_command.hpp"
2 
3 namespace hebi {
4 
5 GroupCommand::GroupCommand(size_t number_of_modules)
6  : internal_(hebiGroupCommandCreate(number_of_modules)), number_of_modules_(number_of_modules) {
7  for (size_t i = 0; i < number_of_modules_; i++)
9 }
10 
12  if (internal_ != nullptr)
14 }
15 
16 size_t GroupCommand::size() const { return number_of_modules_; }
17 
18 Command& GroupCommand::operator[](size_t index) { return commands_[index]; }
19 
20 const Command& GroupCommand::operator[](size_t index) const { return commands_[index]; }
21 
23 
24 bool GroupCommand::readGains(const std::string& file) {
25  return hebiGroupCommandReadGains(internal_, file.c_str()) == HebiStatusSuccess;
26 }
27 
28 bool GroupCommand::writeGains(const std::string& file) const {
30 }
31 
32 void GroupCommand::setPosition(const Eigen::VectorXd& position) {
33  if (position.size() != number_of_modules_)
34  return;
35  for (size_t i = 0; i < number_of_modules_; ++i)
36  commands_[i].actuator().position().set(position[i]);
37 }
38 void GroupCommand::setVelocity(const Eigen::VectorXd& velocity) {
39  if (velocity.size() != number_of_modules_)
40  return;
41  for (size_t i = 0; i < number_of_modules_; ++i)
42  commands_[i].actuator().velocity().set(static_cast<float>(velocity[i]));
43 }
44 void GroupCommand::setEffort(const Eigen::VectorXd& effort) {
45  if (effort.size() != number_of_modules_)
46  return;
47  for (size_t i = 0; i < number_of_modules_; ++i)
48  commands_[i].actuator().effort().set(static_cast<float>(effort[i]));
49 }
50 
51 void GroupCommand::setSpringConstant(const Eigen::VectorXd& springConstant) {
52  if (springConstant.size() != number_of_modules_)
53  return;
54  for (size_t i = 0; i < number_of_modules_; ++i)
55  commands_[i].settings().actuator().springConstant().set(static_cast<float>(springConstant[i]));
56 }
57 
58 Eigen::VectorXd GroupCommand::getPosition() const {
59  Eigen::VectorXd res(number_of_modules_);
60  for (size_t i = 0; i < number_of_modules_; ++i) {
61  const auto& cmd = commands_[i].actuator().position();
62  res[i] = (cmd) ? cmd.get() : std::numeric_limits<float>::quiet_NaN();
63  }
64  return res;
65 }
66 Eigen::VectorXd GroupCommand::getVelocity() const {
67  Eigen::VectorXd res(number_of_modules_);
68  for (size_t i = 0; i < number_of_modules_; ++i) {
69  const auto& cmd = commands_[i].actuator().velocity();
70  res[i] = (cmd) ? cmd.get() : std::numeric_limits<float>::quiet_NaN();
71  }
72  return res;
73 }
74 Eigen::VectorXd GroupCommand::getEffort() const {
75  Eigen::VectorXd res(number_of_modules_);
76  for (size_t i = 0; i < number_of_modules_; ++i) {
77  const auto& cmd = commands_[i].actuator().effort();
78  res[i] = (cmd) ? cmd.get() : std::numeric_limits<float>::quiet_NaN();
79  }
80  return res;
81 }
82 Eigen::VectorXd GroupCommand::getSpringConstant() const {
83  Eigen::VectorXd res(number_of_modules_);
84  for (size_t i = 0; i < number_of_modules_; ++i) {
85  const auto& cmd = commands_[i].settings().actuator().springConstant();
86  res[i] = (cmd) ? cmd.get() : std::numeric_limits<float>::quiet_NaN();
87  }
88  return res;
89 }
90 
91 void GroupCommand::getPosition(Eigen::VectorXd& out) const {
92  if (out.size() != number_of_modules_) {
93  out.resize(number_of_modules_);
94  }
95 
96  for (size_t i = 0; i < number_of_modules_; ++i) {
97  const auto& cmd = commands_[i].actuator().position();
98  out[i] = (cmd) ? cmd.get() : std::numeric_limits<float>::quiet_NaN();
99  }
100 }
101 void GroupCommand::getVelocity(Eigen::VectorXd& out) const {
102  if (out.size() != number_of_modules_) {
103  out.resize(number_of_modules_);
104  }
105 
106  for (size_t i = 0; i < number_of_modules_; ++i) {
107  const auto& cmd = commands_[i].actuator().velocity();
108  out[i] = (cmd) ? cmd.get() : std::numeric_limits<float>::quiet_NaN();
109  }
110 }
111 void GroupCommand::getEffort(Eigen::VectorXd& out) const {
112  if (out.size() != number_of_modules_) {
113  out.resize(number_of_modules_);
114  }
115 
116  for (size_t i = 0; i < number_of_modules_; ++i) {
117  const auto& cmd = commands_[i].actuator().effort();
118  out[i] = (cmd) ? cmd.get() : std::numeric_limits<float>::quiet_NaN();
119  }
120 }
121 void GroupCommand::getSpringConstant(Eigen::VectorXd& out) const {
122  if (out.size() != number_of_modules_) {
123  out.resize(number_of_modules_);
124  }
125 
126  for (size_t i = 0; i < number_of_modules_; ++i) {
127  const auto& cmd = commands_[i].settings().actuator().springConstant();
128  out[i] = (cmd) ? cmd.get() : std::numeric_limits<float>::quiet_NaN();
129  }
130 }
131 
132 } // namespace hebi
GroupCommand(size_t number_of_modules)
Create a group command with the specified number of modules.
HebiStatusCode hebiGroupCommandReadGains(HebiGroupCommandPtr command, const char *file)
Import gains from a file into a GroupCommand object.
Command objects have various fields that can be set; when sent to the module, these fields control in...
Definition: command.hpp:33
Definition: arm.cpp:5
Eigen::VectorXd getVelocity() const
Convenience function for returning commanded velocity values.
~GroupCommand() noexcept
Destructor cleans up group command object as necessary.
HebiGroupCommandPtr hebiGroupCommandCreate(size_t size)
Creates a GroupCommand for a group with the specified number of modules.
void hebiGroupCommandClear(HebiGroupCommandPtr command)
Clears all data in the GroupCommand object.
HebiCommandPtr hebiGroupCommandGetModuleCommand(HebiGroupCommandPtr command, size_t module_index)
Get an individual command for a particular module at index module_index.
size_t size() const
Returns the number of module commands in this group command.
const size_t number_of_modules_
Eigen::VectorXd getSpringConstant() const
Convenience function for returning commanded spring constant values.
Eigen::VectorXd getPosition() const
Convenience function for returning commanded position values.
void hebiGroupCommandRelease(HebiGroupCommandPtr command)
Frees resources created by the GroupCommand object.
Eigen::VectorXd getEffort() const
Convenience function for returning commanded effort values.
bool readGains(const std::string &file)
Import the gains from a file into this GroupCommand object.
Command & operator[](size_t index)
Access the command for an individual module.
HebiGroupCommandPtr internal_
std::vector< Command > commands_
bool writeGains(const std::string &file) const
Export the gains from this GroupCommand object into a file, creating it as necessary.
void setVelocity(const Eigen::VectorXd &velocity)
Convenience function for setting velocity commands from Eigen vectors.
HebiStatusCode hebiGroupCommandWriteGains(HebiGroupCommandPtr command, const char *file)
Export gains from a GroupCommand object into a file.
void setSpringConstant(const Eigen::VectorXd &springConstant)
Convenience function for setting spring constant commands from Eigen vectors.
void setPosition(const Eigen::VectorXd &position)
Convenience function for setting position commands from Eigen vectors.
void setEffort(const Eigen::VectorXd &effort)
Convenience function for setting effort commands from Eigen vectors.
void clear()
Clears all data in this GroupCommand object; this returns to the state the GroupCommand was at time o...


hebi_cpp_api_ros
Author(s): Chris Bollinger , Matthew Tesch
autogenerated on Thu May 28 2020 03:14:44