kinton_arm_tag_tracker_alg.cpp
Go to the documentation of this file.
00001 #include "kinton_arm_tag_tracker_alg.h"
00002 
00003 // using namespace KDL;
00004 // using namespace Eigen;
00005 
00006 KintonArmTagTrackerAlgorithm::KintonArmTagTrackerAlgorithm(void)
00007 {
00008 }
00009 
00010 KintonArmTagTrackerAlgorithm::~KintonArmTagTrackerAlgorithm(void)
00011 {
00012 }
00013 
00014 void KintonArmTagTrackerAlgorithm::config_update(Config& new_cfg, uint32_t level)
00015 {
00016   this->lock();
00017 
00018   // save the current configuration
00019   this->config_=new_cfg;
00020   
00021   this->unlock();
00022 }
00023 
00024 // KintonArmTagTrackerAlgorithm Public API
00025 
00026 void KintonArmTagTrackerAlgorithm::tag_tracker(const MatrixXd& cam_vel,
00027                                                                                            const Chain& kdl_chain,
00028                                                                                            const double& dt,
00029                                                                                            MatrixXd& q)
00030 {
00031   this->lock();
00032 
00033   // Get forward kinematics
00034   MatrixXd fkine = this->kinematics_.fkinematics(kdl_chain,q);
00035 
00036 
00037   // Get actual arm jacobian
00038   MatrixXd jacobian = this->kinematics_.jacobian(kdl_chain,q);
00039 
00040   // Get joint velocities from expected end effector velocities
00041   MatrixXd vel_joints = this->kinematics_.jointvel_from_endeffvel(cam_vel,jacobian);
00042 
00043   MatrixXd inc = vel_joints * dt*180/3.1416;
00044 
00045   // Get new joint positions
00046   q = q + inc;
00047 
00048   for (int i = 0; i < q.rows(); ++i)
00049   {
00050     if (q(i)>180) q(i)=180;
00051     if (q(i)<0) q(i)=0;
00052   }
00053 
00054   // MatrixXd Ttarget(4,4);
00055   // Ttarget = MatrixXd::Zero(4,4);
00056   // Ttarget.block(0,0,3,3) = MatrixXd::Identity(3,3);
00057   // Ttarget(0,3)=-0.1;
00058   // Ttarget(1,3)=0;
00059   // Ttarget(2,3)=0.1;
00060   // Ttarget(3,3)=1;
00061 
00062   // MatrixXd q_pos=q;
00063   // MatrixXd q_new=MatrixXd::Zero(5,1); 
00064   // bool ik = this->kinematics_.ikinematics(kdl_chain,Ttarget,q_pos,q_new);
00065 
00066   // if (ik) q=q_new;
00067 
00068   // ROS_INFO_STREAM(q);
00069 
00070   this->unlock();
00071 }


kinton_arm_tag_tracker
Author(s): asantamaria
autogenerated on Fri Dec 6 2013 22:05:40