ros程序编译中出现的问题

roscore引用Python的yaml时出现格式问题

Ubuntu16.04本身就有Python2.7和Python3.5的版本,我安装caffe时安装了anaconda。所以环境中就有多个版本。 ros在运行内核时,本身调用的Python2.7的程序。但是由于环境变量PYTHONPATH的设置问题,调用yaml是从Python3.6的包中寻找的,这样就出现了格式错误。修改的方法是/etc/bash.bashrc或者~/.bashrc中添加

export PYTHONPATH="/usr/local/lib/python2.7/dist-packages:/usr/local/anaconda3/lib/python3.6/site-packages:/usr/local/caffe-master/python:$PYTHONPATH"

关键是把Python2.7的路径添加在3.6的前面。根本不需要重新安装ros。不过还是把卸载ros的命令写下来

sudo apt-get purge ros-*
sudo rm -rf /etc/ros
gedit ~/.bashrc

删除安装时添加的语句
source /opt/ros/kinetic/setup.bash

can’t find about “serial”

错误说明是

Could not find a package configuration file provided by "serial" with any of the following names:

    serialConfig.cmake
    serial-config.cmake

这是由于ROS中本身不包含串口的程序,需要单独下载
sudo apt-get install ros-kinetic-serial

使用openCV出错

错误说明

/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFReadDirectory@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFWriteEncodedStrip@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFIsTiled@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFScanlineSize@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFRGBAImageOK@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFClose@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFSetWarningHandler@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFWriteScanline@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFGetField@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFNumberOfStrips@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFReadEncodedTile@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFReadRGBATile@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFClientOpen@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFOpen@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFReadEncodedStrip@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFSetField@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFSetErrorHandler@LIBTIFF_4.0’未定义的引用
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1:对‘TIFFReadRGBAStrip@LIBTIFF_4.0’未定义的引用

这个问题在之前安装的caffe的过程中也出现过,当时是由于编译openCV时的编译选项设置错误,可以查看我的博客linux使用杂记。所以这次我很确定这不是openCV的问题。之后在ROS-Kinect cv_bridge的opencv版本兼容问题 找到了问题。ros当中也会有openCV的部分库,并且当包含cv_bridge用来转换摄像机的数据时,自己会调用ros当中的库。所以就出现了之前的问题。修改的关键是修改一些cmake文件,设置openCV的调用位置。除了博客中要求修改的文件之外,我发现还需要修改文件cv_bridge-extras.cmake

set(OpenCV_CONFIG_PATH /usr/local/opencv-3.3.1/build)
set(OpenCV_INSTALL_PATH /usr/local/opencv-3.3.1)
#set(OpenCV_CONFIG_PATH /opt/ros/kinetic/share/OpenCV-3.3.1-dev)
#set(OpenCV_INSTALL_PATH /opt/ros/kinetic)

但是仍然会出现相似的问题,之后我又在share下含有image字符文件夹下的cmake文件中找到了对kinetic自带libopencv的引用,所以也全部修改了,但是仍然不能解决我的问题。

你可能感兴趣的:(ros)