Skip to content
This repository was archived by the owner on Apr 8, 2024. It is now read-only.

Commit 15b0ee7

Browse files
committed
Add function to calculate approaching vectors along X and Y axes
1 parent 0f319f2 commit 15b0ee7

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

grasp_utils/robot_interface/include/robot_interface/control_base.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,12 +300,13 @@ class ArmControlBase: public rclcpp::Node
300300
void updateTFGoal(const geometry_msgs::msg::PoseStamped& pose_stamped);
301301

302302
/**
303-
* @brief This function is used to rotate a unit vector along z axis, i.e. (0, 0, 1) by the assigned rpy euler angles.
303+
* @brief This function is used to rotate the three coordinate system axes by the assigned rpy euler angles.
304304
* @param alpha Rotation euler angle around X axis.
305305
* @param beta Rotation euler angle around Y axis.
306306
* @param gamma Rotation euler angle around Z axis.
307+
* @return The rotated axes, dimension 3.
307308
*/
308-
Eigen::Vector3d getUnitApproachVector(const double& alpha, const double& beta, const double& gamma);
309+
std::vector<Eigen::Vector3d> getUnitApproachVectors(const double& alpha, const double& beta, const double& gamma);
309310

310311
protected:
311312
/// Joint state publisher

grasp_utils/robot_interface/src/control_base.cpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,22 +86,30 @@ void ArmControlBase::toTcpPose(const Eigen::Isometry3d& pose, TcpPose& tcp_pose)
8686
tcp_pose.gamma = euler_angles[2];
8787
}
8888

89-
Eigen::Vector3d ArmControlBase::getUnitApproachVector(const double& alpha, const double& beta, const double& gamma)
89+
std::vector<Eigen::Vector3d> ArmControlBase::getUnitApproachVectors(const double& alpha, const double& beta, const double& gamma)
9090
{
9191
tf2::Quaternion q;
9292
q.setRPY(alpha, beta, gamma);
9393
tf2::Matrix3x3 r(q);
9494

95-
tf2::Vector3 approach_vector = r * tf2::Vector3(0, 0, 1);
96-
approach_vector = approach_vector.normalize();
97-
return Eigen::Vector3d(approach_vector[0], approach_vector[1], approach_vector[2]);
95+
// get approach_vectors along x, y, z axes
96+
std::vector<Eigen::Vector3d> approach_vectors;
97+
for (size_t i = 0; i < 3; i++)
98+
{
99+
tf2::Vector3 pre_rotation_vector(0, 0, 0);
100+
pre_rotation_vector[i] = 1;
101+
tf2::Vector3 post_rotation_vector = r * pre_rotation_vector;
102+
post_rotation_vector = post_rotation_vector.normalize();
103+
approach_vectors.push_back(Eigen::Vector3d(post_rotation_vector[0], post_rotation_vector[1], post_rotation_vector[2]));
104+
}
105+
return approach_vectors;
98106
}
99107

100108
bool ArmControlBase::pick(double x, double y, double z,
101109
double alpha, double beta, double gamma,
102110
double vel, double acc, double vel_scale, double approach)
103111
{
104-
Eigen::Vector3d pre_grasp_origin = Eigen::Vector3d(x, y, z) - getUnitApproachVector(alpha, beta, gamma) * approach;
112+
Eigen::Vector3d pre_grasp_origin = Eigen::Vector3d(x, y, z) - getUnitApproachVectors(alpha, beta, gamma)[2] * approach;
105113

106114
Eigen::Isometry3d grasp, orientation, pre_grasp;
107115
orientation = Eigen::AngleAxisd(alpha, Eigen::Vector3d::UnitX())
@@ -146,7 +154,7 @@ bool ArmControlBase::place(double x, double y, double z,
146154
double alpha, double beta, double gamma,
147155
double vel, double acc, double vel_scale, double retract)
148156
{
149-
Eigen::Vector3d pre_place_origin = Eigen::Vector3d(x, y, z) - getUnitApproachVector(alpha, beta, gamma) * retract;
157+
Eigen::Vector3d pre_place_origin = Eigen::Vector3d(x, y, z) - getUnitApproachVectors(alpha, beta, gamma)[2] * retract;
150158

151159
Eigen::Isometry3d place, orientation, pre_place;
152160
orientation = Eigen::AngleAxisd(alpha, Eigen::Vector3d::UnitX())

0 commit comments

Comments
 (0)