##目的
UbuntuでPCLをコンパイルする場合、CMakeLists.txtを書いてCMAKEでMakefileを生成する必要がある。既存のMakefileでコンパイルしているC++ソースにPCLを組み込む場合、CMAKEを使うことがネックとなる場合がある。
ROSをインストールすることで、ROSからPCLを呼び出すPCL_ROSが使用できる。ROSはMakeFileでコンパイルすることができる機能がある。
##1.UbuntuにROS・PCL_ROSをインストールする。
下記のコマンドでROSをインストールする。ROSをインストールすると、PCL_ROS(PCLの機能をROSから呼び出すライブラリ)が含まれる。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-key 0xB01FA116
sudo apt-get update
sudo apt-get install ros-indigo-desktop-full`
参考サイト:
http://wiki.ros.org/ja/
##2.PCL_ROSをMakefileでコンパイルする。
ROSもDefaultではCmakeでコンパイルするが、pkg-configをつかって、Makefileでコンパイルすることができる。
同じフォルダに、main.cppとMakefileを作成する。サンプルとして、ランダムな点群を表示するサンプルを作成する。
makeコマンドでコンパイルができる。
make
main.cpp
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/cloud_viewer.h>
int main (int argc, char** argv)
{
pcl::PointCloud<pcl::PointXYZ> cloud;
cloud.width = 100;
cloud.height = 100;
cloud.is_dense = false;
cloud.points.resize (cloud.width * cloud.height);
for (size_t i = 0; i < cloud.points.size (); ++i)
{
cloud.points[i].x = 4.0 * rand () / (RAND_MAX + 1.0);
cloud.points[i].y = 4.0 * rand () / (RAND_MAX + 1.0);
cloud.points[i].z = 4.0 * rand () / (RAND_MAX + 1.0);
}
pcl::visualization::CloudViewer viewer ("Simple Cloud Viewer");
viewer.showCloud (cloud.makeShared());
while (!viewer.wasStopped ()) {
}
return (0);
}
Makefile
#############################################################################
# Makefile for building: ROS_module
#############################################################################
CXX = g++
LINK = g++
CXXFLAGS = `pkg-config --cflags roscpp pcl_conversions pcl_ros` -W
INCPATH =
LIBS = $(SUBLIBS) $(ros_libs_nocolon)
ros_libs = $(shell pkg-config --libs roscpp pcl_conversions pcl_ros)
ros_libs_nocolon = $(subst -l:,,$(ros_libs))
####### Files
HEADERS =
SOURCES = main.cpp
OBJECTS = main.o
TARGET = pcl_sample
first: all
####### Implicit rules
.SUFFIXES:.cpp
.cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
all: Makefile $(TARGET)
$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
clean:
rm -f $(OBJECTS) $(TARGET)
##3.コンパイルしたバイナリを実行する。
下記の用な画面が出ればOK。
./pcl_sample