PCL
ROS

PCL_ROSをMakeFileでコンパイルする

More than 1 year has passed since last update.


目的

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)

https://github.com/nnn112358/pcl_ros-sample


3.コンパイルしたバイナリを実行する。

下記の用な画面が出ればOK。


./pcl_sample


Screenshot from 2017-05-02 11:02:04.png


参考サイト:

https://github.com/gerkey/ros1_external_use