Skip to content

Commit 3778da6

Browse files
committed
enable pose-only goal in AdmittanceRule
1 parent f63c3c5 commit 3778da6

File tree

3 files changed

+43
-15
lines changed

3 files changed

+43
-15
lines changed

admittance_controller/include/admittance_controller/admittance_rule.hpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "kinematics_interface/kinematics_interface.hpp"
3030
#include "pluginlib/class_loader.hpp"
3131
#include "trajectory_msgs/msg/joint_trajectory_point.hpp"
32+
#include "geometry_msgs/msg/pose.hpp"
3233

3334
namespace admittance_controller
3435
{
@@ -111,13 +112,14 @@ class AdmittanceRule
111112
/**
112113
* Calculate all transforms needed for admittance control using the loader kinematics plugin. If
113114
* the transform does not exist in the kinematics model, then TF will be used for lookup. The
114-
* return value is true if all transformation are calculated without an error \param[in]
115-
* current_joint_state current joint state of the robot \param[in] reference_joint_state input
116-
* joint state reference \param[out] success true if no calls to the kinematics interface fail
115+
* return value is true if all transformation are calculated without an error
116+
* \param[in] current_joint_state current joint state of the robot
117+
* \param[in] reference_pose input ft sensor reference pose
118+
* \param[out] success true if no calls to the kinematics interface fail
117119
*/
118120
bool get_all_transforms(
119121
const trajectory_msgs::msg::JointTrajectoryPoint & current_joint_state,
120-
const trajectory_msgs::msg::JointTrajectoryPoint & reference_joint_state);
122+
const geometry_msgs::msg::Pose & reference_pose);
121123

122124
/**
123125
* Updates parameter_ struct if any parameters have changed since last update. Parameter dependent
@@ -132,14 +134,15 @@ class AdmittanceRule
132134
*
133135
* \param[in] current_joint_state current joint state of the robot
134136
* \param[in] measured_wrench most recent measured wrench from force torque sensor
135-
* \param[in] reference_joint_state input joint state reference
137+
* \param[in] reference_pose input joint state reference
136138
* \param[in] period time in seconds since last controller update
137139
* \param[out] desired_joint_state joint state reference after the admittance offset is applied to
138140
* the input reference
139141
*/
140142
controller_interface::return_type update(
141143
const trajectory_msgs::msg::JointTrajectoryPoint & current_joint_state,
142144
const geometry_msgs::msg::Wrench & measured_wrench,
145+
const geometry_msgs::msg::Pose & reference_pose,
143146
const trajectory_msgs::msg::JointTrajectoryPoint & reference_joint_state,
144147
const rclcpp::Duration & period,
145148
trajectory_msgs::msg::JointTrajectoryPoint & desired_joint_states);
@@ -152,6 +155,14 @@ class AdmittanceRule
152155
*/
153156
const control_msgs::msg::AdmittanceControllerState & get_controller_state();
154157

158+
/**
159+
* Explanation - uses kinematics
160+
*
161+
* \param[in] state_message message
162+
* \param[out] state_message message
163+
*/
164+
geometry_msgs::msg::Pose initialize_goal_pose(const trajectory_msgs::msg::JointTrajectoryPoint & current_joint_state);
165+
155166
public:
156167
// admittance config parameters
157168
std::shared_ptr<admittance_controller::ParamListener> parameter_handler_;

admittance_controller/include/admittance_controller/admittance_rule_impl.hpp

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,15 @@ controller_interface::return_type AdmittanceRule::reset(const size_t num_joints)
115115
return controller_interface::return_type::OK;
116116
}
117117

118+
geometry_msgs::msg::Pose AdmittanceRule::initialize_goal_pose(
119+
const trajectory_msgs::msg::JointTrajectoryPoint & current_joint_state)
120+
{
121+
kinematics_->calculate_link_transform(
122+
current_joint_state.positions, parameters_.ft_sensor.frame.id,
123+
admittance_transforms_.ref_base_ft_);
124+
return tf2::toMsg(admittance_transforms_.ref_base_ft_);
125+
}
126+
118127
void AdmittanceRule::apply_parameters_update()
119128
{
120129
if (parameter_handler_->is_old(parameters_))
@@ -136,14 +145,14 @@ void AdmittanceRule::apply_parameters_update()
136145
}
137146
}
138147

148+
139149
bool AdmittanceRule::get_all_transforms(
140150
const trajectory_msgs::msg::JointTrajectoryPoint & current_joint_state,
141-
const trajectory_msgs::msg::JointTrajectoryPoint & reference_joint_state)
151+
const geometry_msgs::msg::Pose & reference_pose)
142152
{
143-
// get reference transforms
144-
bool success = kinematics_->calculate_link_transform(
145-
reference_joint_state.positions, parameters_.ft_sensor.frame.id,
146-
admittance_transforms_.ref_base_ft_);
153+
// get reference transforms
154+
bool success=true;
155+
tf2::fromMsg(reference_pose, admittance_transforms_.ref_base_ft_);
147156

148157
// get transforms at current configuration
149158
success &= kinematics_->calculate_link_transform(
@@ -167,7 +176,8 @@ bool AdmittanceRule::get_all_transforms(
167176
controller_interface::return_type AdmittanceRule::update(
168177
const trajectory_msgs::msg::JointTrajectoryPoint & current_joint_state,
169178
const geometry_msgs::msg::Wrench & measured_wrench,
170-
const trajectory_msgs::msg::JointTrajectoryPoint & reference_joint_state,
179+
const geometry_msgs::msg::Pose & reference_pose,
180+
const trajectory_msgs::msg::JointTrajectoryPoint & reference_joint_state,
171181
const rclcpp::Duration & period, trajectory_msgs::msg::JointTrajectoryPoint & desired_joint_state)
172182
{
173183
const double dt = period.seconds();
@@ -176,9 +186,7 @@ controller_interface::return_type AdmittanceRule::update(
176186
{
177187
apply_parameters_update();
178188
}
179-
180-
bool success = get_all_transforms(current_joint_state, reference_joint_state);
181-
189+
bool success = get_all_transforms(current_joint_state, reference_pose);
182190
// apply filter and update wrench_world_ vector
183191
Eigen::Matrix<double, 3, 3> rot_world_sensor =
184192
admittance_transforms_.world_base_.rotation() * admittance_transforms_.base_ft_.rotation();

admittance_controller/src/admittance_controller.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,8 +404,17 @@ controller_interface::return_type AdmittanceController::update_and_write_command
404404
// get all controller inputs
405405
read_state_from_hardware(joint_state_, ft_values_);
406406

407+
auto goal_pose = geometry_msgs::msg::Pose();
408+
/* world-tool0*/
409+
goal_pose.position.x = 1.53;
410+
goal_pose.position.y = 0.9;
411+
goal_pose.position.z = 1.5;
412+
goal_pose.orientation.w = 0.0;
413+
goal_pose.orientation.x = 0.707;
414+
goal_pose.orientation.y = 0.0;
415+
goal_pose.orientation.z = 0.707;
407416
// apply admittance control to reference to determine desired state
408-
admittance_->update(joint_state_, ft_values_, reference_, period, reference_admittance_);
417+
admittance_->update(joint_state_, ft_values_, goal_pose, reference_, period, reference_admittance_);
409418

410419
// write calculated values to joint interfaces
411420
write_state_to_hardware(reference_admittance_);

0 commit comments

Comments
 (0)