python-pcl安装和使用

安装

因为工作中要进行点云数据的显示,因此要安装python-pcl,网上搜了很多教程,但是安装中还是遇到很多问题,这里把自己遇到的和可能遇到的问题总结一下。

环境:Ubuntu:14.04 python:2.7.6 pcl:1.7.0

网上的安装方法如下:

首先安装PCL模块,我们要使用python-pcl依赖于PCL模块:

sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
sudo apt-get update
sudo apt-get install libpcl-all

然后是安装其他的依赖模块:

sudo apt-get install python-pip
sudo apt-get install python-dev
sudo pip install Cython==0.25.2
sudo pip install numpy
sudo apt-get install git
git clone https://github.com/strawlab/python-pcl.git
cd python-pcl/
python setup.py build_ext -i
python setup.py install

最后两条命令在执行时提示权限问题需要加sudo,耗时较长,可能会遇到以下问题:

  1. 执行python setup.py build_ext -i时报错

    cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++ [enabled by default]
    
    virtual memory exhausted: 无法分配内存
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    

    网上的解决方法是创建一个文件这样的,我试了以下,问题没有解决。

  2. 执行python setup.py install时报错

    cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++ [enabled by default]
    
    #warning "Using deprecated NumPy API, disable it by " \
      ^
    pcl/
    
    x86_64-linux-gnu-gcc: internal compiler error: 已杀死 (program cc1plus)
    Please submit a full bug report,
    with preprocessed source if appropriate.
    See <file:///usr/share/doc/gcc-4.8/README.Bugs> for instructions.
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 4
    

    我是参考这里。修改setup.py文件,添加以下内容:

    import os
    from distutils.sysconfig import get_config_vars
     
    (opt,) = get_config_vars('OPT')
    os.environ['OPT'] = " ".join(
        flag for flag in opt.split() if flag != '-Wstrict-prototypes'
    )
    

    可是依然报错!!

  3. 执行cmake时提醒版本过低:

    按照这个进行升级,升级之后查看版本cmake --version又报错:

    CMake Error: Could not find CMAKE_ROOT !!!
    CMake has most likely not been installed correctly.
    Modules directory not found in
    /usr/local/bin
    段错误 (核心已转储)
    

    查找原因说要卸载重装,于是卸掉cmake又重装。再次查看cmake版本,提示bash: /usr/bin/cmake: 没有那个文件或目录。因为直接使用cmake系统会到默认的/usr/bin中去寻找,但是安装的cmake是在/usr/local/bin中,所以当然不会找到,解决方法是做一个链接即可:ln -s /usr/local/bin/cmake /usr/bin

  4. 执行make时报错:c++: internal compiler error: killed (program cc1plus),原因是系统没有交换分区, 编译过程中内存耗尽, 导致了编译中断,解决方式是增加一个交换分区:按照这个执行,命令前需要加sudo确保权限。然后再执行make命令。

上面就是按照网上的一些说明进行的,遇到问题就去查解决方法,但是最后也没装好python-pcl,于是转为按照官方的方法安装。

再次尝试

python-pclGitHub地址,下面对于不同操作系统、不同python版本需要安装的依赖和方法都有说明。我用的Ubuntu 14.04,根据这个说明我应该先安装:

Python 2.7.6, 3.4.0, 3.5.2
pcl 1.7.0
Cython <= 0.25.2

并且下面有安装pcl模块的命令:

sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl -y
sudo apt-get update -y
sudo apt-get install libpcl-all -y

然后是pip模块的安装:

pip install --upgrade pip
pip install cython==0.25.2
pip install numpy

最后是python-pcl模块的安装:

git clone https://github.com/strawlab/python-pcl.git  # 获取python-pcl,然后解压缩
cd python-pcl
# 执行下面的两条命令之前可以先阅读一下下面的问题
python setup.py build_ext -i
python setup.py install

最后的耗时较长,执行完就算是安装好了,首先进行一下测试,在python程序中import pcl,如果没有问题,就表示安装成功了。

后续问题:

安装完成后,运行例子,import pcl正常,但是pcl.pcl_visualization模块无法导入,按照这个尝试进行解决。

  1. 第556行根据vtk版本取消对应两行的注释,不清楚版本可以根据路径到对应目录下查看。取消第560和561行的注释:

    ext_args['include_dirs'].append('/usr/include/vtk-5.8')
    ext_args['library_dirs'].append('/usr/lib')
    
  2. 第615行if判断语句,根据PCL版本取消注释对应版本下的:

    Extension("pcl.pcl_visualization", ["pcl/pcl_visualization.pyx"], language="c++", **ext_args)
    

    然后运行python程序,依然报ImportError: No module named pcl_visualization的错误,重新执行最后两条命令后模块导入正常。

使用

主要是通过python-pcl读取PCD点云文件并显示,通过pcl.load(filename.pcd)可以读取PCD文件的点云数据,然后通过pcl.pcl_visualization将点云显示出来,具体代码可以查看一下网上的示例。

因为使用的数据是从雷达采集的数据生成的,有一些点的数值是异常的,在坐标系下的偏差很大,这样导致点云图上只形成了“两个点”。比如有10000个点,但是有1个点的值是有偏差的,这样在显示时,那9999个正常的点都聚集在了一起,于是可视化界面看到的就是“两个点”,因此在向PCD文件写入数据时要注意异常点的处理。

说道这里再介绍一下PCD文件,PCD文件是有固定格式的,包含头信息和数据信息,网上介绍的很详细,这里不再解释,只是要说一下里面的WIDTHHEIGHTPOINTS三个参数。

对于有序点云,WIDTH表示点云数据集的宽度,HEIGHT表示数据集的高度,即点云的行列数,二者的乘积就是点云中点的数量,也就是POINTS的值。

对于无序点云,WIDTH代表了点云中点的个数,和POINTS参数的值相同,HEIGHT设置为1。

在使用python-pcl读取点云PCD文件时,要保证WIDTHHEIGHT的值的乘积等于POINTS的值,并且和PCD文件中点的数量相等,否则会读取失败。在写PCD文件时,一般会先将点云的数目赋给WIDTHPOINTS,完成PCD文件头信息的内容。再写入数据信息时,异常点被处理掉不会写入,那么就会造成PCD文件点的数量和头信息的值不符,导致读取失败,要加以注意。

  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值