質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

ビルド

ソースコードを単体で実行可能なソフトウェアへ変換する過程をビルド(build)と呼びます

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2450閲覧

PCLのチュートリアル"Extracting indices from a PointCloud"がビルドできない

lime00

総合スコア25

CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

ビルド

ソースコードを単体で実行可能なソフトウェアへ変換する過程をビルド(build)と呼びます

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/01/12 07:36

PCLを用いて、点群の中から平面を抽出することを行いたいです。
PCLのチュートリアルの中に"Extracting indices from a PointCloud(http://vml.sakura.ne.jp/koeda/PCL/tutorials/html/extract_indices.html)"というものがあり、このコードを実行しようとcmakeを用いてビルドしたところ、以下のようなエラーが発生しました。
チュートリアルに記載されているコードをそのままコピペしてビルドしたので、おそらくライブラリ関係でのエラーかと思うのですが、原因がわかりません。どなたか解決策を教えていただけませんでしょうか。

extract_indices.cpp

C++

1#include <iostream> 2#include <pcl/ModelCoefficients.h> 3#include <pcl/io/pcd_io.h> 4#include <pcl/point_types.h> 5#include <pcl/sample_consensus/method_types.h> 6#include <pcl/sample_consensus/model_types.h> 7#include <pcl/segmentation/sac_segmentation.h> 8#include <pcl/filters/voxel_grid.h> 9#include <pcl/filters/extract_indices.h> 10 11int 12main (int argc, char** argv) 13{ 14 sensor_msgs::PointCloud2::Ptr cloud_blob (new sensor_msgs::PointCloud2), cloud_filtered_blob (new sensor_msgs::PointCloud2); 15 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>), cloud_p (new pcl::PointCloud<pcl::PointXYZ>), cloud_f (new pcl::PointCloud<pcl::PointXYZ>); 16 17 // Fill in the cloud data 18 pcl::PCDReader reader; 19 reader.read ("table_scene_lms400.pcd", *cloud_blob); 20 21 std::cerr << "PointCloud before filtering: " << cloud_blob->width * cloud_blob->height << " data points." << std::endl; 22 23 // Create the filtering object: downsample the dataset using a leaf size of 1cm 24 pcl::VoxelGrid<sensor_msgs::PointCloud2> sor; 25 sor.setInputCloud (cloud_blob); 26 sor.setLeafSize (0.01f, 0.01f, 0.01f); 27 sor.filter (*cloud_filtered_blob); 28 29 // Convert to the templated PointCloud 30 pcl::fromROSMsg (*cloud_filtered_blob, *cloud_filtered); 31 32 std::cerr << "PointCloud after filtering: " << cloud_filtered->width * cloud_filtered->height << " data points." << std::endl; 33 34 // Write the downsampled version to disk 35 pcl::PCDWriter writer; 36 writer.write<pcl::PointXYZ> ("table_scene_lms400_downsampled.pcd", *cloud_filtered, false); 37 38 pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients ()); 39 pcl::PointIndices::Ptr inliers (new pcl::PointIndices ()); 40 // Create the segmentation object 41 pcl::SACSegmentation<pcl::PointXYZ> seg; 42 // Optional 43 seg.setOptimizeCoefficients (true); 44 // Mandatory 45 seg.setModelType (pcl::SACMODEL_PLANE); 46 seg.setMethodType (pcl::SAC_RANSAC); 47 seg.setMaxIterations (1000); 48 seg.setDistanceThreshold (0.01); 49 50 // Create the filtering object 51 pcl::ExtractIndices<pcl::PointXYZ> extract; 52 53 int i = 0, nr_points = (int) cloud_filtered->points.size (); 54 // While 30% of the original cloud is still there 55 while (cloud_filtered->points.size () > 0.3 * nr_points) 56 { 57 // Segment the largest planar component from the remaining cloud 58 seg.setInputCloud (cloud_filtered); 59 seg.segment (*inliers, *coefficients); 60 if (inliers->indices.size () == 0) 61 { 62 std::cerr << "Could not estimate a planar model for the given dataset." << std::endl; 63 break; 64 } 65 66 // Extract the inliers 67 extract.setInputCloud (cloud_filtered); 68 extract.setIndices (inliers); 69 extract.setNegative (false); 70 extract.filter (*cloud_p); 71 std::cerr << "PointCloud representing the planar component: " << cloud_p->width * cloud_p->height << " data points." << std::endl; 72 73 std::stringstream ss; 74 ss << "table_scene_lms400_plane_" << i << ".pcd"; 75 writer.write<pcl::PointXYZ> (ss.str (), *cloud_p, false); 76 77 // Create the filtering object 78 extract.setNegative (true); 79 extract.filter (*cloud_f); 80 cloud_filtered.swap (cloud_f); 81 i++; 82 } 83 84 return (0); 85}

