diff --git a/collada_urdf/src/collada_writer.cpp b/collada_urdf/src/collada_writer.cpp index 8fe3dea..72c2013 100644 --- a/collada_urdf/src/collada_writer.cpp +++ b/collada_urdf/src/collada_writer.cpp @@ -399,9 +399,9 @@ void ColladaWriter::addJoints(daeElementRef parent) { } // @hack: OpenRAVE appears to flip joint axes - axis_x *= -1.0; - axis_y *= -1.0; - axis_z *= -1.0; + //axis_x *= -1.0; + //axis_y *= -1.0; + //axis_z *= -1.0; switch (urdf_joint->type) { @@ -763,6 +763,9 @@ void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeEle node->setSid(node_sid.c_str()); node->setId(node_id.c_str()); link_num++; + + domNodeRef parent_node = node; + { if (urdf_link->parent_joint != NULL) { // x y z w @@ -770,8 +773,25 @@ void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeEle // x y z addTranslate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.position); + if (urdf_link->visual != NULL) { + // + domNodeRef visual_node = daeSafeCast(node->createAndPlace(COLLADA_ELEMENT_NODE)); + string visual_sid("visual"); + string visual_id = node_id + "." + visual_sid; + visual_node->setName("visual"); + visual_node->setSid(visual_sid.c_str()); + visual_node->setId(visual_id.c_str()); + + parent_node = visual_node; + + // x y z w + addRotate(parent_node, urdf_link->visual->origin.rotation); + // x y z + addTranslate(parent_node, urdf_link->visual->origin.position); + } + // x y z angle - domRotateRef joint_rotate = addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); + domRotateRef joint_rotate = addRotate(parent_node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); string joint_sid = joint_sids_[urdf_link->parent_joint->name]; string joint_rotate_sid = string("node_") + joint_sid + string("_axis0"); joint_rotate->setSid(joint_rotate_sid.c_str()); @@ -782,7 +802,7 @@ void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeEle // map::const_iterator i = geometry_ids_.find(urdf_link->name); if (i != geometry_ids_.end()) { - domInstance_geometryRef instance_geometry = daeSafeCast(node->createAndPlace(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); + domInstance_geometryRef instance_geometry = daeSafeCast(parent_node->createAndPlace(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); string geometry_id = i->second; string instance_geometry_url = string("#") + geometry_id; instance_geometry->setUrl(instance_geometry_url.c_str());