diff --git a/src/parsers/urdf/geometry.cpp b/src/parsers/urdf/geometry.cpp index 7f2dc82cbb3dea347f3ac2dd2ddca688fcb5c084..b858ee0d31a31bbe2da407daa49d6c9c3dbb9c5a 100644 --- a/src/parsers/urdf/geometry.cpp +++ b/src/parsers/urdf/geometry.cpp @@ -192,6 +192,8 @@ namespace se3 std::vector< boost::shared_ptr< T > > geometries_array = getLinkGeometryArray<T>(link); + if (!model.existBodyName(link_name)) + throw std::invalid_argument("No link " + link_name + " in model"); FrameIndex frame_id = model.getFrameId(link_name); SE3 body_placement = model.frames[frame_id].placement; assert(model.frames[frame_id].type == BODY); diff --git a/src/parsers/urdf/model.cpp b/src/parsers/urdf/model.cpp index 57ea3e30cbc5ffdcec4bb63b3bdea7a89508a232..b42df5c86962554dd83c23efef334b75baba9d6c 100644 --- a/src/parsers/urdf/model.cpp +++ b/src/parsers/urdf/model.cpp @@ -463,6 +463,8 @@ namespace se3 /// void parseRootTree (::urdf::LinkConstPtr root_link, Model & model, const bool verbose) throw (std::invalid_argument) { + appendBodyToJoint(model, 0, root_link->inertial, SE3::Identity(), root_link->name); + BOOST_FOREACH(::urdf::LinkPtr child, root_link->child_links) { parseTree(child, model, SE3::Identity(), verbose);