41 N =
scene_->GetKinematicTree().GetNumControlledJoints();
51 FrameWithAxisAndDirectionInitializer frame(
parameters_.EndEffector[i]);
52 axis_.col(i) = frame.Axis.normalized();
53 dir_.col(i) = frame.Direction.normalized();
64 "Frame " <<
frames_[i].frame_A_link_name <<
":" 65 <<
"\tAxis=" <<
axis_.col(i).transpose()
66 <<
"\tDirection=" <<
dir_.col(i).transpose());
76 visualization_msgs::Marker marker;
77 marker.action = visualization_msgs::Marker::ADD;
78 marker.type = visualization_msgs::Marker::ARROW;
79 marker.frame_locked =
true;
80 marker.header.frame_id =
"exotica/" +
scene_->GetKinematicTree().GetRootFrameName();
81 marker.scale.x = 0.025;
82 marker.scale.y = 0.05;
83 marker.scale.z = 0.05;
84 marker.ns =
frames_[i].frame_A_link_name;
85 marker.pose.orientation.w = 1.0;
86 marker.points.resize(2);
90 marker.color =
GetColor(1., 0., 0., 0.5);
97 marker.color =
GetColor(0., 1., 0., 0.5);
104 visualization_msgs::MarkerArray msg;
105 msg.markers.resize(1);
106 msg.markers[0].action = 3;
127 phi(i) = axisInBase.dot(
dir_.col(i)) - 1.0;
142 const Eigen::MatrixXd axisInBaseJacobian =
kinematics[0].jacobian[i +
n_frames_].data.topRows<3>() -
kinematics[0].jacobian[i].data.topRows<3>();
144 phi(i) = axisInBase.dot(
dir_.col(i)) - 1.0;
145 jacobian.row(i) =
dir_.col(i).transpose() * axisInBaseJacobian;
149 constexpr
double arrow_length = 0.25;
151 msg_debug_.markers[i].points[0].x = link_position_in_base_.x();
152 msg_debug_.markers[i].points[0].y = link_position_in_base_.y();
153 msg_debug_.markers[i].points[0].z = link_position_in_base_.z();
154 msg_debug_.markers[i].points[1].x = link_position_in_base_.x() + arrow_length * axisInBase.x();
155 msg_debug_.markers[i].points[1].y = link_position_in_base_.y() + arrow_length * axisInBase.y();
156 msg_debug_.markers[i].points[1].z = link_position_in_base_.z() + arrow_length * axisInBase.z();
180 if (
frames_[i].frame_A_link_name == frame_name)
185 ThrowPretty(
"Direction for frame with name " << frame_name <<
" could not be found.");
192 if (
frames_[i].frame_A_link_name == frame_name)
194 dir_.col(i) = dir_in.normalized();
198 ThrowPretty(
"Could not find frame with name " << frame_name <<
".");
205 if (
frames_[i].frame_A_link_name == frame_name)
210 ThrowPretty(
"Axis for frame with name " << frame_name <<
" could not be found.");
217 if (
frames_[i].frame_A_link_name == frame_name)
219 axis_.col(i) = axis_in.normalized();
224 ThrowPretty(
"Could not find frame with name " << frame_name <<
".");
void SetDirection(const std::string &frame_name, const Eigen::Vector3d &dir_in)
void publish(const boost::shared_ptr< M > &message) const
std::vector< KinematicFrameRequest > frames_
int TaskSpaceDim() override
Eigen::Ref< Eigen::VectorXd > VectorXdRef
Eigen::Vector3d link_axis_position_in_base_
Eigen::Vector3d GetAxis(const std::string &frame_name) const
std_msgs::ColorRGBA GetColor(double r, double g, double b, double a=1.0)
Eigen::Vector3d GetDirection(const std::string &frame_name) const
std::shared_ptr< Scene > ScenePtr
ros::Publisher pub_debug_
void SetAxis(const std::string &frame_name, const Eigen::Vector3d &axis_in)
REGISTER_TASKMAP_TYPE("EffAxisAlignment", exotica::EffAxisAlignment)
void Update(Eigen::VectorXdRefConst q, Eigen::VectorXdRef phi) override
void vectorEigenToKDL(const Eigen::Matrix< double, 3, 1 > &e, KDL::Vector &k)
EffAxisAlignmentInitializer parameters_
const Eigen::Ref< const Eigen::VectorXd > & VectorXdRefConst
visualization_msgs::MarkerArray msg_debug_
Eigen::Vector3d link_position_in_base_
#define HIGHLIGHT_NAMED(name, x)
Eigen::Ref< Eigen::MatrixXd > MatrixXdRef
EIGEN_MAKE_ALIGNED_OPERATOR_NEW void AssignScene(ScenePtr scene) override