Support capsules in URDF import.
PiperOrigin-RevId: 489980760 Change-Id: I1c21e736a86f6637a00e2062727d2e6fd5694c42
This commit is contained in:
committed by
Copybara-Service
parent
45b3af78a0
commit
638c9a6994
@@ -56,6 +56,7 @@ General
|
|||||||
register one or more MuJoCo plugins on load.
|
register one or more MuJoCo plugins on load.
|
||||||
- Sensors of type :ref:`user<sensor-user>` no longer require :at:`objtype` and :at:`objname`. If unspecified, the
|
- Sensors of type :ref:`user<sensor-user>` no longer require :at:`objtype` and :at:`objname`. If unspecified, the
|
||||||
objtype will be :ref:`mjOBJ_UNKNOWN<mjtObj>`. ``user`` sensors :at:`datatype` default is now :at-val:`"real"`.
|
objtype will be :ref:`mjOBJ_UNKNOWN<mjtObj>`. ``user`` sensors :at:`datatype` default is now :at-val:`"real"`.
|
||||||
|
- Add support for capsules in URDF import.
|
||||||
|
|
||||||
Simulate
|
Simulate
|
||||||
^^^^^^^^
|
^^^^^^^^
|
||||||
|
|||||||
@@ -470,6 +470,14 @@ mjCGeom* mjXURDF::Geom(XMLElement* geom_elem, mjCBody* pbody, bool collision) {
|
|||||||
ReadAttr(temp, "radius", 1, pgeom->size, text, true, true);
|
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
|
// mesh
|
||||||
else if ((temp = FindSubElem(elem, "mesh"))) {
|
else if ((temp = FindSubElem(elem, "mesh"))) {
|
||||||
// set geom type and read mesh attributes
|
// set geom type and read mesh attributes
|
||||||
|
|||||||
@@ -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 <cstddef>
|
||||||
|
#include <cstring>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <gmock/gmock.h>
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include <mujoco/mujoco.h>
|
||||||
|
#include "test/fixture.h"
|
||||||
|
|
||||||
|
namespace mujoco {
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
using ::testing::NotNull;
|
||||||
|
|
||||||
|
// ---------------------------- test capsule --------------------------------
|
||||||
|
|
||||||
|
TEST_F(MujocoTest, ReadsCapsule) {
|
||||||
|
static constexpr char urdf[] = R"(
|
||||||
|
<robot name="">
|
||||||
|
<link name="torso">
|
||||||
|
<collision>
|
||||||
|
<origin rpy="-1.57080 0.00000 0.00000" xyz="0.00000 0.00000 0.00000"/>
|
||||||
|
<geometry>
|
||||||
|
<capsule length="0.14000" radius="0.07000"/>
|
||||||
|
</geometry>
|
||||||
|
</collision>
|
||||||
|
</link>
|
||||||
|
</robot>
|
||||||
|
)";
|
||||||
|
std::array<char, 1000> error;
|
||||||
|
mjModel* model = LoadModelFromString(urdf, error.data(), error.size());
|
||||||
|
ASSERT_THAT(model, NotNull()) << error.data();
|
||||||
|
mj_deleteModel(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
} // namespace mujoco
|
||||||
Reference in New Issue
Block a user