diff --git a/doc/changelog.rst b/doc/changelog.rst index b3431695..68ed1b68 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -56,6 +56,7 @@ General register one or more MuJoCo plugins on load. - Sensors of type :ref:`user` no longer require :at:`objtype` and :at:`objname`. If unspecified, the objtype will be :ref:`mjOBJ_UNKNOWN`. ``user`` sensors :at:`datatype` default is now :at-val:`"real"`. +- Add support for capsules in URDF import. Simulate ^^^^^^^^ diff --git a/src/xml/xml_urdf.cc b/src/xml/xml_urdf.cc index 58d9058c..4548cc00 100644 --- a/src/xml/xml_urdf.cc +++ b/src/xml/xml_urdf.cc @@ -470,6 +470,14 @@ mjCGeom* mjXURDF::Geom(XMLElement* geom_elem, mjCBody* pbody, bool collision) { ReadAttr(temp, "radius", 1, pgeom->size, text, true, true); } + // capsule + else if ((temp = FindSubElem(elem, "capsule"))) { + pgeom->type = mjGEOM_CAPSULE; + ReadAttr(temp, "radius", 1, pgeom->size, text, true, true); + ReadAttr(temp, "length", 1, pgeom->size+1, text, true, true); + pgeom->size[1] /= 2; // MuJoCo uses half-length + } + // mesh else if ((temp = FindSubElem(elem, "mesh"))) { // set geom type and read mesh attributes diff --git a/test/xml/xml_urdf_test.cc b/test/xml/xml_urdf_test.cc new file mode 100644 index 00000000..dc729947 --- /dev/null +++ b/test/xml/xml_urdf_test.cc @@ -0,0 +1,53 @@ +// Copyright 2021 DeepMind Technologies Limited +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Tests for xml/xml_api.cc. + +#include +#include +#include + +#include +#include +#include +#include "test/fixture.h" + +namespace mujoco { +namespace { + +using ::testing::NotNull; + +// ---------------------------- test capsule -------------------------------- + +TEST_F(MujocoTest, ReadsCapsule) { + static constexpr char urdf[] = R"( + + + + + + + + + + + )"; + std::array error; + mjModel* model = LoadModelFromString(urdf, error.data(), error.size()); + ASSERT_THAT(model, NotNull()) << error.data(); + mj_deleteModel(model); +} + +} // namespace +} // namespace mujoco