ViconSubject.cpp
Go to the documentation of this file.
00001 /*
00002  * ViconSubject.cpp
00003  *
00004  *  Created on: Oct 22, 2011
00005  *      Author: mriedel
00006  */
00007 
00008 #include <telekyb_vicon/ViconSubject.hpp>
00009 
00010 // local
00011 #include <telekyb_vicon/ViconTypes.hpp>
00012 #include <ros/console.h>
00013 
00014 #include <telekyb_vicon/ViconBridge.hpp>
00015 
00016 namespace TELEKYB_NAMESPACE
00017 {
00018 
00019 ViconSubject::ViconSubject()
00020         : options(ViconTrackerOptions::Instance()), subjectID(-1)
00021 {
00022 
00023 }
00024 
00025 ViconSubject::ViconSubject(int subjectID_)
00026         : options(ViconTrackerOptions::Instance()), subjectID(subjectID_)
00027 {
00028 
00029 }
00030 
00031 ViconSubject& ViconSubject::operator= (const ViconSubject & other)
00032 {
00033         subjectID = other.subjectID;
00034         return *this;
00035 }
00036 
00037 ViconSubject::~ViconSubject()
00038 {
00039 
00040 }
00041 
00042 std::string ViconSubject::getName() const
00043 {
00044         return subjectName;
00045 }
00046 
00047 unsigned int ViconSubject::getNSegments() const
00048 {
00049         return nSegments;
00050 }
00051 
00052 void ViconSubject::init()
00053 {
00054         subjectName = ViconBridge::Instance().getClient().GetSubjectName(subjectID).SubjectName;
00055         nSegments = ViconBridge::Instance().getClient().GetSegmentCount(subjectName).SegmentCount;
00056 //      segments.empty();
00057 
00058     for (unsigned int i = 0; i < nSegments; i++) {
00059         std::string segmentName = ViconBridge::Instance().getClient().GetSegmentName(subjectName, i).SegmentName;
00060         segments.push_back(ViconSegment(*this, i, segmentName));
00061     }
00062 }
00063 
00064 void ViconSubject::process()
00065 {
00066     for (unsigned int i = 0; i < nSegments; i++) {
00067         Vicon::Output_GetSegmentGlobalTranslation trans =
00068                         ViconBridge::Instance().getClient().GetSegmentGlobalTranslation(subjectName, segments[i].getSegmentName());
00069         Vicon::Output_GetSegmentGlobalRotationQuaternion quat =
00070                         ViconBridge::Instance().getClient().GetSegmentGlobalRotationQuaternion(subjectName, segments[i].getSegmentName());
00071 
00072         if (trans.Result != Vicon::Result::Success || quat.Result != Vicon::Result::Success) {
00073             ROS_WARN("GetSegmentGlobalTranslation/Rotation failed (result = %s, %s), not publishing...",//"a","b");
00074                 ViconResult(trans.Result).str(), ViconResult(quat.Result).str());
00075                 continue;
00076         }
00077 
00078         if (trans.Occluded || quat.Occluded) {
00079             ROS_WARN_STREAM("Segment "<< segments.at(i).getSegmentName() << " of "
00080                         << subjectName <<" occluded, not publishing... " );
00081                 continue;
00082         }
00083 
00084         // everything ok.
00085 
00086         Eigen::Vector3d globalTranslation(trans.Translation[0] / 1000, trans.Translation[1] / 1000, trans.Translation[2] / 1000);
00087         Eigen::Quaterniond globalRotation(quat.Rotation[3], quat.Rotation[0], quat.Rotation[1], quat.Rotation[2]);
00088 
00089         if (options.tPublishTF->getValue()) {
00090                         tf::Transform lastTransform;
00091                         // ok publish
00092                         lastTransform.setOrigin(tf::Vector3(globalTranslation(0), globalTranslation(1), globalTranslation(2)));
00093                         lastTransform.setRotation(tf::Quaternion(globalRotation.x(), globalRotation.y(), globalRotation.z(),
00094                                         globalRotation.w()));
00095 
00096                         tfBroadCaster.sendTransform(
00097                                         tf::StampedTransform(lastTransform, ros::Time::now(), "world", segments[i].getSegmentName() + "/" + subjectName)
00098                         );
00099         }
00100 
00101         segments[i].publish(globalTranslation, globalRotation);
00102     }
00103 }
00104 
00105 } //namespace
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends


telekyb_vicon
Author(s): Dr. Antonio Franchi
autogenerated on Wed Apr 24 2013 11:29:26