rm_control
Loading...
Searching...
No Matches
hybrid_joint_interface.h
Go to the documentation of this file.
1//
2// Created by qiayuan on 2021/11/5.
3//
4#pragma once
5#include <hardware_interface/internal/hardware_resource_manager.h>
6#include <hardware_interface/joint_state_interface.h>
7
8namespace rm_control
9{
10class HybridJointHandle : public hardware_interface::JointStateHandle
11{
12public:
13 HybridJointHandle() = default;
14
15 HybridJointHandle(const JointStateHandle& js, double* posDes, double* velDes, double* kp, double* kd, double* ff)
16 : JointStateHandle(js), posDes_(posDes), velDes_(velDes), kp_(kp), kd_(kd), ff_(ff)
17 {
18 if (posDes_ == nullptr)
19 {
20 throw hardware_interface::HardwareInterfaceException("Cannot create handle '" + js.getName() +
21 "'. Position desired data pointer is null.");
22 }
23 if (velDes_ == nullptr)
24 {
25 throw hardware_interface::HardwareInterfaceException("Cannot create handle '" + js.getName() +
26 "'. Velocity desired data pointer is null.");
27 }
28 if (kp_ == nullptr)
29 {
30 throw hardware_interface::HardwareInterfaceException("Cannot create handle '" + js.getName() +
31 "'. Kp data pointer is null.");
32 }
33 if (kd_ == nullptr)
34 {
35 throw hardware_interface::HardwareInterfaceException("Cannot create handle '" + js.getName() +
36 "'. Kd data pointer is null.");
37 }
38 if (ff_ == nullptr)
39 {
40 throw hardware_interface::HardwareInterfaceException("Cannot create handle '" + js.getName() +
41 "'. Feedforward data pointer is null.");
42 }
43 }
44 void setPositionDesired(double cmd)
45 {
46 assert(posDes_);
47 *posDes_ = cmd;
48 }
49 void setVelocityDesired(double cmd)
50 {
51 assert(velDes_);
52 *velDes_ = cmd;
53 }
54 void setKp(double cmd)
55 {
56 assert(kp_);
57 *kp_ = cmd;
58 }
59 void setKd(double cmd)
60 {
61 assert(kd_);
62 *kd_ = cmd;
63 }
64 void setFeedforward(double cmd)
65 {
66 assert(ff_);
67 *ff_ = cmd;
68 }
69 void setCommand(double pos_des, double vel_des, double kp, double kd, double ff)
70 {
71 setPositionDesired(pos_des);
72 setVelocityDesired(vel_des);
73 setKp(kp);
74 setKd(kd);
76 }
78 {
79 assert(posDes_);
80 return *posDes_;
81 }
83 {
84 assert(velDes_);
85 return *velDes_;
86 }
87 double getKp()
88 {
89 assert(kp_);
90 return *kp_;
91 }
92 double getKd()
93 {
94 assert(kd_);
95 return *kd_;
96 }
98 {
99 assert(ff_);
100 return *ff_;
101 }
102
103private:
104 double* posDes_ = { nullptr };
105 double* velDes_ = { nullptr };
106 double* kp_ = { nullptr };
107 double* kd_ = { nullptr };
108 double* ff_ = { nullptr };
109};
110
112 : public hardware_interface::HardwareResourceManager<HybridJointHandle, hardware_interface::ClaimResources>
113{
114};
115
116} // namespace rm_control
Definition hybrid_joint_interface.h:11
double getFeedforward()
Definition hybrid_joint_interface.h:97
double getVelocityDesired()
Definition hybrid_joint_interface.h:82
void setCommand(double pos_des, double vel_des, double kp, double kd, double ff)
Definition hybrid_joint_interface.h:69
double getPositionDesired()
Definition hybrid_joint_interface.h:77
double getKd()
Definition hybrid_joint_interface.h:92
void setKp(double cmd)
Definition hybrid_joint_interface.h:54
double getKp()
Definition hybrid_joint_interface.h:87
HybridJointHandle(const JointStateHandle &js, double *posDes, double *velDes, double *kp, double *kd, double *ff)
Definition hybrid_joint_interface.h:15
void setKd(double cmd)
Definition hybrid_joint_interface.h:59
void setPositionDesired(double cmd)
Definition hybrid_joint_interface.h:44
void setVelocityDesired(double cmd)
Definition hybrid_joint_interface.h:49
void setFeedforward(double cmd)
Definition hybrid_joint_interface.h:64
Definition hybrid_joint_interface.h:113
Definition actuator_extra_interface.h:44