30 ROS_ERROR(
"Failed to construct kdl tree");
37 ROS_ERROR(
"Failed to initialize kinematic chain");
60 if (!model.
initParam(
"/robot_description"))
62 ROS_ERROR(
"Failed to parse urdf file for JointLimits");
66 for (
unsigned int i = 0; i <
ext_dof_; i++)
71 limits_acc_.push_back(std::numeric_limits<double>::max());
83 Eigen::Matrix<double, 6, Eigen::Dynamic> jac_ext;
91 double eps_type = -1.0;
145 Eigen::Quaterniond quat_cb;
147 Eigen::Matrix3d rot_cb = quat_cb.toRotationMatrix();
151 Eigen::Vector3d axis_cb = quat_cb * axis_eb;
155 Eigen::Vector3d p_eb(eb_frame_ct.
p.
x(), eb_frame_ct.
p.
y(), eb_frame_ct.
p.
z());
156 Eigen::Vector3d p_cb = quat_cb * p_eb;
157 Eigen::Vector3d axis_cross_p_cb = axis_cb.cross(p_cb);
160 jac_ext(0, k) = eps_type * axis_cb(0) + (1.0 - eps_type) * axis_cross_p_cb(0);
161 jac_ext(1, k) = eps_type * axis_cb(0) + (1.0 - eps_type) * axis_cross_p_cb(1);
162 jac_ext(2, k) = eps_type * axis_cb(0) + (1.0 - eps_type) * axis_cross_p_cb(2);
163 jac_ext(3, k) = eps_type * 0.0 + (1.0 - eps_type) * axis_cb(0);
164 jac_ext(4, k) = eps_type * 0.0 + (1.0 - eps_type) * axis_cb(1);
165 jac_ext(5, k) = eps_type * 0.0 + (1.0 - eps_type) * axis_cb(2);
174 jac_full_matrix.resize(6, jac_chain.
data.cols() + jac_ext.cols());
175 jac_full_matrix << jac_chain.
data, jac_ext;
176 jac_full.
resize(jac_chain.
data.cols() + jac_ext.cols());
177 jac_full.
data << jac_full_matrix;
191 for (
unsigned int i = 0; i< chain_dof; i++)
198 for (
unsigned int i = 0; i <
ext_dof_; i++)
212 for (
unsigned int i = 0; i <
ext_dof_; i++)
224 std_msgs::Float64MultiArray command_msg;
226 for (
unsigned int i = 0; i <
ext_dof_; i++)
228 command_msg.data.push_back(q_dot_ik(
params_.
dof+i));
240 for (
unsigned int i = 0; i <
ext_dof_; i++)
242 q_temp(i) = msg->position[i];
243 q_dot_temp(i) = msg->velocity[i];
virtual KDL::Jacobian adjustJacobian(const KDL::Jacobian &jac_chain)
std::vector< double > limits_min
tf::TransformListener tf_listener_
void resize(unsigned int newNrOfColumns)
unsigned int getNrOfSegments() const
virtual JointStates adjustJointStates(const JointStates &joint_states)
std::vector< std::string > joint_names_
static Rotation Quaternion(double x, double y, double z, double w)
const Segment & getSegment(unsigned int nr) const
KDL::JntArray current_q_dot_
void jointstateCallback(const sensor_msgs::JointState::ConstPtr &msg)
void quaternionKDLToEigen(const KDL::Rotation &k, Eigen::Quaterniond &e)
const std::string getTypeName() const
unsigned int rows() const
EIGEN_MAKE_ALIGNED_OPERATOR_NEW Eigen::Matrix< double, 6, Eigen::Dynamic > data
const Joint & getJoint() const
void publish(const boost::shared_ptr< M > &message) const
std::string chain_tip_link
unsigned int getNrOfJoints() const
virtual void processResultExtension(const KDL::JntArray &q_dot_ik)
std::vector< double > limits_acc
std::vector< double > limits_min_
const TwistControllerParams & params_
std::string chain_base_link
bool getChain(const std::string &chain_root, const std::string &chain_tip, Chain &chain) const
URDF_EXPORT bool initParam(const std::string ¶m)
const JointType & getType() const
std::vector< double > limits_max_
#define ROS_DEBUG_STREAM(args)
virtual LimiterParams adjustLimiterParams(const LimiterParams &limiter_params)
std::vector< double > limits_acc_
void resize(unsigned int newSize)
std::vector< double > limits_max
KDL_PARSER_PUBLIC bool treeFromParam(const std::string ¶m, KDL::Tree &tree)
KDL::JntArray last_q_dot_
Eigen::Matrix< double, 6, Eigen::Dynamic > Matrix6Xd_t
const std::string & getName() const
const std::string & getName() const
std::vector< double > limits_vel_
JointStates joint_states_
ros::Publisher command_pub_
std::vector< double > limits_vel