Go to the documentation of this file.00001 #include "robodyn_controllers/RosMsgTreeUtilities.h"
00002
00003 RosMsgTreeUtilities::RosMsgTreeUtilities()
00004 {
00005 bases.clear();
00006 jointNames.clear();
00007 }
00008
00009
00010
00011
00012
00016 void RosMsgTreeUtilities::loadFromFile(const std::string& fileName)
00017 {
00018 KdlTreeParser::loadFromFile(fileName);
00019 bases.clear();
00020 bases.push_back(getBaseName());
00021 jointNames.clear();
00022 getJointNames(jointNames);
00023 }
00024
00029 bool RosMsgTreeUtilities::setBaseFrame(const r2_msgs::StringArray& baseMsg)
00030 {
00031 int n = baseMsg.data.size();
00032
00034 if (n > 0 && baseMsg.data != bases)
00035 {
00037 bases.clear();
00038
00040 for (unsigned int i = 0; i < baseMsg.data.size(); ++i)
00041 {
00042 if (tree.getSegment(baseMsg.data[i]) == tree.getSegments().end())
00043 {
00044 std::stringstream err;
00045 err << "Unable to set base! Couldn't find segment " << baseMsg.data[i] << " in tree";
00046 NasaCommonLogging::Logger::log("gov.nasa.controllers.RosMsgTreeUtilities.setBaseFrame", log4cpp::Priority::ERROR, err.str());
00047 return false;
00048 }
00049
00050 bases.push_back(baseMsg.data[i]);
00051 }
00052 }
00053 else
00054 {
00055 NasaCommonLogging::Logger::log("gov.nasa.controllers.RosMsgTreeUtilities.setBaseFrame", log4cpp::Priority::INFO, "call to setBaseFrame but bases are 0 or haven't changed");
00056 }
00057
00058 return true;
00059 }
00060
00065 bool RosMsgTreeUtilities::setBaseFrame(std::string& baseMsg)
00066 {
00067 if (tree.getSegment(baseMsg) == tree.getSegments().end())
00068 {
00069 std::stringstream err;
00070 err << "Unable to set base! Couldn't find segment " << baseMsg << " in tree";
00071 NasaCommonLogging::Logger::log("gov.nasa.controllers.RosMsgTreeUtilities.setBaseFrame", log4cpp::Priority::ERROR, err.str());
00072 return false;
00073 }
00074
00075 bases.clear();
00076 bases.push_back(baseMsg);
00077 return true;
00078 }
00079
00085 void RosMsgTreeUtilities::getFrames(const r2_msgs::PoseState& poseState, const std::string& base, std::map<std::string, KDL::Frame>& frames)
00086 {
00087 KDL::Frame frame;
00088 std::string tipName;
00089
00090 for (unsigned int i = 0; i < poseState.name.size(); ++i)
00091 {
00092 tipName = poseState.name[i];
00093
00094 try
00095 {
00096 RosMsgConverter::PoseStateToFrame(poseState, base, tipName, frame );
00097 frames[tipName] = frame;
00098 }
00099 catch (std::exception)
00100 {
00101 NasaCommonLogging::Logger::log("gov.nasa.controllers.RosMsgTreeUtilities.getFrames", log4cpp::Priority::WARN, "Squelched error.. continuing..");
00102 }
00103 }
00104 }
00105
00106 void RosMsgTreeUtilities::getFrameVels(const r2_msgs::PoseState& poseState, const std::string& base, std::map<std::string, KDL::FrameVel>& framevels)
00107 {
00108 NasaCommonLogging::Logger::getCategory("gov.nasa.controllers.RosMsgTreeUtilities") << log4cpp::Priority::DEBUG << "entered getFrameVels";
00109 KDL::FrameVel frameVel;
00110 std::string tipName;
00111
00112 if (framevels.size() != poseState.name.size())
00113 {
00114 NasaCommonLogging::Logger::getCategory("gov.nasa.controllers.RosMsgTreeUtilities") << log4cpp::Priority::DEBUG << "resizing getFrameVels";
00115 framevels.clear();
00116
00117 for (unsigned int i = 0; i < poseState.name.size(); ++i)
00118 {
00119 framevels.insert(std::make_pair(poseState.name[i], KDL::FrameVel()));
00120 }
00121 }
00122
00123 for (unsigned int i = 0; i < poseState.name.size(); ++i)
00124 {
00125 NasaCommonLogging::Logger::getCategory("gov.nasa.controllers.RosMsgTreeUtilities") << log4cpp::Priority::DEBUG << "entered getFrameVels";
00126 tipName = poseState.name[i];
00127
00128 try
00129 {
00130 RosMsgConverter::PoseStateToFrameVel(poseState, base, tipName, frameVel );
00131 framevels[tipName] = frameVel;
00132 }
00133 catch (std::exception)
00134 {
00135 NasaCommonLogging::Logger::log("gov.nasa.controllers.RosMsgTreeUtilities.getFrameVels", log4cpp::Priority::WARN, "Squelched error in getFrameVels.. continuing..");
00136 }
00137 }
00138 }
00139
00140 void RosMsgTreeUtilities::getFrameAccs(const r2_msgs::PoseState& poseState, const std::string& base, std::map<std::string, KDL::FrameAcc>& frameaccs)
00141 {
00142 KDL::FrameAcc frameAcc;
00143 std::string tipName;
00144
00145 for (unsigned int i = 0; i < poseState.name.size(); ++i)
00146 {
00147 tipName = poseState.name[i];
00148
00149 try
00150 {
00151 RosMsgConverter::PoseStateToFrameAcc(poseState, base, tipName, frameAcc );
00152 frameaccs[tipName] = frameAcc;
00153 }
00154 catch (std::exception)
00155 {
00156 NasaCommonLogging::Logger::log("gov.nasa.controllers.RosMsgTreeUtilities.getFrameAccs", log4cpp::Priority::WARN, "Squelched error.. continuing..");
00157 }
00158 }
00159 }