utilities.cpp
Go to the documentation of this file.
00001 /*
00002  * Copyright 2013 Southwest Research Institute
00003 
00004  Licensed under the Apache License, Version 2.0 (the "License");
00005  you may not use this file except in compliance with the License.
00006  You may obtain a copy of the License at
00007 
00008  http://www.apache.org/licenses/LICENSE-2.0
00009 
00010  Unless required by applicable law or agreed to in writing, software
00011  distributed under the License is distributed on an "AS IS" BASIS,
00012  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  See the License for the specific language governing permissions and
00014  limitations under the License.
00015  */
00016 
00017 #include <ros/console.h>
00018 #include <mtconnect_state_machine/utilities.h>
00019 #include <mtconnect_task_parser/task_parser.h>
00020 #include <boost/tuple/tuple.hpp>
00021 #include "boost/make_shared.hpp"
00022 
00023 using namespace mtconnect_state_machine;
00024 
00025 
00026 
00027 bool mtconnect_state_machine::parseTaskXml(const std::string & xml,
00028                   std::map<std::string, trajectory_msgs::JointTrajectoryPtr> & paths,
00029                   std::map<std::string, boost::shared_ptr<mtconnect::JointPoint> > & points)
00030 {
00031   typedef std::map<std::string, boost::shared_ptr<mtconnect::Path> >::iterator PathMapIter;
00032   bool rtn;
00033 
00034   mtconnect::Task task;
00035 
00036   if (mtconnect::fromXml(task, xml))
00037   {
00038 
00039     for (PathMapIter iter = task.paths_.begin(); iter != task.paths_.end(); ++iter)
00040     {
00041       trajectory_msgs::JointTrajectoryPtr jt(new trajectory_msgs::JointTrajectory());
00042 
00043       if (toJointTrajectory(iter->second, jt))
00044       {
00045         paths[iter->first] = jt;
00046         ROS_DEBUG_STREAM("Converted path: " << iter->first << " to joint trajectory");
00047         rtn = true;
00048       }
00049       else
00050       {
00051         ROS_ERROR_STREAM("Failed to convert path: " << iter->first << " to joint trajectory");
00052         rtn = false;
00053         break;
00054       }
00055 
00056     }
00057     ROS_DEBUG_STREAM("Converted " << task.paths_.size() << " paths to "
00058                     << paths.size() << " joint paths");
00059 
00060     ROS_DEBUG_STREAM("Copying " << task.points_.size() << " to defined points");
00061     points = task.points_;
00062   }
00063   else
00064   {
00065     ROS_ERROR("Failed to parse task xml string");
00066     rtn = false;
00067   }
00068 
00069   return rtn;
00070 
00071 }
00072 
00073 bool mtconnect_state_machine::toJointTrajectory(boost::shared_ptr<mtconnect::Path> & path,
00074                                        trajectory_msgs::JointTrajectoryPtr & traj)
00075 {
00076   typedef std::vector<mtconnect::JointMove>::iterator JointMovesIter;
00077 
00078   // This line makes the assumption that a path is tied to a single group
00079   // (which is only true for out case, not in general)
00080   traj->joint_names = path->moves_.front().point_->group_->joint_names_;
00081   traj->points.clear();
00082   for (JointMovesIter iter = path->moves_.begin(); iter != path->moves_.end(); iter++)
00083   {
00084     ROS_DEBUG("Converting point to joint trajectory point");
00085     trajectory_msgs::JointTrajectoryPoint jt_point;
00086     jt_point.positions = iter->point_->values_;
00087     traj->points.push_back(jt_point);
00088     ROS_DEBUG_STREAM("Added point to trajectory, new size: " << traj->points.size());
00089 
00090   }
00091   return true;
00092 }
00093 
00094 
00095 
00096 


mtconnect_state_machine
Author(s): Shaun M. Edwards
autogenerated on Mon Jan 6 2014 11:30:58