ビルド結果

/home/------/pcl/extract_indices/extract_indices.cpp: In function ‘int main(int, char**)’: /home/------/pcl/extract_indices/extract_indices.cpp:15:8: error: ‘pcl::PointCloud2’ has not been declared pcl::PointCloud2::Ptr cloud_blob (new sensor_msgs::PointCloud2), cloud_filtered_blob (new sensor_msgs::PointCloud2); ^~~~~~~~~~~ /home/------/pcl/extract_indices/extract_indices.cpp:20:43: error: ‘cloud_blob’ was not declared in this scope reader.read ("table_scene_lms400.pcd", *cloud_blob); ^~~~~~~~~~ /home/------/pcl/extract_indices/extract_indices.cpp:20:43: note: suggested alternative: ‘cloud_f’ reader.read ("table_scene_lms400.pcd", *cloud_blob); ^~~~~~~~~~ cloud_f /home/------/pcl/extract_indices/extract_indices.cpp:25:18: error: ‘sensor_msgs’ was not declared in this scope pcl::VoxelGrid<sensor_msgs::PointCloud2> sor; ^~~~~~~~~~~ /home/------/pcl/extract_indices/extract_indices.cpp:25:42: error: template argument 1 is invalid pcl::VoxelGrid<sensor_msgs::PointCloud2> sor; ^ /home/------/pcl/extract_indices/extract_indices.cpp:26:7: error: request for member ‘setInputCloud’ in ‘sor’, which is of non-class type ‘int’ sor.setInputCloud (cloud_blob); ^~~~~~~~~~~~~ /home/------/pcl/extract_indices/extract_indices.cpp:27:7: error: request for member ‘setLeafSize’ in ‘sor’, which is of non-class type ‘int’ sor.setLeafSize (0.01f, 0.01f, 0.01f); ^~~~~~~~~~~ /home/------/pcl/extract_indices/extract_indices.cpp:28:7: error: request for member ‘filter’ in ‘sor’, which is of non-class type ‘int’ sor.filter (*cloud_filtered_blob); ^~~~~~ /home/------/pcl/extract_indices/extract_indices.cpp:28:16: error: ‘cloud_filtered_blob’ was not declared in this scope sor.filter (*cloud_filtered_blob); ^~~~~~~~~~~~~~~~~~~ /home/------/pcl/extract_indices/extract_indices.cpp:28:16: note: suggested alternative: ‘cloud_filtered’ sor.filter (*cloud_filtered_blob); ^~~~~~~~~~~~~~~~~~~ cloud_filtered /home/------/pcl/extract_indices/extract_indices.cpp:31:8: error: ‘fromROSMsg’ is not a member of ‘pcl’ pcl::fromROSMsg (*cloud_filtered_blob, *cloud_filtered); ^~~~~~~~~~ In file included from /home/------/pcl/extract_indices/extract_indices.cpp:6:0: /usr/include/pcl-1.8/pcl/sample_consensus/model_types.h: In function ‘void __static_initialization_and_destruction_0(int, int)’: /usr/include/pcl-1.8/pcl/sample_consensus/model_types.h:99:3: warning: ‘pcl::SAC_SAMPLE_SIZE’ is deprecated: This map is deprecated and is kept only to prevent breaking existing user code. Starting from PCL 1.8.0 model sample size is a protected member of the SampleConsensusModel class [-Wdeprecated-declarations] SAC_SAMPLE_SIZE (sample_size_pairs, sample_size_pairs + sizeof (sample_size_pairs) / sizeof (SampleSizeModel)); ^~~~~~~~~~~~~~~ /usr/include/pcl-1.8/pcl/sample_consensus/model_types.h:99:3: note: declared here CMakeFiles/extract_indices.dir/build.make:62: recipe for target 'CMakeFiles/extract_indices.dir/extract_indices.cpp.o' failed make[2]: *** [CMakeFiles/extract_indices.dir/extract_indices.cpp.o] Error 1 CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/extract_indices.dir/all' failed make[1]: *** [CMakeFiles/extract_indices.dir/all] Error 2 Makefile:83: recipe for target 'all' failed make: *** [all] Error 2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

参考にされたサイトの情報が古いようです。
最新のPCLの公式のチュートリアルを参考にしましょう

投稿2021/01/15 16:49

yominet

総合スコア187

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lime00

2021/01/16 01:23

どうやらそのとおりでした。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問