LoginSignup
0
4

More than 5 years have passed since last update.

PCL_ROSをMakeFileでコンパイルする

Last updated at Posted at 2017-05-02

目的

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

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


参考サイト:
https://github.com/gerkey/ros1_external_use

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4