PCL1.6源码在ZYNQ(Cortex-A9)上编译
2013-03-10 13:39
495 查看
在之前的博客中,已经成功在PC的ubuntu12.04上编译了PCL1.6源码,今天开始尝试在ZYNQ(Cortex-A9)上进行编译。在PCL的邮件列表中,anupkini已经在ZYNQ上成功编译了PCL1.6,但是在使用过程中貌似还存在问题。
相关链接:http://www.pcl-developers.org/unable-to-compile-PCL-for-ARM-Cortex-A9-td5707514.html
一、软硬件平台
开发板: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的编译选项的,所以要修改一些相关的编译选项。参考链接:
http://www.pcl-developers.org/Question-on-suggested-patch-for-1-6-td5707144.html
http://www.pcl-users.org/What-version-of-OpenNI-is-compatible-with-PCL-1-6-0-td4023883.html
首先是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://www.pcl-developers.org/Openni-Grabber-openni-device-cpp-125-creating-image-generator-failed-td5707710.html
http://www.pcl-users.org/libusb-OpenNI-permission-denied-Kinect-amp-Ubuntu-td3720915.html#a3831551
又要纠结了。。。。。
----------------------------------------------------------------
欢迎大家转载我的文章。
转载请注明:转自古-月
http://blog.csdn.net/hcx25909
欢迎继续关注我的博客
相关文章推荐
- PCL1.6源码在ZYNQ(Cortex-A9)上编译
- Ubuntu12.04编译PCL1.6源码
- Ubuntu12.04编译PCL1.6源码
- PCL 1.8.0 VS2010 x64源码编译
- ubuntu14.04 编译源码安装PCL1.8
- PCL Kinfu VS2010 cmake 源码编译
- 如何用jdk1.6编译android源码
- Windows+QT5.9.2+QTCreator编译PCL1.8.1源码
- Android 源码编译问题:Your version is: java version "1.6.0_27".The correct version is: Java SE 1.6.
- 编译PCL1.6.0源码时链接出错
- ubuntu12.04编译android源码环境搭建____安装JDK 1.6
- 利用Visual Studio 2013编译PCL 1.8.0 源码
- 从github上面下载的pcl kinect fusion源码,编译和配置
- pcl源码编译 全过程,主要使用kinfu。
- 源码编译安装GO1.6
- 移植编译bcm sdk6.4.8 过程-平台arm-linux cortex-a9双核,系xilinx soc
- pcl源码编译 : 错误libboost_thread-vc100-mt-gd-1_51.lib(thread.obj)
- Spark1.6源码编译
- PCL-1.8 源码包完全编译(WIN7/VS2013/x64)
- 解决jdk1.6已经安装,编译android源码报错问题