2013-06-26 17:08:00 -07:00
|
|
|
#include <string>
|
|
|
|
|
|
2013-06-26 15:41:31 -07:00
|
|
|
#include "gtest/gtest.h"
|
|
|
|
|
|
|
|
|
|
#include "pcl_conversions/pcl_conversions.h"
|
|
|
|
|
|
2013-06-26 17:08:00 -07:00
|
|
|
namespace {
|
|
|
|
|
|
|
|
|
|
class PCLConversionTests : public ::testing::Test {
|
|
|
|
|
protected:
|
|
|
|
|
virtual void SetUp() {
|
|
|
|
|
pcl_image.header.frame_id = "pcl";
|
|
|
|
|
pcl_image.height = 1;
|
|
|
|
|
pcl_image.width = 2;
|
|
|
|
|
pcl_image.step = 1;
|
|
|
|
|
pcl_image.is_bigendian = true;
|
|
|
|
|
pcl_image.encoding = "bgr8";
|
|
|
|
|
pcl_image.data.resize(2);
|
|
|
|
|
pcl_image.data[0] = 0x42;
|
|
|
|
|
pcl_image.data[1] = 0x43;
|
|
|
|
|
|
|
|
|
|
pcl_pc2.header.frame_id = "pcl";
|
|
|
|
|
pcl_pc2.height = 1;
|
|
|
|
|
pcl_pc2.width = 2;
|
|
|
|
|
pcl_pc2.point_step = 1;
|
|
|
|
|
pcl_pc2.row_step = 1;
|
|
|
|
|
pcl_pc2.is_bigendian = true;
|
|
|
|
|
pcl_pc2.is_dense = true;
|
|
|
|
|
pcl_pc2.fields.resize(2);
|
|
|
|
|
pcl_pc2.fields[0].name = "XYZ";
|
2013-07-12 13:59:30 -07:00
|
|
|
pcl_pc2.fields[0].datatype = pcl::PCLPointField::INT8;
|
2013-06-26 17:08:00 -07:00
|
|
|
pcl_pc2.fields[0].count = 3;
|
|
|
|
|
pcl_pc2.fields[0].offset = 0;
|
|
|
|
|
pcl_pc2.fields[1].name = "RGB";
|
2013-07-12 13:59:30 -07:00
|
|
|
pcl_pc2.fields[1].datatype = pcl::PCLPointField::INT8;
|
2013-06-26 17:08:00 -07:00
|
|
|
pcl_pc2.fields[1].count = 3;
|
|
|
|
|
pcl_pc2.fields[1].offset = 8 * 3;
|
|
|
|
|
pcl_pc2.data.resize(2);
|
|
|
|
|
pcl_pc2.data[0] = 0x42;
|
|
|
|
|
pcl_pc2.data[1] = 0x43;
|
|
|
|
|
}
|
|
|
|
|
|
2013-07-12 13:59:30 -07:00
|
|
|
pcl::PCLImage pcl_image;
|
2019-10-29 19:10:32 -04:00
|
|
|
sensor_msgs::msg::Image image;
|
2013-06-26 17:08:00 -07:00
|
|
|
|
2013-07-12 13:59:30 -07:00
|
|
|
pcl::PCLPointCloud2 pcl_pc2;
|
2019-10-29 19:10:32 -04:00
|
|
|
sensor_msgs::msg::PointCloud2 pc2;
|
2013-06-26 17:08:00 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template<class T>
|
|
|
|
|
void test_image(T &image) {
|
|
|
|
|
EXPECT_EQ(std::string("pcl"), image.header.frame_id);
|
2019-10-29 19:10:32 -04:00
|
|
|
EXPECT_EQ(1U, image.height);
|
|
|
|
|
EXPECT_EQ(2U, image.width);
|
|
|
|
|
EXPECT_EQ(1U, image.step);
|
2013-06-26 17:08:00 -07:00
|
|
|
EXPECT_TRUE(image.is_bigendian);
|
|
|
|
|
EXPECT_EQ(std::string("bgr8"), image.encoding);
|
2019-10-29 19:10:32 -04:00
|
|
|
EXPECT_EQ(2U, image.data.size());
|
2013-06-26 17:08:00 -07:00
|
|
|
EXPECT_EQ(0x42, image.data[0]);
|
|
|
|
|
EXPECT_EQ(0x43, image.data[1]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(PCLConversionTests, imageConversion) {
|
2013-06-28 12:07:30 -07:00
|
|
|
pcl_conversions::fromPCL(pcl_image, image);
|
2013-06-26 17:08:00 -07:00
|
|
|
test_image(image);
|
2013-07-12 13:59:30 -07:00
|
|
|
pcl::PCLImage pcl_image2;
|
2013-06-28 12:07:30 -07:00
|
|
|
pcl_conversions::toPCL(image, pcl_image2);
|
2013-06-26 17:08:00 -07:00
|
|
|
test_image(pcl_image2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class T>
|
|
|
|
|
void test_pc(T &pc) {
|
|
|
|
|
EXPECT_EQ(std::string("pcl"), pc.header.frame_id);
|
2019-10-29 19:10:32 -04:00
|
|
|
EXPECT_EQ(1U, pc.height);
|
|
|
|
|
EXPECT_EQ(2U, pc.width);
|
|
|
|
|
EXPECT_EQ(1U, pc.point_step);
|
|
|
|
|
EXPECT_EQ(1U, pc.row_step);
|
2013-06-26 17:08:00 -07:00
|
|
|
EXPECT_TRUE(pc.is_bigendian);
|
|
|
|
|
EXPECT_TRUE(pc.is_dense);
|
|
|
|
|
EXPECT_EQ("XYZ", pc.fields[0].name);
|
2013-07-12 13:59:30 -07:00
|
|
|
EXPECT_EQ(pcl::PCLPointField::INT8, pc.fields[0].datatype);
|
2019-10-29 19:10:32 -04:00
|
|
|
EXPECT_EQ(3U, pc.fields[0].count);
|
|
|
|
|
EXPECT_EQ(0U, pc.fields[0].offset);
|
2013-06-26 17:08:00 -07:00
|
|
|
EXPECT_EQ("RGB", pc.fields[1].name);
|
2013-07-12 13:59:30 -07:00
|
|
|
EXPECT_EQ(pcl::PCLPointField::INT8, pc.fields[1].datatype);
|
2019-10-29 19:10:32 -04:00
|
|
|
EXPECT_EQ(3U, pc.fields[1].count);
|
|
|
|
|
EXPECT_EQ(8U * 3U, pc.fields[1].offset);
|
|
|
|
|
EXPECT_EQ(2U, pc.data.size());
|
2013-06-26 17:08:00 -07:00
|
|
|
EXPECT_EQ(0x42, pc.data[0]);
|
|
|
|
|
EXPECT_EQ(0x43, pc.data[1]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(PCLConversionTests, pointcloud2Conversion) {
|
2013-06-28 12:07:30 -07:00
|
|
|
pcl_conversions::fromPCL(pcl_pc2, pc2);
|
2013-06-26 17:08:00 -07:00
|
|
|
test_pc(pc2);
|
2013-07-12 13:59:30 -07:00
|
|
|
pcl::PCLPointCloud2 pcl_pc2_2;
|
2013-06-28 12:07:30 -07:00
|
|
|
pcl_conversions::toPCL(pc2, pcl_pc2_2);
|
2013-06-26 17:08:00 -07:00
|
|
|
test_pc(pcl_pc2_2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // namespace
|
2013-06-26 15:41:31 -07:00
|
|
|
|
2015-02-11 11:29:33 -08:00
|
|
|
|
|
|
|
|
struct StampTestData
|
|
|
|
|
{
|
2019-10-29 19:10:32 -04:00
|
|
|
const rclcpp::Time stamp_;
|
|
|
|
|
rclcpp::Time stamp2_;
|
2015-02-11 11:29:33 -08:00
|
|
|
|
2019-10-29 19:10:32 -04:00
|
|
|
explicit StampTestData(const rclcpp::Time &stamp)
|
2015-02-11 11:29:33 -08:00
|
|
|
: stamp_(stamp)
|
|
|
|
|
{
|
|
|
|
|
pcl::uint64_t pcl_stamp;
|
|
|
|
|
pcl_conversions::toPCL(stamp_, pcl_stamp);
|
|
|
|
|
pcl_conversions::fromPCL(pcl_stamp, stamp2_);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
TEST(PCLConversionStamp, Stamps)
|
|
|
|
|
{
|
|
|
|
|
{
|
2019-10-29 19:10:32 -04:00
|
|
|
const StampTestData d(rclcpp::Time(1, 1000));
|
2015-02-11 11:29:33 -08:00
|
|
|
EXPECT_TRUE(d.stamp_==d.stamp2_);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
2019-10-29 19:10:32 -04:00
|
|
|
const StampTestData d(rclcpp::Time(1, 999999000));
|
2015-02-11 11:29:33 -08:00
|
|
|
EXPECT_TRUE(d.stamp_==d.stamp2_);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
2019-10-29 19:10:32 -04:00
|
|
|
const StampTestData d(rclcpp::Time(1, 999000000));
|
2015-02-11 11:29:33 -08:00
|
|
|
EXPECT_TRUE(d.stamp_==d.stamp2_);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
2019-10-29 19:10:32 -04:00
|
|
|
const StampTestData d(rclcpp::Time(1423680574, 746000000));
|
2015-02-11 11:29:33 -08:00
|
|
|
EXPECT_TRUE(d.stamp_==d.stamp2_);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
2019-10-29 19:10:32 -04:00
|
|
|
const StampTestData d(rclcpp::Time(1423680629, 901000000));
|
2015-02-11 11:29:33 -08:00
|
|
|
EXPECT_TRUE(d.stamp_==d.stamp2_);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-06-26 17:08:00 -07:00
|
|
|
int main(int argc, char **argv) {
|
|
|
|
|
try {
|
|
|
|
|
::testing::InitGoogleTest(&argc, argv);
|
|
|
|
|
return RUN_ALL_TESTS();
|
|
|
|
|
} catch (std::exception &e) {
|
|
|
|
|
std::cerr << "Unhandled Exception: " << e.what() << std::endl;
|
|
|
|
|
}
|
|
|
|
|
return 1;
|
|
|
|
|
}
|