39 JointWall(
double soft_upper_joint_position_limit,
40 double soft_lower_joint_position_limit,
43 double PD_zone_stiffness,
44 double PD_zone_damping,
45 double D_zone_damping);
101 static bool inRange(
double low,
double high,
double x);
115 void init(
double q,
double dq);
136 template <
size_t num_dof>
152 const std::array<double, num_dof>& soft_lower_joint_position_limits,
153 const std::array<double, num_dof>& PD_zone_widths,
154 const std::array<double, num_dof>& D_zone_widths,
155 const std::array<double, num_dof>& PD_zone_stiffnesses,
156 const std::array<double, num_dof>& PD_zone_dampings,
157 const std::array<double, num_dof>& D_zone_dampings) {
158 for (
size_t i = 0; i < num_dof; i++) {
159 joint_walls_.at(i) = std::make_unique<JointWall>(
160 soft_upper_joint_position_limits[i], soft_lower_joint_position_limits[i],
161 PD_zone_widths[i], D_zone_widths[i], PD_zone_stiffnesses[i], PD_zone_dampings[i],
174 std::array<double, num_dof>
computeTorque(
const std::array<double, num_dof>& q,
175 const std::array<double, num_dof>& dq) {
176 std::array<double, num_dof> torque;
177 for (
size_t i = 0; i < num_dof; i++) {
178 torque[i] = joint_walls_[i]->computeTorque(q[i], dq[i]);
190 for (
auto& jw : joint_walls_) {
MotionInWall getMotionInWall(double q, double dq) const
Checks the motion type in joint wall.
double PD_zone_stiffness_
std::array< std::unique_ptr< JointWall >, num_dof > joint_walls_
void reset()
Resets the initialized flags of all walls to false.
void reset()
Resets the initialized flag to false.
std::array< double, num_dof > computeTorque(const std::array< double, num_dof > &q, const std::array< double, num_dof > &dq)
Computes the torques generated by virtual walls.
static bool inRange(double low, double high, double x)
Checks if x is in range [low, high].
JointWallContainer(const std::array< double, num_dof > &soft_upper_joint_position_limits, const std::array< double, num_dof > &soft_lower_joint_position_limits, const std::array< double, num_dof > &PD_zone_widths, const std::array< double, num_dof > &D_zone_widths, const std::array< double, num_dof > &PD_zone_stiffnesses, const std::array< double, num_dof > &PD_zone_dampings, const std::array< double, num_dof > &D_zone_dampings)
Creates a new virtual joint position wall instance.
void adjustMovingWall(double q, double dq)
Moves the wall with given state if the state is initialized inside the wall.
A class that offers an implementation of a virtual wall for a single joint.
double computeTorque(double q, double dq)
Computes the torque with given q and dq.
double soft_upper_joint_position_limit_
MotionInWall
Indicates the status of moving wall, which occurs after initializing the state inside a wall...
static double positiveCheck(double value)
Check if the input is positive number, if not print error and return its abs.
double soft_lower_joint_position_limit_
void init(double q, double dq)
Initializes the joint wall computation with initial states.
JointWall()=delete
Creates a JointWall instance with default params.
A class that organizes multiple virtual joint walls.