Specify camera parameters using standard robotics conventions.
PiperOrigin-RevId: 569147555 Change-Id: I3443f95e5de56a17024f5e5c03f33888dd583edb
This commit is contained in:
committed by
Copybara-Service
parent
ca60de79c8
commit
36d2ffe4f2
@@ -754,6 +754,81 @@ TEST_F(CameraSpecTest, FovyLimits) {
|
||||
mj_deleteModel(m);
|
||||
}
|
||||
|
||||
TEST_F(CameraSpecTest, DuplicatedFocalIgnorePixel) {
|
||||
static constexpr char xml[] = R"(
|
||||
<mujoco>
|
||||
<visual>
|
||||
<map znear="0.01"/>
|
||||
</visual>
|
||||
<worldbody>
|
||||
<body>
|
||||
<geom size="1"/>
|
||||
<camera focal="8e-3 8e-3" focalpixel="100 100"
|
||||
resolution="1920 1200" sensorsize="9.6e-3 6e-3"/>
|
||||
</body>
|
||||
</worldbody>
|
||||
</mujoco>
|
||||
)";
|
||||
std::array<char, 1024> error;
|
||||
mjModel* m = LoadModelFromString(xml, error.data(), error.size());
|
||||
EXPECT_THAT(m, NotNull()) << error.data();
|
||||
EXPECT_NEAR(m->cam_intrinsic[0], 5e-4, 1e-6); // focal length in meters (x)
|
||||
EXPECT_NEAR(m->cam_intrinsic[1], 5e-4, 1e-6); // focal length in meters (y)
|
||||
mj_deleteModel(m);
|
||||
}
|
||||
|
||||
TEST_F(CameraSpecTest, FovyFromResolution) {
|
||||
static constexpr char xml[] = R"(
|
||||
<mujoco>
|
||||
<visual>
|
||||
<map znear="0.01"/>
|
||||
</visual>
|
||||
<worldbody>
|
||||
<body>
|
||||
<geom size="1"/>
|
||||
<!-- 8mm focal length lenses -->
|
||||
<camera focal="8e-3 8e-3" resolution="1920 1200" sensorsize="9.6e-3 6e-3"/>
|
||||
</body>
|
||||
</worldbody>
|
||||
</mujoco>
|
||||
)";
|
||||
std::array<char, 1024> error;
|
||||
mjModel* m = LoadModelFromString(xml, error.data(), error.size());
|
||||
EXPECT_THAT(m, NotNull()) << error.data();
|
||||
EXPECT_NEAR(m->cam_fovy[0], 41.112, 1e-3);
|
||||
EXPECT_NEAR(m->cam_intrinsic[0], 8e-3, 1e-6); // focal length in meters (x)
|
||||
EXPECT_NEAR(m->cam_intrinsic[1], 8e-3, 1e-6); // focal length in meters (y)
|
||||
EXPECT_EQ(m->cam_intrinsic[2], 0); // principal point in meters (x)
|
||||
EXPECT_EQ(m->cam_intrinsic[3], 0); // principal point in meters (y)
|
||||
mj_deleteModel(m);
|
||||
}
|
||||
|
||||
TEST_F(CameraSpecTest, FovyFromResolutionPixel) {
|
||||
static constexpr char xml[] = R"(
|
||||
<mujoco>
|
||||
<visual>
|
||||
<map znear="0.01"/>
|
||||
</visual>
|
||||
<worldbody>
|
||||
<body>
|
||||
<geom size="1"/>
|
||||
<!-- 8mm focal length lenses -->
|
||||
<camera focalpixel="1600 1600" resolution="1920 1200" sensorsize="9.6e-3 6e-3"/>
|
||||
</body>
|
||||
</worldbody>
|
||||
</mujoco>
|
||||
)";
|
||||
std::array<char, 1024> error;
|
||||
mjModel* m = LoadModelFromString(xml, error.data(), error.size());
|
||||
EXPECT_THAT(m, NotNull()) << error.data();
|
||||
EXPECT_NEAR(m->cam_fovy[0], 41.112, 1e-3);
|
||||
EXPECT_NEAR(m->cam_intrinsic[0], 8e-3, 1e-6); // focal length in meters (x)
|
||||
EXPECT_NEAR(m->cam_intrinsic[1], 8e-3, 1e-6); // focal length in meters (y)
|
||||
EXPECT_EQ(m->cam_intrinsic[2], 0); // principal point in meters (x)
|
||||
EXPECT_EQ(m->cam_intrinsic[3], 0); // principal point in meters (y)
|
||||
mj_deleteModel(m);
|
||||
}
|
||||
|
||||
// ------------- test actuator order -------------------------------------------
|
||||
|
||||
using ActuatorTest = MujocoTest;
|
||||
|
||||
Reference in New Issue
Block a user