ros程序编译中出现的问题

本文解决了ROS环境下因Python版本冲突导致的yaml格式问题及OpenCV兼容性问题,并提供了详细的解决方案,包括环境变量配置和cmake文件修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的引用,所以也全部修改了,但是仍然不能解决我的问题。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值