From 89dd50b70fae168b03de35e0b774aa38af2be6f8 Mon Sep 17 00:00:00 2001 From: Dmitry Rozhkov Date: Thu, 26 Jan 2017 12:11:51 +0200 Subject: [PATCH 1/3] Switch from TinyXML to TinyXML2 The library TinyXML is considered to be unmaintained and since all future development is focused on TinyXML2 this patch updates urdfdom to use TinyXML2. Signed-off-by: Dmitry Rozhkov --- .travis.yml | 2 +- CMakeLists.txt | 5 +- cmake/FindTinyXML.cmake | 74 ------- cmake/FindTinyXML2.cmake | 74 +++++++ urdf_parser/include/urdf_parser/urdf_parser.h | 8 +- urdf_parser/src/joint.cpp | 134 +++++++------ urdf_parser/src/link.cpp | 188 ++++++++++-------- urdf_parser/src/model.cpp | 42 ++-- urdf_parser/src/pose.cpp | 17 +- urdf_parser/src/twist.cpp | 6 +- urdf_parser/src/urdf_model_state.cpp | 8 +- urdf_parser/src/urdf_sensor.cpp | 24 ++- urdf_parser/src/world.cpp | 14 +- 13 files changed, 322 insertions(+), 274 deletions(-) delete mode 100644 cmake/FindTinyXML.cmake create mode 100644 cmake/FindTinyXML2.cmake diff --git a/.travis.yml b/.travis.yml index c711dc97..b06a971f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,7 @@ compiler: script: "./.travis/build" before_install: - sudo apt-get update -qq - - sudo apt-get install -qq libtinyxml-dev + - sudo apt-get install -qq libtinyxml2-dev matrix: allow_failures: - compiler: clang diff --git a/CMakeLists.txt b/CMakeLists.txt index 48b96d3b..3304f614 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,8 +32,9 @@ endif (MSVC OR MSVC90 OR MSVC10) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") -find_package(TinyXML REQUIRED) -include_directories(SYSTEM ${TinyXML_INCLUDE_DIRS}) +find_package(TinyXML2 REQUIRED) +include_directories(SYSTEM ${TinyXML2_INCLUDE_DIRS}) +link_libraries(${TinyXML2_LIBRARIES}) find_package(urdfdom_headers 1.0 REQUIRED) include_directories(SYSTEM ${urdfdom_headers_INCLUDE_DIRS}) diff --git a/cmake/FindTinyXML.cmake b/cmake/FindTinyXML.cmake deleted file mode 100644 index aabb323d..00000000 --- a/cmake/FindTinyXML.cmake +++ /dev/null @@ -1,74 +0,0 @@ -################################################################################################## -# -# CMake script for finding TinyXML. -# -# Input variables: -# -# - TinyXML_ROOT_DIR (optional): When specified, header files and libraries will be searched for in -# ${TinyXML_ROOT_DIR}/include -# ${TinyXML_ROOT_DIR}/libs -# respectively, and the default CMake search order will be ignored. When unspecified, the default -# CMake search order is used. -# This variable can be specified either as a CMake or environment variable. If both are set, -# preference is given to the CMake variable. -# Use this variable for finding packages installed in a nonstandard location, or for enforcing -# that one of multiple package installations is picked up. -# -# -# Cache variables (not intended to be used in CMakeLists.txt files) -# -# - TinyXML_INCLUDE_DIR: Absolute path to package headers. -# - TinyXML_LIBRARY: Absolute path to library. -# -# -# Output variables: -# -# - TinyXML_FOUND: Boolean that indicates if the package was found -# - TinyXML_INCLUDE_DIRS: Paths to the necessary header files -# - TinyXML_LIBRARIES: Package libraries -# -# -# Example usage: -# -# find_package(TinyXML) -# if(NOT TinyXML_FOUND) -# # Error handling -# endif() -# ... -# include_directories(${TinyXML_INCLUDE_DIRS} ...) -# ... -# target_link_libraries(my_target ${TinyXML_LIBRARIES}) -# -################################################################################################## - -# Get package location hint from environment variable (if any) -if(NOT TinyXML_ROOT_DIR AND DEFINED ENV{TinyXML_ROOT_DIR}) - set(TinyXML_ROOT_DIR "$ENV{TinyXML_ROOT_DIR}" CACHE PATH - "TinyXML base directory location (optional, used for nonstandard installation paths)") -endif() - -# Search path for nonstandard package locations -if(TinyXML_ROOT_DIR) - set(TinyXML_INCLUDE_PATH PATHS "${TinyXML_ROOT_DIR}/include" NO_DEFAULT_PATH) - set(TinyXML_LIBRARY_PATH PATHS "${TinyXML_ROOT_DIR}/lib" NO_DEFAULT_PATH) -endif() - -# Find headers and libraries -find_path(TinyXML_INCLUDE_DIR NAMES tinyxml.h PATH_SUFFIXES "tinyxml" ${TinyXML_INCLUDE_PATH}) -find_library(TinyXML_LIBRARY NAMES tinyxml PATH_SUFFIXES "tinyxml" ${TinyXML_LIBRARY_PATH}) - -mark_as_advanced(TinyXML_INCLUDE_DIR - TinyXML_LIBRARY) - -# Output variables generation -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(TinyXML DEFAULT_MSG TinyXML_LIBRARY - TinyXML_INCLUDE_DIR) - -set(TinyXML_FOUND ${TINYXML_FOUND}) # Enforce case-correctness: Set appropriately cased variable... -unset(TINYXML_FOUND) # ...and unset uppercase variable generated by find_package_handle_standard_args - -if(TinyXML_FOUND) - set(TinyXML_INCLUDE_DIRS ${TinyXML_INCLUDE_DIR}) - set(TinyXML_LIBRARIES ${TinyXML_LIBRARY}) -endif() diff --git a/cmake/FindTinyXML2.cmake b/cmake/FindTinyXML2.cmake new file mode 100644 index 00000000..87ff2fbc --- /dev/null +++ b/cmake/FindTinyXML2.cmake @@ -0,0 +1,74 @@ +################################################################################################## +# +# CMake script for finding TinyXML2. +# +# Input variables: +# +# - TinyXML2_ROOT_DIR (optional): When specified, header files and libraries will be searched for in +# ${TinyXML2_ROOT_DIR}/include +# ${TinyXML2_ROOT_DIR}/libs +# respectively, and the default CMake search order will be ignored. When unspecified, the default +# CMake search order is used. +# This variable can be specified either as a CMake or environment variable. If both are set, +# preference is given to the CMake variable. +# Use this variable for finding packages installed in a nonstandard location, or for enforcing +# that one of multiple package installations is picked up. +# +# +# Cache variables (not intended to be used in CMakeLists.txt files) +# +# - TinyXML2_INCLUDE_DIR: Absolute path to package headers. +# - TinyXML2_LIBRARY: Absolute path to library. +# +# +# Output variables: +# +# - TinyXML2_FOUND: Boolean that indicates if the package was found +# - TinyXML2_INCLUDE_DIRS: Paths to the necessary header files +# - TinyXML2_LIBRARIES: Package libraries +# +# +# Example usage: +# +# find_package(TinyXML2) +# if(NOT TinyXML2_FOUND) +# # Error handling +# endif() +# ... +# include_directories(${TinyXML2_INCLUDE_DIRS} ...) +# ... +# target_link_libraries(my_target ${TinyXML2_LIBRARIES}) +# +################################################################################################## + +# Get package location hint from environment variable (if any) +if(NOT TinyXML2_ROOT_DIR AND DEFINED ENV{TinyXML2_ROOT_DIR}) + set(TinyXML2_ROOT_DIR "$ENV{TinyXML2_ROOT_DIR}" CACHE PATH + "TinyXML2 base directory location (optional, used for nonstandard installation paths)") +endif() + +# Search path for nonstandard package locations +if(TinyXML2_ROOT_DIR) + set(TinyXML2_INCLUDE_PATH PATHS "${TinyXML2_ROOT_DIR}/include" NO_DEFAULT_PATH) + set(TinyXML2_LIBRARY_PATH PATHS "${TinyXML2_ROOT_DIR}/lib" NO_DEFAULT_PATH) +endif() + +# Find headers and libraries +find_path(TinyXML2_INCLUDE_DIR NAMES tinyxml2.h PATH_SUFFIXES "tinyxml2" ${TinyXML2_INCLUDE_PATH}) +find_library(TinyXML2_LIBRARY NAMES tinyxml2 PATH_SUFFIXES "tinyxml2" ${TinyXML2_LIBRARY_PATH}) + +mark_as_advanced(TinyXML2_INCLUDE_DIR + TinyXML2_LIBRARY) + +# Output variables generation +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(TinyXML2 DEFAULT_MSG TinyXML2_LIBRARY + TinyXML2_INCLUDE_DIR) + +set(TinyXML2_FOUND ${TINYXML2_FOUND}) # Enforce case-correctness: Set appropriately cased variable... +unset(TINYXML2_FOUND) # ...and unset uppercase variable generated by find_package_handle_standard_args + +if(TinyXML2_FOUND) + set(TinyXML2_INCLUDE_DIRS ${TinyXML2_INCLUDE_DIR}) + set(TinyXML2_LIBRARIES ${TinyXML2_LIBRARY}) +endif() diff --git a/urdf_parser/include/urdf_parser/urdf_parser.h b/urdf_parser/include/urdf_parser/urdf_parser.h index 939a91a5..60fd509f 100644 --- a/urdf_parser/include/urdf_parser/urdf_parser.h +++ b/urdf_parser/include/urdf_parser/urdf_parser.h @@ -39,7 +39,7 @@ #include #include -#include +#include #include #include #include @@ -60,9 +60,9 @@ namespace urdf{ URDFDOM_DLLAPI ModelInterfaceSharedPtr parseURDF(const std::string &xml_string); URDFDOM_DLLAPI ModelInterfaceSharedPtr parseURDFFile(const std::string &path); - URDFDOM_DLLAPI TiXmlDocument* exportURDF(ModelInterfaceSharedPtr &model); - URDFDOM_DLLAPI TiXmlDocument* exportURDF(const ModelInterface &model); - URDFDOM_DLLAPI bool parsePose(Pose&, TiXmlElement*); + URDFDOM_DLLAPI tinyxml2::XMLDocument* exportURDF(ModelInterfaceSharedPtr &model); + URDFDOM_DLLAPI tinyxml2::XMLDocument* exportURDF(const ModelInterface &model); + URDFDOM_DLLAPI bool parsePose(Pose&, tinyxml2::XMLElement*); } #endif diff --git a/urdf_parser/src/joint.cpp b/urdf_parser/src/joint.cpp index 07cbeae1..3599d079 100644 --- a/urdf_parser/src/joint.cpp +++ b/urdf_parser/src/joint.cpp @@ -39,14 +39,16 @@ #include #include #include -#include +#include #include +using namespace tinyxml2; + namespace urdf{ -bool parsePose(Pose &pose, TiXmlElement* xml); +bool parsePose(Pose &pose, XMLElement* xml); -bool parseJointDynamics(JointDynamics &jd, TiXmlElement* config) +bool parseJointDynamics(JointDynamics &jd, XMLElement* config) { jd.clear(); @@ -109,7 +111,7 @@ bool parseJointDynamics(JointDynamics &jd, TiXmlElement* config) } } -bool parseJointLimits(JointLimits &jl, TiXmlElement* config) +bool parseJointLimits(JointLimits &jl, XMLElement* config) { jl.clear(); @@ -212,7 +214,7 @@ bool parseJointLimits(JointLimits &jl, TiXmlElement* config) return true; } -bool parseJointSafety(JointSafety &js, TiXmlElement* config) +bool parseJointSafety(JointSafety &js, XMLElement* config) { js.clear(); @@ -318,7 +320,7 @@ bool parseJointSafety(JointSafety &js, TiXmlElement* config) return true; } -bool parseJointCalibration(JointCalibration &jc, TiXmlElement* config) +bool parseJointCalibration(JointCalibration &jc, XMLElement* config) { jc.clear(); @@ -375,7 +377,7 @@ bool parseJointCalibration(JointCalibration &jc, TiXmlElement* config) return true; } -bool parseJointMimic(JointMimic &jm, TiXmlElement* config) +bool parseJointMimic(JointMimic &jm, XMLElement* config) { jm.clear(); @@ -445,7 +447,7 @@ bool parseJointMimic(JointMimic &jm, TiXmlElement* config) return true; } -bool parseJoint(Joint &joint, TiXmlElement* config) +bool parseJoint(Joint &joint, XMLElement* config) { joint.clear(); @@ -459,7 +461,7 @@ bool parseJoint(Joint &joint, TiXmlElement* config) joint.name = name; // Get transform from Parent Link to Joint Frame - TiXmlElement *origin_xml = config->FirstChildElement("origin"); + XMLElement *origin_xml = config->FirstChildElement("origin"); if (!origin_xml) { CONSOLE_BRIDGE_logDebug("urdfdom: Joint [%s] missing origin tag under parent describing transform from Parent Link to Joint Frame, (using Identity transform).", joint.name.c_str()); @@ -476,7 +478,7 @@ bool parseJoint(Joint &joint, TiXmlElement* config) } // Get Parent Link - TiXmlElement *parent_xml = config->FirstChildElement("parent"); + XMLElement *parent_xml = config->FirstChildElement("parent"); if (parent_xml) { const char *pname = parent_xml->Attribute("link"); @@ -491,7 +493,7 @@ bool parseJoint(Joint &joint, TiXmlElement* config) } // Get Child Link - TiXmlElement *child_xml = config->FirstChildElement("child"); + XMLElement *child_xml = config->FirstChildElement("child"); if (child_xml) { const char *pname = child_xml->Attribute("link"); @@ -536,7 +538,7 @@ bool parseJoint(Joint &joint, TiXmlElement* config) if (joint.type != Joint::FLOATING && joint.type != Joint::FIXED) { // axis - TiXmlElement *axis_xml = config->FirstChildElement("axis"); + XMLElement *axis_xml = config->FirstChildElement("axis"); if (!axis_xml){ CONSOLE_BRIDGE_logDebug("urdfdom: no axis elemement for Joint link [%s], defaulting to (1,0,0) axis", joint.name.c_str()); joint.axis = Vector3(1.0, 0.0, 0.0); @@ -556,7 +558,7 @@ bool parseJoint(Joint &joint, TiXmlElement* config) } // Get limit - TiXmlElement *limit_xml = config->FirstChildElement("limit"); + XMLElement *limit_xml = config->FirstChildElement("limit"); if (limit_xml) { joint.limits.reset(new JointLimits()); @@ -579,7 +581,7 @@ bool parseJoint(Joint &joint, TiXmlElement* config) } // Get safety - TiXmlElement *safety_xml = config->FirstChildElement("safety_controller"); + XMLElement *safety_xml = config->FirstChildElement("safety_controller"); if (safety_xml) { joint.safety.reset(new JointSafety()); @@ -592,7 +594,7 @@ bool parseJoint(Joint &joint, TiXmlElement* config) } // Get calibration - TiXmlElement *calibration_xml = config->FirstChildElement("calibration"); + XMLElement *calibration_xml = config->FirstChildElement("calibration"); if (calibration_xml) { joint.calibration.reset(new JointCalibration()); @@ -605,7 +607,7 @@ bool parseJoint(Joint &joint, TiXmlElement* config) } // Get Joint Mimic - TiXmlElement *mimic_xml = config->FirstChildElement("mimic"); + XMLElement *mimic_xml = config->FirstChildElement("mimic"); if (mimic_xml) { joint.mimic.reset(new JointMimic()); @@ -618,7 +620,7 @@ bool parseJoint(Joint &joint, TiXmlElement* config) } // Get Dynamics - TiXmlElement *prop_xml = config->FirstChildElement("dynamics"); + XMLElement *prop_xml = config->FirstChildElement("dynamics"); if (prop_xml) { joint.dynamics.reset(new JointDynamics()); @@ -635,71 +637,83 @@ bool parseJoint(Joint &joint, TiXmlElement* config) /* exports */ -bool exportPose(Pose &pose, TiXmlElement* xml); +bool exportPose(Pose &pose, XMLElement* xml); -bool exportJointDynamics(JointDynamics &jd, TiXmlElement* xml) +bool exportJointDynamics(JointDynamics &jd, XMLElement* xml) { - TiXmlElement *dynamics_xml = new TiXmlElement("dynamics"); - dynamics_xml->SetAttribute("damping", urdf_export_helpers::values2str(jd.damping) ); - dynamics_xml->SetAttribute("friction", urdf_export_helpers::values2str(jd.friction) ); - xml->LinkEndChild(dynamics_xml); + XMLDocument *doc = xml->GetDocument(); + + XMLElement *dynamics_xml = doc->NewElement("dynamics"); + dynamics_xml->SetAttribute("damping", urdf_export_helpers::values2str(jd.damping).c_str() ); + dynamics_xml->SetAttribute("friction", urdf_export_helpers::values2str(jd.friction).c_str() ); + xml->InsertEndChild(dynamics_xml); return true; } -bool exportJointLimits(JointLimits &jl, TiXmlElement* xml) +bool exportJointLimits(JointLimits &jl, XMLElement* xml) { - TiXmlElement *limit_xml = new TiXmlElement("limit"); - limit_xml->SetAttribute("effort", urdf_export_helpers::values2str(jl.effort) ); - limit_xml->SetAttribute("velocity", urdf_export_helpers::values2str(jl.velocity) ); - limit_xml->SetAttribute("lower", urdf_export_helpers::values2str(jl.lower) ); - limit_xml->SetAttribute("upper", urdf_export_helpers::values2str(jl.upper) ); - xml->LinkEndChild(limit_xml); + XMLDocument *doc = xml->GetDocument(); + + XMLElement *limit_xml = doc->NewElement("limit"); + limit_xml->SetAttribute("effort", urdf_export_helpers::values2str(jl.effort).c_str() ); + limit_xml->SetAttribute("velocity", urdf_export_helpers::values2str(jl.velocity).c_str() ); + limit_xml->SetAttribute("lower", urdf_export_helpers::values2str(jl.lower).c_str() ); + limit_xml->SetAttribute("upper", urdf_export_helpers::values2str(jl.upper).c_str() ); + xml->InsertEndChild(limit_xml); return true; } -bool exportJointSafety(JointSafety &js, TiXmlElement* xml) +bool exportJointSafety(JointSafety &js, XMLElement* xml) { - TiXmlElement *safety_xml = new TiXmlElement("safety_controller"); - safety_xml->SetAttribute("k_position", urdf_export_helpers::values2str(js.k_position) ); - safety_xml->SetAttribute("k_velocity", urdf_export_helpers::values2str(js.k_velocity) ); - safety_xml->SetAttribute("soft_lower_limit", urdf_export_helpers::values2str(js.soft_lower_limit) ); - safety_xml->SetAttribute("soft_upper_limit", urdf_export_helpers::values2str(js.soft_upper_limit) ); - xml->LinkEndChild(safety_xml); + XMLDocument *doc = xml->GetDocument(); + + XMLElement *safety_xml = doc->NewElement("safety_controller"); + safety_xml->SetAttribute("k_position", urdf_export_helpers::values2str(js.k_position).c_str() ); + safety_xml->SetAttribute("k_velocity", urdf_export_helpers::values2str(js.k_velocity).c_str() ); + safety_xml->SetAttribute("soft_lower_limit", urdf_export_helpers::values2str(js.soft_lower_limit).c_str() ); + safety_xml->SetAttribute("soft_upper_limit", urdf_export_helpers::values2str(js.soft_upper_limit).c_str() ); + xml->InsertEndChild(safety_xml); return true; } -bool exportJointCalibration(JointCalibration &jc, TiXmlElement* xml) +bool exportJointCalibration(JointCalibration &jc, XMLElement* xml) { + XMLDocument *doc = xml->GetDocument(); + if (jc.falling || jc.rising) { - TiXmlElement *calibration_xml = new TiXmlElement("calibration"); + XMLElement *calibration_xml = doc->NewElement("calibration"); if (jc.falling) - calibration_xml->SetAttribute("falling", urdf_export_helpers::values2str(*jc.falling) ); + calibration_xml->SetAttribute("falling", urdf_export_helpers::values2str(*jc.falling).c_str() ); if (jc.rising) - calibration_xml->SetAttribute("rising", urdf_export_helpers::values2str(*jc.rising) ); + calibration_xml->SetAttribute("rising", urdf_export_helpers::values2str(*jc.rising).c_str() ); //calibration_xml->SetAttribute("reference_position", urdf_export_helpers::values2str(jc.reference_position) ); - xml->LinkEndChild(calibration_xml); + xml->InsertEndChild(calibration_xml); } return true; } -bool exportJointMimic(JointMimic &jm, TiXmlElement* xml) +bool exportJointMimic(JointMimic &jm, XMLElement* xml) { + XMLDocument *doc = xml->GetDocument(); + if (!jm.joint_name.empty()) { - TiXmlElement *mimic_xml = new TiXmlElement("mimic"); - mimic_xml->SetAttribute("offset", urdf_export_helpers::values2str(jm.offset) ); - mimic_xml->SetAttribute("multiplier", urdf_export_helpers::values2str(jm.multiplier) ); - mimic_xml->SetAttribute("joint", jm.joint_name ); - xml->LinkEndChild(mimic_xml); + XMLElement *mimic_xml = doc->NewElement("mimic"); + mimic_xml->SetAttribute("offset", urdf_export_helpers::values2str(jm.offset).c_str() ); + mimic_xml->SetAttribute("multiplier", urdf_export_helpers::values2str(jm.multiplier).c_str() ); + mimic_xml->SetAttribute("joint", jm.joint_name.c_str() ); + xml->InsertEndChild(mimic_xml); } return true; } -bool exportJoint(Joint &joint, TiXmlElement* xml) +bool exportJoint(Joint &joint, XMLElement* xml) { - TiXmlElement * joint_xml = new TiXmlElement("joint"); - joint_xml->SetAttribute("name", joint.name); + XMLDocument *doc = xml->GetDocument(); + + XMLElement * joint_xml = doc->NewElement("joint"); + joint_xml->SetAttribute("name", joint.name.c_str()); if (joint.type == urdf::Joint::PLANAR) joint_xml->SetAttribute("type", "planar"); else if (joint.type == urdf::Joint::FLOATING) @@ -719,19 +733,19 @@ bool exportJoint(Joint &joint, TiXmlElement* xml) exportPose(joint.parent_to_joint_origin_transform, joint_xml); // axis - TiXmlElement * axis_xml = new TiXmlElement("axis"); - axis_xml->SetAttribute("xyz", urdf_export_helpers::values2str(joint.axis)); - joint_xml->LinkEndChild(axis_xml); + XMLElement * axis_xml = doc->NewElement("axis"); + axis_xml->SetAttribute("xyz", urdf_export_helpers::values2str(joint.axis).c_str()); + joint_xml->InsertEndChild(axis_xml); // parent - TiXmlElement * parent_xml = new TiXmlElement("parent"); - parent_xml->SetAttribute("link", joint.parent_link_name); + XMLElement * parent_xml = doc-> NewElement("parent"); + parent_xml->SetAttribute("link", joint.parent_link_name.c_str()); joint_xml->LinkEndChild(parent_xml); // child - TiXmlElement * child_xml = new TiXmlElement("child"); - child_xml->SetAttribute("link", joint.child_link_name); - joint_xml->LinkEndChild(child_xml); + XMLElement * child_xml = doc->NewElement("child"); + child_xml->SetAttribute("link", joint.child_link_name.c_str()); + joint_xml->InsertEndChild(child_xml); if (joint.dynamics) exportJointDynamics(*(joint.dynamics), joint_xml); @@ -744,7 +758,7 @@ bool exportJoint(Joint &joint, TiXmlElement* xml) if (joint.mimic) exportJointMimic(*(joint.mimic), joint_xml); - xml->LinkEndChild(joint_xml); + xml->InsertEndChild(joint_xml); return true; } diff --git a/urdf_parser/src/link.cpp b/urdf_parser/src/link.cpp index 0e8b8c30..478e4806 100644 --- a/urdf_parser/src/link.cpp +++ b/urdf_parser/src/link.cpp @@ -42,14 +42,16 @@ #include #include #include -#include +#include #include +using namespace tinyxml2; + namespace urdf{ -bool parsePose(Pose &pose, TiXmlElement* xml); +bool parsePose(Pose &pose, XMLElement* xml); -bool parseMaterial(Material &material, TiXmlElement *config, bool only_name_is_ok) +bool parseMaterial(Material &material, XMLElement *config, bool only_name_is_ok) { bool has_rgb = false; bool has_filename = false; @@ -65,7 +67,7 @@ bool parseMaterial(Material &material, TiXmlElement *config, bool only_name_is_o material.name = config->Attribute("name"); // texture - TiXmlElement *t = config->FirstChildElement("texture"); + XMLElement *t = config->FirstChildElement("texture"); if (t) { if (t->Attribute("filename")) @@ -76,7 +78,7 @@ bool parseMaterial(Material &material, TiXmlElement *config, bool only_name_is_o } // color - TiXmlElement *c = config->FirstChildElement("color"); + XMLElement *c = config->FirstChildElement("color"); if (c) { if (c->Attribute("rgba")) { @@ -104,7 +106,7 @@ bool parseMaterial(Material &material, TiXmlElement *config, bool only_name_is_o } -bool parseSphere(Sphere &s, TiXmlElement *c) +bool parseSphere(Sphere &s, XMLElement *c) { s.clear(); @@ -137,7 +139,7 @@ bool parseSphere(Sphere &s, TiXmlElement *c) return true; } -bool parseBox(Box &b, TiXmlElement *c) +bool parseBox(Box &b, XMLElement *c) { b.clear(); @@ -160,7 +162,7 @@ bool parseBox(Box &b, TiXmlElement *c) return true; } -bool parseCylinder(Cylinder &y, TiXmlElement *c) +bool parseCylinder(Cylinder &y, XMLElement *c) { y.clear(); @@ -213,7 +215,7 @@ bool parseCylinder(Cylinder &y, TiXmlElement *c) } -bool parseMesh(Mesh &m, TiXmlElement *c) +bool parseMesh(Mesh &m, XMLElement *c) { m.clear(); @@ -242,19 +244,19 @@ bool parseMesh(Mesh &m, TiXmlElement *c) return true; } -GeometrySharedPtr parseGeometry(TiXmlElement *g) +GeometrySharedPtr parseGeometry(XMLElement *g) { GeometrySharedPtr geom; if (!g) return geom; - TiXmlElement *shape = g->FirstChildElement(); + XMLElement *shape = g->FirstChildElement(); if (!shape) { CONSOLE_BRIDGE_logError("Geometry tag contains no child element."); return geom; } - std::string type_name = shape->ValueStr(); + std::string type_name(shape->Value()); if (type_name == "sphere") { Sphere *s = new Sphere(); @@ -292,19 +294,19 @@ GeometrySharedPtr parseGeometry(TiXmlElement *g) return GeometrySharedPtr(); } -bool parseInertial(Inertial &i, TiXmlElement *config) +bool parseInertial(Inertial &i, XMLElement *config) { i.clear(); // Origin - TiXmlElement *o = config->FirstChildElement("origin"); + XMLElement *o = config->FirstChildElement("origin"); if (o) { if (!parsePose(i.origin, o)) return false; } - TiXmlElement *mass_xml = config->FirstChildElement("mass"); + XMLElement *mass_xml = config->FirstChildElement("mass"); if (!mass_xml) { CONSOLE_BRIDGE_logError("Inertial element must have a mass element"); @@ -337,7 +339,7 @@ bool parseInertial(Inertial &i, TiXmlElement *config) return false; } - TiXmlElement *inertia_xml = config->FirstChildElement("inertia"); + XMLElement *inertia_xml = config->FirstChildElement("inertia"); if (!inertia_xml) { CONSOLE_BRIDGE_logError("Inertial element must have inertia element"); @@ -388,19 +390,19 @@ bool parseInertial(Inertial &i, TiXmlElement *config) return true; } -bool parseVisual(Visual &vis, TiXmlElement *config) +bool parseVisual(Visual &vis, XMLElement *config) { vis.clear(); // Origin - TiXmlElement *o = config->FirstChildElement("origin"); + XMLElement *o = config->FirstChildElement("origin"); if (o) { if (!parsePose(vis.origin, o)) return false; } // Geometry - TiXmlElement *geom = config->FirstChildElement("geometry"); + XMLElement *geom = config->FirstChildElement("geometry"); vis.geometry = parseGeometry(geom); if (!vis.geometry) return false; @@ -410,7 +412,7 @@ bool parseVisual(Visual &vis, TiXmlElement *config) vis.name = name_char; // Material - TiXmlElement *mat = config->FirstChildElement("material"); + XMLElement *mat = config->FirstChildElement("material"); if (mat) { // get material name if (!mat->Attribute("name")) { @@ -430,19 +432,19 @@ bool parseVisual(Visual &vis, TiXmlElement *config) return true; } -bool parseCollision(Collision &col, TiXmlElement* config) +bool parseCollision(Collision &col, XMLElement* config) { col.clear(); // Origin - TiXmlElement *o = config->FirstChildElement("origin"); + XMLElement *o = config->FirstChildElement("origin"); if (o) { if (!parsePose(col.origin, o)) return false; } // Geometry - TiXmlElement *geom = config->FirstChildElement("geometry"); + XMLElement *geom = config->FirstChildElement("geometry"); col.geometry = parseGeometry(geom); if (!col.geometry) return false; @@ -454,7 +456,7 @@ bool parseCollision(Collision &col, TiXmlElement* config) return true; } -bool parseLink(Link &link, TiXmlElement* config) +bool parseLink(Link &link, XMLElement* config) { link.clear(); @@ -468,7 +470,7 @@ bool parseLink(Link &link, TiXmlElement* config) link.name = std::string(name_char); // Inertial (optional) - TiXmlElement *i = config->FirstChildElement("inertial"); + XMLElement *i = config->FirstChildElement("inertial"); if (i) { link.inertial.reset(new Inertial()); @@ -480,7 +482,7 @@ bool parseLink(Link &link, TiXmlElement* config) } // Multiple Visuals (optional) - for (TiXmlElement* vis_xml = config->FirstChildElement("visual"); vis_xml; vis_xml = vis_xml->NextSiblingElement("visual")) + for (XMLElement* vis_xml = config->FirstChildElement("visual"); vis_xml; vis_xml = vis_xml->NextSiblingElement("visual")) { VisualSharedPtr vis; @@ -503,7 +505,7 @@ bool parseLink(Link &link, TiXmlElement* config) link.visual = link.visual_array[0]; // Multiple Collisions (optional) - for (TiXmlElement* col_xml = config->FirstChildElement("collision"); col_xml; col_xml = col_xml->NextSiblingElement("collision")) + for (XMLElement* col_xml = config->FirstChildElement("collision"); col_xml; col_xml = col_xml->NextSiblingElement("collision")) { CollisionSharedPtr col; col.reset(new Collision()); @@ -528,67 +530,79 @@ bool parseLink(Link &link, TiXmlElement* config) } /* exports */ -bool exportPose(Pose &pose, TiXmlElement* xml); +bool exportPose(Pose &pose, XMLElement* xml); -bool exportMaterial(Material &material, TiXmlElement *xml) +bool exportMaterial(Material &material, XMLElement *xml) { - TiXmlElement *material_xml = new TiXmlElement("material"); - material_xml->SetAttribute("name", material.name); + XMLDocument *doc = xml->GetDocument(); + + XMLElement *material_xml = doc->NewElement("material"); + material_xml->SetAttribute("name", material.name.c_str()); - TiXmlElement* texture = new TiXmlElement("texture"); + XMLElement* texture = doc->NewElement("texture"); if (!material.texture_filename.empty()) - texture->SetAttribute("filename", material.texture_filename); - material_xml->LinkEndChild(texture); + texture->SetAttribute("filename", material.texture_filename.c_str()); + material_xml->InsertEndChild(texture); - TiXmlElement* color = new TiXmlElement("color"); - color->SetAttribute("rgba", urdf_export_helpers::values2str(material.color)); - material_xml->LinkEndChild(color); - xml->LinkEndChild(material_xml); + XMLElement* color = doc->NewElement("color"); + color->SetAttribute("rgba", urdf_export_helpers::values2str(material.color).c_str()); + material_xml->InsertEndChild(color); + xml->InsertEndChild(material_xml); return true; } -bool exportSphere(Sphere &s, TiXmlElement *xml) +bool exportSphere(Sphere &s, XMLElement *xml) { + XMLDocument *doc = xml->GetDocument(); + // e.g. add - TiXmlElement *sphere_xml = new TiXmlElement("sphere"); - sphere_xml->SetAttribute("radius", urdf_export_helpers::values2str(s.radius)); - xml->LinkEndChild(sphere_xml); + XMLElement *sphere_xml = doc->NewElement("sphere"); + sphere_xml->SetAttribute("radius", urdf_export_helpers::values2str(s.radius).c_str()); + xml->InsertEndChild(sphere_xml); return true; } -bool exportBox(Box &b, TiXmlElement *xml) +bool exportBox(Box &b, XMLElement *xml) { + XMLDocument *doc = xml->GetDocument(); + // e.g. add - TiXmlElement *box_xml = new TiXmlElement("box"); - box_xml->SetAttribute("size", urdf_export_helpers::values2str(b.dim)); - xml->LinkEndChild(box_xml); + XMLElement *box_xml = doc->NewElement("box"); + box_xml->SetAttribute("size", urdf_export_helpers::values2str(b.dim).c_str()); + xml->InsertEndChild(box_xml); return true; } -bool exportCylinder(Cylinder &y, TiXmlElement *xml) +bool exportCylinder(Cylinder &y, XMLElement *xml) { + XMLDocument *doc = xml->GetDocument(); + // e.g. add - TiXmlElement *cylinder_xml = new TiXmlElement("cylinder"); - cylinder_xml->SetAttribute("radius", urdf_export_helpers::values2str(y.radius)); - cylinder_xml->SetAttribute("length", urdf_export_helpers::values2str(y.length)); - xml->LinkEndChild(cylinder_xml); + XMLElement *cylinder_xml = doc->NewElement("cylinder"); + cylinder_xml->SetAttribute("radius", urdf_export_helpers::values2str(y.radius).c_str()); + cylinder_xml->SetAttribute("length", urdf_export_helpers::values2str(y.length).c_str()); + xml->InsertEndChild(cylinder_xml); return true; } -bool exportMesh(Mesh &m, TiXmlElement *xml) +bool exportMesh(Mesh &m, XMLElement *xml) { + XMLDocument *doc = xml->GetDocument(); + // e.g. add - TiXmlElement *mesh_xml = new TiXmlElement("mesh"); + XMLElement *mesh_xml = doc->NewElement("mesh"); if (!m.filename.empty()) - mesh_xml->SetAttribute("filename", m.filename); - mesh_xml->SetAttribute("scale", urdf_export_helpers::values2str(m.scale)); - xml->LinkEndChild(mesh_xml); + mesh_xml->SetAttribute("filename", m.filename.c_str()); + mesh_xml->SetAttribute("scale", urdf_export_helpers::values2str(m.scale).c_str()); + xml->InsertEndChild(mesh_xml); return true; } -bool exportGeometry(GeometrySharedPtr &geom, TiXmlElement *xml) +bool exportGeometry(GeometrySharedPtr &geom, XMLElement *xml) { - TiXmlElement *geometry_xml = new TiXmlElement("geometry"); + XMLDocument *doc = xml->GetDocument(); + + XMLElement *geometry_xml = doc->NewElement("geometry"); if (urdf::dynamic_pointer_cast(geom)) { exportSphere((*(urdf::dynamic_pointer_cast(geom).get())), geometry_xml); @@ -614,40 +628,42 @@ bool exportGeometry(GeometrySharedPtr &geom, TiXmlElement *xml) exportSphere((*(urdf::dynamic_pointer_cast(geom).get())), geometry_xml); } - xml->LinkEndChild(geometry_xml); + xml->InsertEndChild(geometry_xml); return true; } -bool exportInertial(Inertial &i, TiXmlElement *xml) +bool exportInertial(Inertial &i, XMLElement *xml) { // adds // // // // - TiXmlElement *inertial_xml = new TiXmlElement("inertial"); + XMLDocument *doc = xml->GetDocument(); + + XMLElement *inertial_xml = doc->NewElement("inertial"); - TiXmlElement *mass_xml = new TiXmlElement("mass"); - mass_xml->SetAttribute("value", urdf_export_helpers::values2str(i.mass)); - inertial_xml->LinkEndChild(mass_xml); + XMLElement *mass_xml = doc->NewElement("mass"); + mass_xml->SetAttribute("value", urdf_export_helpers::values2str(i.mass).c_str()); + inertial_xml->InsertEndChild(mass_xml); exportPose(i.origin, inertial_xml); - TiXmlElement *inertia_xml = new TiXmlElement("inertia"); - inertia_xml->SetAttribute("ixx", urdf_export_helpers::values2str(i.ixx)); - inertia_xml->SetAttribute("ixy", urdf_export_helpers::values2str(i.ixy)); - inertia_xml->SetAttribute("ixz", urdf_export_helpers::values2str(i.ixz)); - inertia_xml->SetAttribute("iyy", urdf_export_helpers::values2str(i.iyy)); - inertia_xml->SetAttribute("iyz", urdf_export_helpers::values2str(i.iyz)); - inertia_xml->SetAttribute("izz", urdf_export_helpers::values2str(i.izz)); - inertial_xml->LinkEndChild(inertia_xml); + XMLElement *inertia_xml = doc->NewElement("inertia"); + inertia_xml->SetAttribute("ixx", urdf_export_helpers::values2str(i.ixx).c_str()); + inertia_xml->SetAttribute("ixy", urdf_export_helpers::values2str(i.ixy).c_str()); + inertia_xml->SetAttribute("ixz", urdf_export_helpers::values2str(i.ixz).c_str()); + inertia_xml->SetAttribute("iyy", urdf_export_helpers::values2str(i.iyy).c_str()); + inertia_xml->SetAttribute("iyz", urdf_export_helpers::values2str(i.iyz).c_str()); + inertia_xml->SetAttribute("izz", urdf_export_helpers::values2str(i.izz).c_str()); + inertial_xml->InsertEndChild(inertia_xml); - xml->LinkEndChild(inertial_xml); + xml->InsertEndChild(inertial_xml); return true; } -bool exportVisual(Visual &vis, TiXmlElement *xml) +bool exportVisual(Visual &vis, XMLElement *xml) { // // @@ -656,7 +672,9 @@ bool exportVisual(Visual &vis, TiXmlElement *xml) // // // - TiXmlElement * visual_xml = new TiXmlElement("visual"); + XMLDocument * doc = xml->GetDocument(); + + XMLElement * visual_xml = doc->NewElement("visual"); exportPose(vis.origin, visual_xml); @@ -665,12 +683,12 @@ bool exportVisual(Visual &vis, TiXmlElement *xml) if (vis.material) exportMaterial(*vis.material, visual_xml); - xml->LinkEndChild(visual_xml); + xml->InsertEndChild(visual_xml); return true; } -bool exportCollision(Collision &col, TiXmlElement* xml) +bool exportCollision(Collision &col, XMLElement* xml) { // // @@ -679,21 +697,25 @@ bool exportCollision(Collision &col, TiXmlElement* xml) // // // - TiXmlElement * collision_xml = new TiXmlElement("collision"); + XMLDocument * doc = xml->GetDocument(); + + XMLElement * collision_xml = doc->NewElement("collision"); exportPose(col.origin, collision_xml); exportGeometry(col.geometry, collision_xml); - xml->LinkEndChild(collision_xml); + xml->InsertEndChild(collision_xml); return true; } -bool exportLink(Link &link, TiXmlElement* xml) +bool exportLink(Link &link, XMLElement* xml) { - TiXmlElement * link_xml = new TiXmlElement("link"); - link_xml->SetAttribute("name", link.name); + XMLDocument * doc = xml->GetDocument(); + + XMLElement * link_xml = doc->NewElement("link"); + link_xml->SetAttribute("name", link.name.c_str()); if (link.inertial) exportInertial(*link.inertial, link_xml); @@ -702,7 +724,7 @@ bool exportLink(Link &link, TiXmlElement* xml) for (std::size_t i = 0 ; i < link.collision_array.size() ; ++i) exportCollision(*link.collision_array[i], link_xml); - xml->LinkEndChild(link_xml); + xml->InsertEndChild(link_xml); return true; } diff --git a/urdf_parser/src/model.cpp b/urdf_parser/src/model.cpp index a905f89e..b9aa6041 100644 --- a/urdf_parser/src/model.cpp +++ b/urdf_parser/src/model.cpp @@ -39,11 +39,13 @@ #include #include +using namespace tinyxml2; + namespace urdf{ -bool parseMaterial(Material &material, TiXmlElement *config, bool only_name_is_ok); -bool parseLink(Link &link, TiXmlElement *config); -bool parseJoint(Joint &joint, TiXmlElement *config); +bool parseMaterial(Material &material, XMLElement *config, bool only_name_is_ok); +bool parseLink(Link &link, XMLElement *config); +bool parseJoint(Joint &joint, XMLElement *config); ModelInterfaceSharedPtr parseURDFFile(const std::string &path) { @@ -64,17 +66,17 @@ ModelInterfaceSharedPtr parseURDF(const std::string &xml_string) ModelInterfaceSharedPtr model(new ModelInterface); model->clear(); - TiXmlDocument xml_doc; + XMLDocument xml_doc; xml_doc.Parse(xml_string.c_str()); if (xml_doc.Error()) { - CONSOLE_BRIDGE_logError(xml_doc.ErrorDesc()); - xml_doc.ClearError(); + CONSOLE_BRIDGE_logError(xml_doc.GetErrorStr1()); + xml_doc.Clear(); model.reset(); return model; } - TiXmlElement *robot_xml = xml_doc.FirstChildElement("robot"); + XMLElement *robot_xml = xml_doc.FirstChildElement("robot"); if (!robot_xml) { CONSOLE_BRIDGE_logError("Could not find the 'robot' element in the xml file"); @@ -93,7 +95,7 @@ ModelInterfaceSharedPtr parseURDF(const std::string &xml_string) model->name_ = std::string(name); // Get all Material elements - for (TiXmlElement* material_xml = robot_xml->FirstChildElement("material"); material_xml; material_xml = material_xml->NextSiblingElement("material")) + for (XMLElement* material_xml = robot_xml->FirstChildElement("material"); material_xml; material_xml = material_xml->NextSiblingElement("material")) { MaterialSharedPtr material; material.reset(new Material); @@ -122,7 +124,7 @@ ModelInterfaceSharedPtr parseURDF(const std::string &xml_string) } // Get all Link elements - for (TiXmlElement* link_xml = robot_xml->FirstChildElement("link"); link_xml; link_xml = link_xml->NextSiblingElement("link")) + for (XMLElement* link_xml = robot_xml->FirstChildElement("link"); link_xml; link_xml = link_xml->NextSiblingElement("link")) { LinkSharedPtr link; link.reset(new Link); @@ -182,7 +184,7 @@ ModelInterfaceSharedPtr parseURDF(const std::string &xml_string) } // Get all Joint elements - for (TiXmlElement* joint_xml = robot_xml->FirstChildElement("joint"); joint_xml; joint_xml = joint_xml->NextSiblingElement("joint")) + for (XMLElement* joint_xml = robot_xml->FirstChildElement("joint"); joint_xml; joint_xml = joint_xml->NextSiblingElement("joint")) { JointSharedPtr joint; joint.reset(new Joint); @@ -242,16 +244,15 @@ ModelInterfaceSharedPtr parseURDF(const std::string &xml_string) return model; } -bool exportMaterial(Material &material, TiXmlElement *config); -bool exportLink(Link &link, TiXmlElement *config); -bool exportJoint(Joint &joint, TiXmlElement *config); -TiXmlDocument* exportURDF(const ModelInterface &model) +bool exportMaterial(Material &material, XMLElement *config); +bool exportLink(Link &link, XMLElement *config); +bool exportJoint(Joint &joint, XMLElement *config); +void exportURDF(const ModelInterface &model, XMLDocument &doc) { - TiXmlDocument *doc = new TiXmlDocument(); - TiXmlElement *robot = new TiXmlElement("robot"); - robot->SetAttribute("name", model.name_); - doc->LinkEndChild(robot); + XMLElement *robot = doc.NewElement("robot"); + robot->SetAttribute("name", model.name_.c_str()); + doc.InsertEndChild(robot); for (std::map::const_iterator m=model.materials_.begin(); m!=model.materials_.end(); m++) @@ -272,12 +273,11 @@ TiXmlDocument* exportURDF(const ModelInterface &model) exportJoint(*(j->second), robot); } - return doc; } -TiXmlDocument* exportURDF(ModelInterfaceSharedPtr &model) +void exportURDF(ModelInterfaceSharedPtr &model, XMLDocument &doc) { - return exportURDF(*model); + exportURDF(*model, doc); } diff --git a/urdf_parser/src/pose.cpp b/urdf_parser/src/pose.cpp index 56bedd48..bccd5bc4 100644 --- a/urdf_parser/src/pose.cpp +++ b/urdf_parser/src/pose.cpp @@ -40,9 +40,11 @@ #include #include #include -#include +#include #include +using namespace tinyxml2; + namespace urdf_export_helpers { std::string values2str(unsigned int count, const double *values, double (*conv)(double)) @@ -87,7 +89,7 @@ std::string values2str(double d) namespace urdf{ -bool parsePose(Pose &pose, TiXmlElement* xml) +bool parsePose(Pose &pose, XMLElement* xml) { pose.clear(); if (xml) @@ -119,14 +121,15 @@ bool parsePose(Pose &pose, TiXmlElement* xml) return true; } -bool exportPose(Pose &pose, TiXmlElement* xml) +bool exportPose(Pose &pose, XMLElement* xml) { - TiXmlElement *origin = new TiXmlElement("origin"); + XMLDocument *doc = xml->GetDocument(); + XMLElement *origin = doc->NewElement("origin"); std::string pose_xyz_str = urdf_export_helpers::values2str(pose.position); std::string pose_rpy_str = urdf_export_helpers::values2str(pose.rotation); - origin->SetAttribute("xyz", pose_xyz_str); - origin->SetAttribute("rpy", pose_rpy_str); - xml->LinkEndChild(origin); + origin->SetAttribute("xyz", pose_xyz_str.c_str()); + origin->SetAttribute("rpy", pose_rpy_str.c_str()); + xml->InsertEndChild(origin); return true; } diff --git a/urdf_parser/src/twist.cpp b/urdf_parser/src/twist.cpp index 694fc914..c6824fe2 100644 --- a/urdf_parser/src/twist.cpp +++ b/urdf_parser/src/twist.cpp @@ -39,12 +39,14 @@ #include #include #include -#include +#include #include +using namespace tinyxml2; + namespace urdf{ -bool parseTwist(Twist &twist, TiXmlElement* xml) +bool parseTwist(Twist &twist, XMLElement* xml) { twist.clear(); if (xml) diff --git a/urdf_parser/src/urdf_model_state.cpp b/urdf_parser/src/urdf_model_state.cpp index d9054dda..b3911619 100644 --- a/urdf_parser/src/urdf_model_state.cpp +++ b/urdf_parser/src/urdf_model_state.cpp @@ -42,12 +42,14 @@ #include #include #include -#include +#include #include +using namespace tinyxml2; + namespace urdf{ -bool parseModelState(ModelState &ms, TiXmlElement* config) +bool parseModelState(ModelState &ms, XMLElement* config) { ms.clear(); @@ -76,7 +78,7 @@ bool parseModelState(ModelState &ms, TiXmlElement* config) } } - TiXmlElement *joint_state_elem = config->FirstChildElement("joint_state"); + XMLElement *joint_state_elem = config->FirstChildElement("joint_state"); if (joint_state_elem) { JointStateSharedPtr joint_state; diff --git a/urdf_parser/src/urdf_sensor.cpp b/urdf_parser/src/urdf_sensor.cpp index 71fc1e55..534c95de 100644 --- a/urdf_parser/src/urdf_sensor.cpp +++ b/urdf_parser/src/urdf_sensor.cpp @@ -41,19 +41,21 @@ #include #include #include -#include +#include #include +using namespace tinyxml2; + namespace urdf{ -bool parsePose(Pose &pose, TiXmlElement* xml); +bool parsePose(Pose &pose, XMLElement* xml); -bool parseCamera(Camera &camera, TiXmlElement* config) +bool parseCamera(Camera &camera, XMLElement* config) { camera.clear(); camera.type = VisualSensor::CAMERA; - TiXmlElement *image = config->FirstChildElement("image"); + XMLElement *image = config->FirstChildElement("image"); if (image) { const char* width_char = image->Attribute("width"); @@ -194,12 +196,12 @@ bool parseCamera(Camera &camera, TiXmlElement* config) return true; } -bool parseRay(Ray &ray, TiXmlElement* config) +bool parseRay(Ray &ray, XMLElement* config) { ray.clear(); ray.type = VisualSensor::RAY; - TiXmlElement *horizontal = config->FirstChildElement("horizontal"); + XMLElement *horizontal = config->FirstChildElement("horizontal"); if (horizontal) { const char* samples_char = horizontal->Attribute("samples"); @@ -279,7 +281,7 @@ bool parseRay(Ray &ray, TiXmlElement* config) } } - TiXmlElement *vertical = config->FirstChildElement("vertical"); + XMLElement *vertical = config->FirstChildElement("vertical"); if (vertical) { const char* samples_char = vertical->Attribute("samples"); @@ -361,12 +363,12 @@ bool parseRay(Ray &ray, TiXmlElement* config) return false; } -VisualSensorSharedPtr parseVisualSensor(TiXmlElement *g) +VisualSensorSharedPtr parseVisualSensor(XMLElement *g) { VisualSensorSharedPtr visual_sensor; // get sensor type - TiXmlElement *sensor_xml; + XMLElement *sensor_xml; if (g->FirstChildElement("camera")) { Camera *camera = new Camera(); @@ -391,7 +393,7 @@ VisualSensorSharedPtr parseVisualSensor(TiXmlElement *g) } -bool parseSensor(Sensor &sensor, TiXmlElement* config) +bool parseSensor(Sensor &sensor, XMLElement* config) { sensor.clear(); @@ -413,7 +415,7 @@ bool parseSensor(Sensor &sensor, TiXmlElement* config) sensor.parent_link_name = std::string(parent_link_name_char); // parse origin - TiXmlElement *o = config->FirstChildElement("origin"); + XMLElement *o = config->FirstChildElement("origin"); if (o) { if (!parsePose(sensor.origin, o)) diff --git a/urdf_parser/src/world.cpp b/urdf_parser/src/world.cpp index ce09c1c3..903451a9 100644 --- a/urdf_parser/src/world.cpp +++ b/urdf_parser/src/world.cpp @@ -41,12 +41,13 @@ #include #include #include -#include #include +using namespace tinyxml2; + namespace urdf{ -bool parseWorld(World &/*world*/, TiXmlElement* /*config*/) +bool parseWorld(World &/*world*/, XMLElement* /*config*/) { // to be implemented @@ -54,15 +55,16 @@ bool parseWorld(World &/*world*/, TiXmlElement* /*config*/) return true; } -bool exportWorld(World &world, TiXmlElement* xml) +bool exportWorld(World &world, XMLElement* xml) { - TiXmlElement * world_xml = new TiXmlElement("world"); - world_xml->SetAttribute("name", world.name); + XMLDocument * doc = xml->GetDocument(); + XMLElement * world_xml = doc->NewElement("world"); + world_xml->SetAttribute("name", world.name.c_str()); // to be implemented // exportModels(*world.models, world_xml); - xml->LinkEndChild(world_xml); + xml->InsertEndChild(world_xml); return true; } From 9ac2df7c838c983b330df9bbbd510c3e78e18a39 Mon Sep 17 00:00:00 2001 From: Jeongseok Lee Date: Sat, 9 Sep 2017 05:06:14 -0400 Subject: [PATCH 2/3] Build tinyxml2 from source --- .travis.yml | 3 --- .travis/build | 8 ++++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index b06a971f..1f4c2b35 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,9 +6,6 @@ compiler: - clang - gcc script: "./.travis/build" -before_install: - - sudo apt-get update -qq - - sudo apt-get install -qq libtinyxml2-dev matrix: allow_failures: - compiler: clang diff --git a/.travis/build b/.travis/build index eca6c2e0..ea676dd1 100755 --- a/.travis/build +++ b/.travis/build @@ -30,6 +30,14 @@ cd "$urdfdom_headers_dir" cmake . sudo make install +# Retrieve tinyxml2 +echo "--> Compiling tinyxml2" +cd "$build_dir" +$git_clone "git://github.com/leethomason/tinyxml2.git" +cd "$tinyxml2_dir" +cmake . +sudo make install + # Compile echo "--> Compiling urdfdom" cd "$root_dir" From 45ff0e8f3e10ec68d7d03731c4fe1de687254fd9 Mon Sep 17 00:00:00 2001 From: Jeongseok Lee Date: Sat, 9 Sep 2017 05:17:35 -0400 Subject: [PATCH 3/3] Add missing variable declaration --- .travis/build | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis/build b/.travis/build index ea676dd1..f5b18d1d 100755 --- a/.travis/build +++ b/.travis/build @@ -6,6 +6,7 @@ root_dir=`pwd` build_dir="$root_dir/_travis/build" console_bridge_dir="$build_dir/console_bridge" urdfdom_headers_dir="$build_dir/urdfdom_headers" +tinyxml2_dir="$build_dir/tinyxml2" # Shortcuts. git_clone="git clone --quiet --recursive"