PCL1.6源码在ZYNQ(Cortex-A9)上编译

          在之前的博客中,已经成功在PC的ubuntu12.04上编译了PCL1.6源码,今天开始尝试在ZYNQ(Cortex-A9)上进行编译。在PCL的邮件列表中,anupkini已经在ZYNQ上成功编译了PCL1.6,但是在使用过程中貌似还存在问题。

          一、软硬件平台

          开发板:ZYNQ(ARM Cortex A9 dual core)
          OS:ubuntu12.04

          二、下载源代码

          可以直接从官网上下载:http://pointclouds.org/downloads/

          也可以使用svn进行下载:

svn co http://svn.pointclouds.org/pcl/trunk pcl-trunk

          注:现在官网上的最稳定版本是1.6,用svn下载的是处于开发阶段的1.7版本

          三、安装依赖库

          根据官网的说明,PCL必须要依赖以下库:

                    

          所以必须要确定PC上已经安装了这些库。我的系统中已经安装了boost库,只需要安装其他库即可。这些库都可以在相关网站上下载源代码进行编译,但是这样花费的时间比较多。我安装的方法是直接在debian的网上下载已经编译好的deb安装文件。

          Eigen3.10:       http://packages.debian.org/sid/libeigen3-dev

          flann1.7:          http://packages.debian.org/sid/libflann1.7

          flann1.7-dev:    http://packages.debian.org/sid/libflann-dev

         下载的时候需要选择针对ARM的armhf架构,然后使用dpkg命令安装即可。

          四、修改大小端

          默认的PCL库中是没有加入ARM的编译选项的,所以要修改一些相关的编译选项。
          参考链接:
                 首先是PCL-1.6.0-Source/common/include/sensor_msgs/PointCloud2.h文件:
          修改前:
          #elif (defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_X86_) || defined(__THW_INTEL__) || defined(__I86__) || defined(__INTEL__)) \
  || (defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64)) \
	|| (defined(__ANDROID__))
#  define PCL_LITTLE_ENDIAN
         修改后:
#elif (defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86)
 || defined(_X86_) || defined(__THW_INTEL__) || defined(__I86__) || defined(__IN
TEL__)) \
  || (defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(_
_x86_64) || defined(_M_X64)) \
        || (defined(__ANDROID__)) || (defined(__arm__)) || (defined(__arm)) || (
defined(__ARM__)) || (defined(__ARM)) 
#  define PCL_LITTLE_ENDIAN
          然后是PCL-1.6.0-Source/io/include/pcl/io/ply/byte_order.h文件:
          修改前:
#elif (defined (i386) || defined (__i386__) || defined (__i386) || defined (_M_IX86) || defined (_X86_) || defined (__THW_INTEL__) || defined (__I86__) || defined (__INTEL__)) \
  || (defined (__amd64__) || defined (__amd64) || defined (__x86_64__) || defined (__x86_64) || defined (_M_X64) || defined (ANDROID))
#  define PLY_LITTLE_ENDIAN
          修改后:
#elif (defined (i386) || defined (__i386__) || defined (__i386) || defined (_M_I
X86) || defined (_X86_) || defined (__THW_INTEL__) || defined (__I86__) || defin
ed (__INTEL__)) \
  || (defined (__amd64__) || defined (__amd64) || defined (__x86_64__) || define
d (__x86_64) || defined (_M_X64) || defined (ANDROID) ||defined(__arm__) || defi
ned(__arm) || defined(__ARM__) || defined(__ARM) )
#  define PLY_LITTLE_ENDIAN

           五、编译安装

           这一步和在PC上基本是一样的,但是在ARM中的编译可以省略一些不必要的代码。具体的编译选项可以参考http://www.pointclouds.org/documentation/tutorials/building_pcl.php,里面讲的很清楚。
           首先在代码中建立build文件夹,然后进入build文件夹的路径,使用cmake生成makefile:
cmake -DCMAKE_BUILD_TYPE=Release .. 
           然后打开生成的CMakeCache.txt,在前面几行可以看到需要编译的包的选项,需要编译就是ON,否则修改成OFF即可,比如所不许要可视化效果,修改BUILD_visualization:BOOL=OFF。
           接下来就是漫长的make过程。。。。。。。。。。。
           终于make成功了,make install一下就算安装完了。            

           六、测试

           又到了测试环节,令人心碎的事情还是发生了。我使用最简单的例程openni_grabber,编译倒是没有问题,但是运行的时候就报错了:
            erminate called after throwing an instance of 'pcl::PCLIOException' 
          what():  No matching device found. 
          openni_wrapper::OpenNIDevice::OpenNIDevice(xn::Context&, const xn::NodeInfo&, const                 xn::NodeInfo&, const xn::NodeInfo&, const xn::NodeInfo&) @ 
          /root/workspace/sources
/PCL-1.6.0-Source/io/src/openni_camera/openni_device.cpp @ 125 : creating image generator failed. Reason: Failed to set USB interface! 
          上网搜了一下,好像很多人也有相同的问题。:
                      
             又要纠结了。。。。。

----------------------------------------------------------------

欢迎大家转载我的文章。

转载请注明:转自古-月

http://blog.csdn.net/hcx25909

欢迎继续关注我的博客









评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值