multi_actuator_transmission.h
Go to the documentation of this file.
1 //
2 // Created by luotinkai on 2021/12/5.
3 //
4 
5 #pragma once
6 
7 #include <cassert>
8 #include <string>
9 #include <vector>
10 
13 
14 namespace transmission_interface
15 {
17 {
18 public:
19  MultiActuatorTransmission(const TransmissionInfo& transmission_info, std::vector<double> actuator_reduction,
20  double joint_reduction, double joint_offset = 0.0);
21 
22  void actuatorToJointEffort(const ActuatorData& act_data, JointData& jnt_data) override;
23  void actuatorToJointVelocity(const ActuatorData& act_data, JointData& jnt_data) override;
24  void actuatorToJointPosition(const ActuatorData& act_data, JointData& jnt_data) override;
25  void jointToActuatorEffort(const JointData& jnt_data, ActuatorData& act_data) override;
26  void jointToActuatorVelocity(const JointData& jnt_data, ActuatorData& act_data) override{};
27  void jointToActuatorPosition(const JointData& jnt_data, ActuatorData& act_data) override{};
28 
29  std::size_t numActuators() const override
30  {
31  return act_number_;
32  }
33  std::size_t numJoints() const override
34  {
35  return 1;
36  }
37 
38  const std::vector<double>& getActuatorReduction() const
39  {
40  return act_reduction_;
41  }
42  double getJointReduction() const
43  {
44  return jnt_reduction_;
45  }
46  double getJointOffset() const
47  {
48  return jnt_offset_;
49  }
50 
51 protected:
52  std::vector<double> act_reduction_;
53  double jnt_reduction_{};
54  double jnt_offset_{};
55  int act_number_ = 0;
56 };
57 
59  std::vector<double> actuator_reduction, double joint_reduction,
60  double joint_offset)
61  : act_reduction_(std::move(actuator_reduction)), jnt_reduction_(joint_reduction), jnt_offset_(joint_offset)
62 {
63  act_number_ = transmission_info.actuators_.size();
64  for (int i = 1; i < act_number_; ++i)
65  {
66  if (0.0 == act_reduction_[i])
67  throw TransmissionInterfaceException("Transmission actuators reduction ratios cannot be zero.");
68  }
69  if (0.0 == jnt_reduction_)
70  throw TransmissionInterfaceException("Transmission joint reduction ratios cannot be zero.");
71 }
73 {
74  const std::vector<double>& ar = act_reduction_;
75  double ad = (*act_data.effort[0] * ar[0]);
76  for (int i = 1; i < act_number_; ++i)
77  {
78  ad = ad + (*act_data.effort[i] * ar[i]);
79  }
80  *jnt_data.effort[0] = jnt_reduction_ * ad;
81 }
82 
84 {
85  const std::vector<double>& ar = act_reduction_;
86 
87  double ad = (*act_data.velocity[0] / ar[0]);
88  for (int i = 1; i < act_number_; ++i)
89  {
90  ad = ad + (*act_data.velocity[i] / ar[i]);
91  }
92  *jnt_data.velocity[0] = ad / (2.0 * jnt_reduction_);
93 }
94 
96 {
97  const std::vector<double>& ar = act_reduction_;
98 
99  *jnt_data.position[0] = (*act_data.position[0] / ar[0]) / jnt_reduction_ + jnt_offset_;
100 }
101 
103 {
104  const std::vector<double>& ar = act_reduction_;
105 
106  for (int i = 0; i < act_number_; ++i)
107  {
108  *act_data.effort[i] = (*jnt_data.effort[0] / jnt_reduction_) / (act_number_ * ar[i]);
109  }
110 }
111 
112 } // namespace transmission_interface
transmission_interface::MultiActuatorTransmission::numActuators
std::size_t numActuators() const override
Definition: multi_actuator_transmission.h:29
transmission_interface::MultiActuatorTransmission::jointToActuatorEffort
void jointToActuatorEffort(const JointData &jnt_data, ActuatorData &act_data) override
Definition: multi_actuator_transmission.h:102
transmission_interface::ActuatorData::velocity
std::vector< double * > velocity
transmission_interface::MultiActuatorTransmission
Definition: multi_actuator_transmission.h:16
transmission_interface::MultiActuatorTransmission::act_number_
int act_number_
Definition: multi_actuator_transmission.h:55
transmission_interface
transmission_interface::MultiActuatorTransmission::actuatorToJointPosition
void actuatorToJointPosition(const ActuatorData &act_data, JointData &jnt_data) override
Definition: multi_actuator_transmission.h:95
transmission_interface::MultiActuatorTransmission::actuatorToJointEffort
void actuatorToJointEffort(const ActuatorData &act_data, JointData &jnt_data) override
Definition: multi_actuator_transmission.h:72
transmission_interface::TransmissionInfo::actuators_
std::vector< ActuatorInfo > actuators_
transmission_interface::JointData::position
std::vector< double * > position
transmission_interface::MultiActuatorTransmission::jnt_reduction_
double jnt_reduction_
Definition: multi_actuator_transmission.h:53
transmission_interface::MultiActuatorTransmission::getJointReduction
double getJointReduction() const
Definition: multi_actuator_transmission.h:42
transmission_interface::JointData
transmission_interface::MultiActuatorTransmission::jnt_offset_
double jnt_offset_
Definition: multi_actuator_transmission.h:54
transmission.h
transmission_interface::MultiActuatorTransmission::numJoints
std::size_t numJoints() const override
Definition: multi_actuator_transmission.h:33
transmission_interface::ActuatorData::effort
std::vector< double * > effort
transmission_interface::Transmission
transmission_interface::ActuatorData::position
std::vector< double * > position
transmission_interface_exception.h
transmission_interface::MultiActuatorTransmission::getJointOffset
double getJointOffset() const
Definition: multi_actuator_transmission.h:46
transmission_interface::MultiActuatorTransmission::actuatorToJointVelocity
void actuatorToJointVelocity(const ActuatorData &act_data, JointData &jnt_data) override
Definition: multi_actuator_transmission.h:83
transmission_interface::JointData::effort
std::vector< double * > effort
transmission_interface::MultiActuatorTransmission::jointToActuatorPosition
void jointToActuatorPosition(const JointData &jnt_data, ActuatorData &act_data) override
Definition: multi_actuator_transmission.h:27
transmission_interface::MultiActuatorTransmission::jointToActuatorVelocity
void jointToActuatorVelocity(const JointData &jnt_data, ActuatorData &act_data) override
Definition: multi_actuator_transmission.h:26
transmission_interface::JointData::velocity
std::vector< double * > velocity
std
transmission_interface::MultiActuatorTransmission::getActuatorReduction
const std::vector< double > & getActuatorReduction() const
Definition: multi_actuator_transmission.h:38
transmission_interface::TransmissionInterfaceException
transmission_interface::MultiActuatorTransmission::MultiActuatorTransmission
MultiActuatorTransmission(const TransmissionInfo &transmission_info, std::vector< double > actuator_reduction, double joint_reduction, double joint_offset=0.0)
Definition: multi_actuator_transmission.h:58
transmission_interface::ActuatorData
transmission_interface::TransmissionInfo
transmission_interface::MultiActuatorTransmission::act_reduction_
std::vector< double > act_reduction_
Definition: multi_actuator_transmission.h:52


rm_hw
Author(s): Qiayuan Liao
autogenerated on Tue May 6 2025 02:23:44