Go to the documentation of this file.00001
00002
00003
00004
00005
00006
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
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
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();
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
00074 ros::init(argc, argv, "jaco_tf_updater");
00075 ros::NodeHandle nh;
00076 ros::NodeHandle param_nh("~");
00077
00078
00079 JacoTFTree JacoTF(nh, param_nh);
00080
00081 ros::spin();
00082 }