-
Notifications
You must be signed in to change notification settings - Fork 87
Expand file tree
/
Copy pathdistortion_camera.cc
More file actions
138 lines (117 loc) · 4.23 KB
/
distortion_camera.cc
File metadata and controls
138 lines (117 loc) · 4.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
* Copyright (C) 2022 Open Source Robotics Foundation
*
* 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.
*
*/
#include <gtest/gtest.h>
#include <gz/msgs/image.pb.h>
#include <gz/common/Console.hh>
#include <gz/common/Filesystem.hh>
#include <gz/sensors/Manager.hh>
#include <gz/sensors/CameraSensor.hh>
// TODO(WilliamLewww): Remove these pragmas once gz-rendering is disabling the
// warnings
#ifdef _WIN32
#pragma warning(push)
#pragma warning(disable: 4251)
#endif
#include <gz/rendering/RenderEngine.hh>
#include <gz/rendering/RenderingIface.hh>
#include <gz/rendering/Scene.hh>
#ifdef _WIN32
#pragma warning(pop)
#endif
#include "test_config.hh" // NOLINT(build/include)
#include "TransportTestTools.hh"
class DistortionCameraSensorTest: public testing::Test,
public testing::WithParamInterface<const char *>
{
// Documentation inherited
protected: void SetUp() override
{
gz::common::Console::SetVerbosity(4);
}
// Create a Camera sensor from a SDF and gets a image message
public: void ImagesWithBuiltinSDF(const std::string &_renderEngine);
};
void DistortionCameraSensorTest::ImagesWithBuiltinSDF(
const std::string &_renderEngine)
{
// get the darn test data
std::string path = gz::common::joinPaths(PROJECT_SOURCE_PATH, "test",
"sdf", "distortion_camera_sensor_builtin.sdf");
sdf::SDFPtr doc(new sdf::SDF());
sdf::init(doc);
ASSERT_TRUE(sdf::readFile(path, doc));
ASSERT_NE(nullptr, doc->Root());
ASSERT_TRUE(doc->Root()->HasElement("model"));
auto modelPtr = doc->Root()->GetElement("model");
ASSERT_TRUE(modelPtr->HasElement("link"));
auto linkPtr = modelPtr->GetElement("link");
ASSERT_TRUE(linkPtr->HasElement("sensor"));
auto sensorPtr = linkPtr->GetElement("sensor");
if (_renderEngine == "ogre2")
{
gzdbg << "Distortion camera not supported yet in rendering engine: "
<< _renderEngine << std::endl;
return;
}
// Setup gz-rendering with an empty scene
auto *engine = gz::rendering::engine(_renderEngine);
if (!engine)
{
gzdbg << "Engine '" << _renderEngine
<< "' is not supported" << std::endl;
return;
}
gz::rendering::ScenePtr scene = engine->CreateScene("scene");
// do the test
gz::sensors::Manager mgr;
gz::sensors::CameraSensor *sensor =
mgr.CreateSensor<gz::sensors::CameraSensor>(sensorPtr);
ASSERT_NE(sensor, nullptr);
sensor->SetScene(scene);
ASSERT_NE(sensor->RenderingCamera(), nullptr);
EXPECT_NE(sensor->Id(), sensor->RenderingCamera()->Id());
EXPECT_EQ(256u, sensor->ImageWidth());
EXPECT_EQ(257u, sensor->ImageHeight());
std::string topic =
"/test/integration/DistortionCameraPlugin_imagesWithBuiltinSDF";
WaitForMessageTestHelper<gz::msgs::Image> helper(topic);
// Update once to create image
mgr.RunOnce(std::chrono::steady_clock::duration::zero());
EXPECT_TRUE(helper.WaitForMessage()) << helper;
// test removing sensor
// first make sure the sensor objects do exist
auto sensorId = sensor->Id();
auto cameraId = sensor->RenderingCamera()->Id();
EXPECT_EQ(sensor, mgr.Sensor(sensorId));
EXPECT_EQ(sensor->RenderingCamera(), scene->SensorById(cameraId));
// remove and check sensor objects no longer exist in both sensors and
// rendering
EXPECT_TRUE(mgr.Remove(sensorId));
EXPECT_EQ(nullptr, mgr.Sensor(sensorId));
EXPECT_EQ(nullptr, scene->SensorById(cameraId));
// Clean up
engine->DestroyScene(scene);
gz::rendering::unloadEngine(engine->Name());
}
//////////////////////////////////////////////////
TEST_P(DistortionCameraSensorTest, ImagesWithBuiltinSDF)
{
gz::common::Console::SetVerbosity(4);
ImagesWithBuiltinSDF(GetParam());
}
INSTANTIATE_TEST_SUITE_P(DistortionCameraSensor, DistortionCameraSensorTest,
RENDER_ENGINE_VALUES, gz::rendering::PrintToStringParam());