Skip to content

Commit

Permalink
Added integration test for distortion camera
Browse files Browse the repository at this point in the history
Signed-off-by: William Lew <[email protected]>
  • Loading branch information
WilliamLewww committed Mar 4, 2022
1 parent 6ed81e8 commit 94b69b5
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 0 deletions.
1 change: 1 addition & 0 deletions test/integration/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ set(tests_needing_display
camera_sensor_background.cc
camera_video_record_system.cc
depth_camera.cc
distortion_camera.cc
gpu_lidar.cc
optical_tactile_plugin.cc
rgbd_camera.cc
Expand Down
96 changes: 96 additions & 0 deletions test/integration/distortion_camera.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
/*
* 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 <ignition/msgs/image.pb.h>

#include <ignition/common/Console.hh>
#include <ignition/common/Util.hh>
#include <ignition/math/Pose3.hh>
#include <ignition/transport/Node.hh>
#include <ignition/utilities/ExtraTestMacros.hh>

#include "ignition/gazebo/Server.hh"
#include "ignition/gazebo/test_config.hh"

#include "plugins/MockSystem.hh"
#include "../helpers/EnvTestFixture.hh"

using namespace ignition;
using namespace gazebo;
using namespace std::chrono_literals;

/// \brief Test WideAndleCameraTest system
class DistortionCameraTest : public InternalFixture<::testing::Test>
{
};

std::mutex mutex;
msgs::Image imageMsg;
unsigned char *imageBuffer = nullptr;

/////////////////////////////////////////////////
void imageCb(const msgs::Image &_msg)
{
ASSERT_EQ(msgs::PixelFormatType::RGB_INT8,
_msg.pixel_format_type());

mutex.lock();
unsigned int imageSamples = _msg.width() * _msg.height() * 3;

if (!imageBuffer)
imageBuffer = new unsigned char[imageSamples];
memcpy(imageBuffer, _msg.data().c_str(), imageSamples);
mutex.unlock();
}

/////////////////////////////////////////////////
// The test checks the Distortion Camera readings
TEST_F(DistortionCameraTest, IGN_UTILS_TEST_DISABLED_ON_MAC(DistortionCameraBox))
{
// Start server
ServerConfig serverConfig;
const auto sdfFile = common::joinPaths(std::string(PROJECT_SOURCE_PATH),
"test", "worlds", "camera_distortion.sdf");
serverConfig.SetSdfFile(sdfFile);

Server server(serverConfig);
EXPECT_FALSE(server.Running());
EXPECT_FALSE(*server.Running(0));

// subscribe to the image topic
transport::Node node;
node.Subscribe("/camera_sensor_barrel", &imageCb);

// Run server and verify that we are receiving a message
// from the distortion camera
size_t iters100 = 100u;
server.Run(true, iters100, false);

int sleep{0};
int maxSleep{30};
while (imageBuffer == nullptr && sleep < maxSleep)
{
std::this_thread::sleep_for(100ms);
sleep++;
}
EXPECT_LT(sleep, maxSleep);
ASSERT_NE(imageBuffer, nullptr);

delete[] imageBuffer;
}

0 comments on commit 94b69b5

Please sign in to comment.