diff --git a/collada_parser/src/collada_parser.cpp b/collada_parser/src/collada_parser.cpp index 398dad3..f242094 100644 --- a/collada_parser/src/collada_parser.cpp +++ b/collada_parser/src/collada_parser.cpp @@ -736,8 +736,8 @@ namespace urdf{ if( !!pbasejoint ) { // set the mimic properties pjoint->mimic.reset(new JointMimic()); - pjoint->mimic->joint_name = pbasejoint->name; - pjoint->mimic->multiplier = a; + pjoint->mimic->joint_names.push_back(pbasejoint->name); + pjoint->mimic->multipliers.push_back(a); pjoint->mimic->offset = b; ROS_DEBUG_STREAM(str(boost::format("assigning joint %s to mimic %s %f %f\n")%pjoint->name%pbasejoint->name%a%b)); } diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp index d5ef6a1..26fdf82 100644 --- a/collada_urdf/src/collada_urdf.cpp +++ b/collada_urdf/src/collada_urdf.cpp @@ -998,7 +998,7 @@ protected: FOREACHC(itjoint, _robot.joints_) { string jointsid = _ComputeId(itjoint->second->name); boost::shared_ptr pjoint = itjoint->second; - if( !pjoint->mimic ) { + if( !pjoint->mimic || pjoint->mimic->joint_names.empty() || pjoint->mimic->multipliers.empty()) { continue; } @@ -1025,10 +1025,10 @@ protected: { daeElementRef pmath_times = pmath_apply1->add("times"); daeElementRef pmath_const0 = pmath_apply1->add("cn"); - pmath_const0->setCharData(str(boost::format("%f")%pjoint->mimic->multiplier)); + pmath_const0->setCharData(str(boost::format("%f")%pjoint->mimic->multipliers[0])); daeElementRef pmath_symb = pmath_apply1->add("csymbol"); pmath_symb->setAttribute("encoding","COLLADA"); - pmath_symb->setCharData(str(boost::format("%s/%s")%kmodel->getID()%_ComputeId(pjoint->mimic->joint_name))); + pmath_symb->setCharData(str(boost::format("%s/%s")%kmodel->getID()%_ComputeId(pjoint->mimic->joint_names[0]))); } daeElementRef pmath_const1 = pmath_apply->add("cn"); pmath_const1->setCharData(str(boost::format("%f")%pjoint->mimic->offset)); @@ -1038,15 +1038,15 @@ protected: { daeElementRef derivelt = pftec->add("equation"); derivelt->setAttribute("type","first_partial"); - derivelt->setAttribute("target",str(boost::format("%s/%s")%kmodel->getID()%_ComputeId(pjoint->mimic->joint_name)).c_str()); + derivelt->setAttribute("target",str(boost::format("%s/%s")%kmodel->getID()%_ComputeId(pjoint->mimic->joint_names[0])).c_str()); daeElementRef pmath_const0 = derivelt->add("cn"); - pmath_const0->setCharData(str(boost::format("%f")%pjoint->mimic->multiplier)); + pmath_const0->setCharData(str(boost::format("%f")%pjoint->mimic->multipliers[0])); } // save second partial derivative { daeElementRef derivelt = pftec->add("equation"); derivelt->setAttribute("type","second_partial"); - derivelt->setAttribute("target",str(boost::format("%s/%s")%kmodel->getID()%_ComputeId(pjoint->mimic->joint_name)).c_str()); + derivelt->setAttribute("target",str(boost::format("%s/%s")%kmodel->getID()%_ComputeId(pjoint->mimic->joint_names[0])).c_str()); daeElementRef pmath_const0 = derivelt->add("cn"); pmath_const0->setCharData("0"); } @@ -1063,10 +1063,10 @@ protected: { daeElementRef pmath_times = pmath_apply1->add("times"); daeElementRef pmath_const0 = pmath_apply1->add("cn"); - pmath_const0->setCharData(str(boost::format("%f")%pjoint->mimic->multiplier)); + pmath_const0->setCharData(str(boost::format("%f")%pjoint->mimic->multipliers[0])); daeElementRef pmath_symb = pmath_apply1->add("csymbol"); pmath_symb->setAttribute("encoding","COLLADA"); - pmath_symb->setCharData(str(boost::format("%s/%s")%kmodel->getID()%_ComputeId(pjoint->mimic->joint_name))); + pmath_symb->setCharData(str(boost::format("%s/%s")%kmodel->getID()%_ComputeId(pjoint->mimic->joint_names[0]))); } daeElementRef pmath_const1 = pmath_apply->add("cn"); pmath_const1->setCharData(str(boost::format("%f")%pjoint->mimic->offset));