jaco_tf_updater.cpp
Go to the documentation of this file.
00001 /*
00002  * jaco_tf_updater.cpp
00003 
00004  *
00005  *  Created on: Apr 16, 2013
00006  *      Author: mdedonato
00007  */
00008 #include <jaco_driver/jaco_tf_updater.h>
00009 
00010 using namespace jaco;
00011 
00012 JacoTFTree::JacoTFTree(ros::NodeHandle nh, ros::NodeHandle param_nh)
00013 {
00014 
00015         std::string joint_angles_topic;
00016         nh.param<std::string>("joint_angles_topic", joint_angles_topic, "joint_angles");
00017 
00018         //Print out received topics
00019         ROS_DEBUG("Got Joint Angles Topic Name: <%s>", joint_angles_topic.c_str());
00020 
00021         ROS_INFO("Starting Up Jaco TF Updater...");
00022 
00023         this->joint_angles_sub = nh.subscribe(joint_angles_topic, 1, &JacoTFTree::JointAnglesMSG, this);
00024         current_angles.Angle_J1 = 0;
00025         current_angles.Angle_J2 = 0;
00026         current_angles.Angle_J3 = 0;
00027         current_angles.Angle_J4 = 0;
00028         current_angles.Angle_J5 = 0;
00029         current_angles.Angle_J6 = 0;
00030         last_angle_update = ros::Time().now();
00031         this->tf_update_timer = nh.createTimer(ros::Duration(0.01), &JacoTFTree::TFUpdateTimer, this);
00032         tf_update_timer.stop();
00033 
00034 }
00035 
00036 void JacoTFTree::JointAnglesMSG(const jaco_driver::JointAnglesConstPtr& joint_angles)
00037 {
00038         current_angles.Angle_J1 = joint_angles->Angle_J1;
00039         current_angles.Angle_J2 = joint_angles->Angle_J2;
00040         current_angles.Angle_J3 = joint_angles->Angle_J3;
00041         current_angles.Angle_J4 = joint_angles->Angle_J4;
00042         current_angles.Angle_J5 = joint_angles->Angle_J5;
00043         current_angles.Angle_J6 = joint_angles->Angle_J6;
00044         last_angle_update = ros::Time().now();
00045         tf_update_timer.start();
00046 }
00047 
00048 void JacoTFTree::CalculatePostion(void)
00049 {
00050 
00051         //Update the forward Kinematics
00052         kinematics.UpdateForward(kinematics.deg_to_rad(current_angles.Angle_J1),
00053                         kinematics.deg_to_rad(current_angles.Angle_J2), kinematics.deg_to_rad(current_angles.Angle_J3),
00054                         kinematics.deg_to_rad(current_angles.Angle_J4), kinematics.deg_to_rad(current_angles.Angle_J5),
00055                         kinematics.deg_to_rad(current_angles.Angle_J6));
00056 
00057 }
00058 
00059 void JacoTFTree::TFUpdateTimer(const ros::TimerEvent&)
00060 {
00061         this->CalculatePostion();       //Update TF Tree
00062 
00063         if ((ros::Time().now().toSec() - last_angle_update.toSec()) > 1)
00064         {
00065                 tf_update_timer.stop();
00066         }
00067 
00068 }
00069 
00070 int main(int argc, char **argv)
00071 {
00072 
00073         /* Set up ROS */
00074         ros::init(argc, argv, "jaco_tf_updater");
00075         ros::NodeHandle nh;
00076         ros::NodeHandle param_nh("~");
00077 
00078         //create the arm object
00079         JacoTFTree JacoTF(nh, param_nh);
00080 
00081         ros::spin();
00082 }


jaco_driver
Author(s): Jeff Schmidt (Clearpath), Alex Bencz (Clearpath), Matt DeDonato (WPI)
autogenerated on Mon Jan 6 2014 11:23:43