Ubuntu14.04安装和配置ROS Indigo

安装ROS

配置Ubuntu的软件源

配置Ubuntu要求允许接受restricted、universe和multiverse的软件源,可以根据下面的链接配置:
https://help.ubuntu.com/community/Repositories/Ubuntu

配置成如下图所示即可,一般情况下,这些配置都是默认的。

添加软件源到sources.list

设置软件源的代码如下:

$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list'

一旦添加了正确的软件源,操作系统就知道去哪里下载程序,并根据命令自动安装软件。

设置密钥

$ wget http://packages.ros.org/ros.key -O - | sudo apt-key add -

安装

首先确认你的Debian的软件包索引是最新的。Debian计划是一个致力于创建一个自由操作系统的合作组织。我们所创建的这个操作系统名为 Debian。Debian系统目前采用Linux内核或者FreeBSD内核。

$ sudo apt-get update

在ROS中有许多不同的函数库和工具,建议是完全安装,也可以根据自己的要求分别安装。完全安装时的工具包括ROS、rqt、可视化环境rviz、通用机器人库robot-generic libraries、2D(如stage)和3D(如Gazebo)仿真环境2D/3D simulators、导航功能包集navigation and 2D/3D(移动、定位、地图绘制、机械臂控制)、感知库perception(如视觉、激光雷达、RGB-D摄像头等)。

$ sudo apt-get install ros-indigo-desktop-full

初始化rosdep

rosdep不仅能够使你更方便的安装一些系统依赖程序包,而且ROS的一些主要部件的运行也需要rosdep。

$ sudo rosdep init
$ rosdep update

安装rosinstall

rosinstall命令是一个使用的非常频繁的命令,使用这个命令可以轻松的下载许多ROS软件包。

$ sudo apt-get install python-rosinstall

设置环境

添加ROS的环境变量,这样,当你打开你新的shell时,你的bash会话中会自动添加环境变量。

$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
# 使环境变量设置立即生效
$ source ~/.bashrc

配置你的ROS环境

注意:当你用像apt这样的软件包安装管理器安装ROS,那么这些软件包用户是没有权利的去编辑的,当创建一个ROS package和处理一个ROS package时,你应该始终选择一个你有权限工作的目录作为工作目录。

管理你的环境

在安装ROS的时候,你会看到提示:source(命令)几个setup.*sh文件,或者甚至添加sourcing到你的shell启动脚本中。这是必须的,因为ROS依赖于结合使用shell环境的概念上。这使得开发依赖不同版本的ROS或者不同系列的package更加容易。

如果你在寻找或者使用你的ROS package上有问题,请确定的你的ROS环境变量设置好了,检查是否有ROS_ROOT和ROS_PACKAGE_PATH这些环境变量。

$ export | grep ROS

如果没有,你需要source一些setup.*sh文件。

环境设置文件是为你产生的,但是可以来自不同的地方:

  • 使用package管理器安装的ROS package提供setup.*sh文件;
  • rosbuild workspace使用像rosws这样的工具提供setup.*sh文件;
  • setup.*sh文件在编译和安装catkin package时作为副产品创建。

注意:rosbuild和catkin是两种组织和编译ROS代码的方式,前者简单易用,后者更加复杂但是提供更多灵活性尤其是对那些需要去集成外部代码或者想发布自己软件的人。

如果你在Ubuntu 14.04上使用apt工具安装ROS,那么你会在'/opt/ros/indigo/'目录中有setup.*sh文件,你可以这样source它们:

$ source /opt/ros/indigo/setup.bash

你每次打开新的shell都需要运行这个命令,如果你把source /opt/ros/indigo/setup.bash添加进.bashrc文件就不必要每次打开一个新的shell都运行这条命令才能使用ROS的命令了。

创建ROS工作环境

对于ROS Groovy和之后的版本可以参考以下方式建立catkin工作环境。在shell中运行:

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace

可以看到在src文件夹中可以看到一个CMakeLists.txt的链接文件,即使这个工作空间是空的(在src中没有package),任然可以建立一个工作空间。

$ cd ~/catkin_ws/
$ catkin_make

catkin_make命令可以非常方便的建立一个catkin工作空间,在你的当前目录中可以看到有build和devel两个文件夹,在devel文件夹中可以看到许多个setup.*sh文件。启用这些文件都会覆盖你现在的环境变量,想了解更多,可以查看文档catkin。在继续下一步之前先启动你的新的setup.*sh 文件。

$ source devel/setup.bash

为了确认你的环境变量是否被setup脚本覆盖了,可以运行一下命令确认你的当前目录是否在环境变量中:

$ echo $ROS_PACKAGE_PATH

输出:

/home/youruser/catkin_ws/src:/opt/ros/indigo/share:
/opt/ros/indigo/stacks

至此,你的环境已经建立好了,可以继续学习ROS文件系统了!

参考链接


Ubuntu14.04安装和配置ROS Indigo

ubuntu 16.04/ubuntu 17.10下解决wireshark权限问题

ubuntu 16.04/ubuntu 17.10下使用wireshark可能会遇到如下权限问题:

Couldn’t run /usr/bin/dumpcap in child process: Permission denied

也有可能列表中找不到我们抓包的网卡。

可以使用如下方法解决:

1.添加wireshark用户组

$ sudo groupadd wireshark

2.将dumpcap更改为wireshark用户组

$ sudo chgrp wireshark /usr/bin/dumpcap

3.让wireshark用户组有root权限使用dumpcap

$ sudo chmod 4755 /usr/bin/dumpcap

4.将需要使用的用户名(一般都是当前登陆用户)加入wireshark用户组

$ sudo gpasswd -a `whoami` wireshark

参考链接


ubuntu下解决wireshark权限问题

macOS Sierra升级到macOS High Sierra后执行cc,git命令报错

macOS Sierra升级到macOS High Sierra后执行cc,git等命令报错,错误信息如下:

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

解决方法如下:

$ xcode-select --install

参考链接


mac更新系统后Git不能用,提示missing xcrun at

Windows 7系统上安装CentOS 7后通过修改grub2添加Windows 7启动引导项

按照以往的经验,先安装Windows 7之后,再装CentOS 7,那么CentOS 7应该会自动添加Windows 7启动项。但是安装完成后,发现启动项里没有Windows 7

我们需要手动添加Windows 7的启动项。

我们需要修改grub2的模版文件,然后执行grub2-mkconfig自动重建grub2引导列表。

$ sudo cp /etc/grub.d/40_custom /etc/grub.d/41_win7_custom

$ sudo vi /etc/grub.d/41_win7_custom

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'Windows 7'{
set root=(hd0,1)
chainloader +1
}

$ grub2-mkconfig -o /boot/grub2/grub.cfg
$ reboot

至于set root=(hd0,1),还是set root=(hd0,msdos1),或者set root=(hd0,msdosX),请在启动列表中按下e键,进入grub rescue模式,执行ls命令列出分区,如果第一个启动不了,请逐个分区都试试。

参考链接


Centos7 + Windows7 双系统,通过修改grub2,重新添加 Win7 启动引导项

macOS High Sierra (10.13)制作Windows 7安装U盘

  1. Open a Terminal (under Utilities)
  2. Convert the ISO to UDRW format hdiutil convert -format UDRW -o destination_file.img source_file.iso
  3. Run diskutil list and determine the device node assigned to your flash media (e.g., /dev/disk2)
  4. Run diskutil unmountDisk /dev/diskN (replace N with the disk number from the last command; in the previous example, N would be 2)
  5. Execute sudo dd if=/path/to/destination_file.img.dmg of=/dev/diskN bs=1m (replace /path/to/destination_file.img.dmg with the path where the image file is located; for example, ./win7.img.dmg)
    • Using /dev/rdisk instead of /dev/disk will faster, 20x
    • If you see the error dd: Invalid number '1m', you are using GNU dd. Use the same command but replace bs=1m with bs=1M
    • If you see the error dd: /dev/diskN: Resource busy, make sure the disk is not in use. Start the 'Disk Utility.app' and unmount (don't eject) the drive
  6. Run diskutil eject /dev/diskN, and remove your flash media when the command completes (this can take a few hours on slower drives)

继续阅读macOS High Sierra (10.13)制作Windows 7安装U盘

ThinkPad-T440通过U盘启动的方式升级BIOS

最近在ThinkPad-T440上安装最新的Ubuntu 17.04的时候,系统提示如下信息:

Oct 21 00:29:34 ThinkPad-T440 kernel: [ 0.000000] [Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version: 0x20 (or later)

通过提示,可以看到是系统的CPU微码部分没有更新到最新,导致系统在执行部分功能的时候发生了异常,升级BIOS可以解决这个问题。

在联想官网上下载最新的BIOS光盘镜像(假定镜像名为BIOSCD.iso之后,发现无法直接通过U盘启动系统。原因是光盘的镜像格式不符合U盘启动需要的格式,需要进行转换之后才可以正常启动系统。

可以通过如下的方式,转换下载到的镜像文件之后,刷新BIOS

$ sudo apt-get install genisoimage

$ geteltorito -o bios.img BIOSCD.iso

#找出U盘挂载的位置,假定是/dev/sdb
$ df 

$ sudo dd if=bios.img of=/dev/sdb

之后,重启系统即可。

继续阅读ThinkPad-T440通过U盘启动的方式升级BIOS

WD MyCloud编译PHP-7.1安装包

1.按照How to successfully build packages for WD My Cloud from source中的介绍,搭建完成WDMyCloud的编译环境

2.使用如下方式编译:

$ su 

$ cd ~/wdmc-build/64k-jessie
$ chroot build

$ mount -t proc none /proc
$ mount -t devtmpfs none /dev
$ mount -t devpts none /dev/pts

$ export DEBIAN_FRONTEND=noninteractive
$ export DEBCONF_NONINTERACTIVE_SEEN=true
$ export LC_ALL=C
$ export LANGUAGE=C
$ export LANG=C
$ export DEB_CFLAGS_APPEND='-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE'
$ export DEB_BUILD_OPTIONS=nocheck

$ cd root

$ apt-get update
$ apt-get upgrade

$ apt-get install ca-certificates
$ apt-get install dh-autoreconf
$ apt-get install git
$ apt-get install apache2-dev
$ apt-get install apache2
$ apt-get install systemtap-sdt-dev
$ apt-get install libxml2
$ apt-get install libxml2-dev
$ apt-get install libssl-dev
$ apt-get install libpcre3 libpcre3-dev
$ apt-get install libsqlite3-dev
$ apt-get install libbz2-dev

$ apt-get install libcurl4-openssl-dev

$ apt-get install libqdbm-dev

$ apt-get install libdb-dev

#configure: error: Cannot find enchant
$ apt-get install enchant libenchant-dev

#configure: error: webp/decode.h not found
$ apt-get install libwebp-dev

#configure: error: png.h not found.
$ apt-get install libpng-dev

#configure: error: xpm.h not found.
$ apt-get install libxpm-dev

#configure: error: freetype-config not found.
$ apt-get install libfreetype6-dev

#configure: error: Unable to find gd.h anywhere under /usr
$ apt-get install libgd-dev

#configure: error: Unable to locate gmp.h
$ apt-get install libgmp-dev

#configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information.
$ apt-get install libc-client-dev

#configure: error: Kerberos libraries not found.
$ apt-get install libkrb5-dev

#configure: error: libfbclient, libgds or libib_util not found! Check config.log for more information.
$ apt-get install firebird-dev

#configure: error: Unable to detect ICU prefix or no failed. Please verify ICU install prefix and make sure icu-config works.
$ apt-get install libicu-dev

#configure: error: sasl.h not found!
$ apt-get install libsasl2-dev

#configure: error: mcrypt.h not found. Please reinstall libmcrypt.
$ apt-get install libmcrypt-dev

#checking for unixODBC support... configure: error: ODBC header file '/usr/include/sqlext.h' not found!
$ apt-get install unixODBC-dev

#configure: error: Directory /usr is not a FreeTDS installation directory
$ apt-get install FreeTDS-dev

#configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path
$ apt-get install libpq-dev

#configure: error: Cannot find pspell
$ apt-get install libpspell-dev

#configure: error: Please reinstall libedit - I cannot find readline.h
$ apt-get install libedit-dev

#configure: error: Can not find recode.h anywhere under /usr /usr/local /usr /opt.
$ apt-get install librecode-dev

#configure: error: Could not find net-snmp-config binary. Please check your net-snmp installation.
$ apt-get install libsnmp-dev

#configure: error: Cannot find libtidy
$ apt-get install libtidy-dev

#checking for XMLRPC-EPI in default path... not found
$ apt-get install libxmlrpc-epi-dev

#configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
$ apt-get install libxslt-dev

#configure: error: Please reinstall the libzip distribution
$ apt-get install libzip-dev

$ git clone -b master-7.1 https://gitlab.com/deb.sury.org/php.git php7 --depth=1 

$ cd php7

#禁用systemd
$ sed -i "s/CONFIGURE_SYSTEMD *:= *--with-fpm-systemd/CONFIGURE_SYSTEMD := --without-fpm-systemd/g" debian/rules

$ sed -i "s/DH_SYSTEMD *:= *--with systemd/DH_SYSTEMD :=/g" debian/rules

$ dpkg-buildpackage -d -b -uc

#编译依赖包php-common
$ cd ..

$ git clone -b debian/50 git://anonscm.debian.org/pkg-php/php-defaults.git

$ cd php-defaults

#禁用systemd
$ sed -i "s/DH_SYSTEMD *:= *--with *systemd/DH_SYSTEMD :=/g" debian/rules

$ dpkg-buildpackage -d -b -uc

$ exit

3.编译php-apcu,这个模块WD MyCloud需要

$ su 

$ cd ~/wdmc-build/64k-jessie
$ chroot build

$ mount -t proc none /proc
$ mount -t devtmpfs none /dev
$ mount -t devpts none /dev/pts

$ export DEBIAN_FRONTEND=noninteractive
$ export DEBCONF_NONINTERACTIVE_SEEN=true
$ export LC_ALL=C
$ export LANGUAGE=C
$ export LANG=C
$ export DEB_CFLAGS_APPEND='-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE'
$ export DEB_BUILD_OPTIONS=nocheck

$ cd root

#安装依赖
$ apt-get install shtool
$ apt-get install liblist-moreutils-perl
$ apt-get install xml2

# "dch" command 
$ apt-get install devscripts

#安装我们刚刚编译好的PHP7包
$ dpkg -i php-common_50_all.deb
$ dpkg -i php7.1-common_7.1.10-1_armhf.deb
$ dpkg -i php7.1-readline_7.1.10-1_armhf.deb
$ dpkg -i php7.1-opcache_7.1.10-1_armhf.deb
$ dpkg -i php7.1-json_7.1.10-1_armhf.deb
$ dpkg -i php7.1-cli_7.1.10-1_armhf.deb 
$ dpkg -i php7.1-dev_7.1.10-1_armhf.deb

#编译依赖
$ git clone git://anonscm.debian.org/pkg-php/dh-php.git

$ cd dh-php

$ git checkout debian/0.26 -b debian/0.26

$ dpkg-buildpackage -d -b -uc

$ cd ..

$ dpkg -i dh-php_0.26_all.deb

#参考 https://packages.debian.org/source/sid/php-apcu
# git://anonscm.debian.org/pkg-php/php-apcu.git
#https://pecl.php.net/package/APCu
$ git clone git://anonscm.debian.org/pkg-php/php-apcu.git

$ cd php-apcu

$ git checkout debian/5.1.8+4.0.11-1 -b debian/5.1.8+4.0.11-1

#Build the package
$ debuild -b -d -uc -us

$ cd ..

$ dpkg -i php-apcu_5.1.8+4.0.11-1_armhf.deb

$ git clone git://anonscm.debian.org/pkg-php/php-apcu-bc.git

$ cd php-apcu-bc

$ debuild -b -d -uc -us

$ exit

上面下载的代码由于是国外的服务器,因此可能会出现一直无法下载成功的情况,可以从这里下载代码的拷贝。PHP源代码点击这里PHP7 Debian编译配置文件点击这里dh-php源代码点击这里php-apcu源代码点击这里,  php-apcu-bc源代码点击这里

WDMyCloud中安装的时候执行如下命令:

$ sudo apt-get update

$ sudo apt-get install -y --force-yes php7.1

$ sudo apt-get install -y --force-yes libapache2-mod-php7.1

$ sudo apt-get install -y --force-yes php7.1-curl

$ sudo apt-get install -y --force-yes php-apcu

$ sudo apt-get install -y --force-yes php-apcu-bc

$ sudo apt-get install -y --force-yes php7.1-xml

#这个是个坑,如果没有增加这个模块,也是可以正常启动的,但是却没办法正常登录进入,应用会出现异常
$ sudo apt-get install -y --force-yes php7.1-mbstring

#由于PHP7中的parse_ini_file不再兼容“#”作为注释字符,只能使用“;”进行注释,但是这个注释无法
#被其他应用读取,而WDMyCloud里面的其他脚本也需要读取/etc/system.conf里面的内容
#目前唯一的解决方法就是删除全部的注释行
# /var/www/htdocs/UI/index.php	 	 	 	 
$ sudo cp /etc/system.conf /etc/system.conf.bak	 	 
$ sudo sed -i '/^#/d' /etc/system.conf

#语法调整
$ sudo cp /var/www/htdocs/UI/views/common/dates.php /var/www/htdocs/UI/views/common/dates.php.bak

$ sudo sed -i 's/^<?.*$/<?php/g' /var/www/htdocs/UI/views/common/dates.php

#/var/www/htdocs/UI/views/layouts/main/main.php	 
$ sudo cp /etc/php5/apache2/conf.d/include_path.ini /etc/php/7.1/apache2/conf.d/

$ sudo chmod 777 /etc/php/7.1/apache2/conf.d/include_path.ini

$ sudo a2dismod php5	 	 

$ sudo a2enmod php7.1

$ sudo phpenmod curl	 	 

$ sudo service apache2 restart

注意,这部分的功能目前仅仅是可用,还没有达到完全正常的情况,如果出现问题,可以切换回PHP5,目前已知的完美切换回到原来的PHP5的办法就是卸载上面安装的所有PHP7的相关应用才能切换成功,否则总有部分小功能不是太正常.

参考链接


神经网络瘦身:SqueezeNet

2016年2月份,UC Berkeley和Stanford一帮人在arXiv贴了一篇文章:

这篇文章做成了许多人梦寐以求的事——压缩神经网络参数。但和以往不同,原作不是在前人网络基础上修修补补(例如Deep Compression),而是自己设计了一个全新的网络,它用了比AlexNet少50倍的参数,达到了AlexNet相同的精度!

关于SqueezeNet的创新点、网络结构,国内已经有若干爱好者发布了相关的简介,如这篇这篇,国外的文献没有查,相信肯定也有很多。

本文关注的重点在SqueezeNet为什么能实现网络瘦身?难道网络参数的冗余性就那么强吗?或者说很多参数都是浪费的、无意义的?

继续阅读神经网络瘦身:SqueezeNet

OpenMediaVault-3.0.89在系统更新升级后无法挂载磁盘

OpenMediaVault-3.0.89在执行应用升级

$ sudo apt-get update
$ sudo apt-get upgrade

重启无法自动挂载磁盘,查看系统日志,看到如下内容:

Oct 13 22:53:54 openmediavault systemd[1]: systemd-fsck@dev-disk-by\x2duuid-7909fba8\x2dcc50\x2d430f\x2d986f\x2d9db4ba7caa3c.service: Job systemd-fsck@dev-disk-by\x2duuid-7909fba8\x2dcc50\x2d430f\x2d986f\x2d9db4ba7caa3c.service/start failed with result 'dependency'.
Oct 13 22:53:54 openmediavault systemd[1]: dev-disk-by\x2duuid-7909fba8\x2dcc50\x2d430f\x2d986f\x2d9db4ba7caa3c.device: Job dev-disk-by\x2duuid-7909fba8\x2dcc50\x2d430f\x2d986f\x2d9db4ba7caa3c.device/start failed with result 'timeout'.
Oct 13 22:54:25 openmediavault monit[1551]: 'collectd' process is not running
Oct 13 22:54:25 openmediavault monit[1551]: 'collectd' trying to restart
Oct 13 22:54:25 openmediavault monit[1551]: 'collectd' start: '/bin/systemctl start collectd'
Oct 13 22:54:55 openmediavault monit[1551]: 'collectd' failed to start (exit status 0) -- no output

这个原因是由于collectd的升级导致了无法使用systemd来启动。而Openmediavaule加载硬盘的时候依赖collectd模块,这个模块的启动问题导致全部磁盘都无法加载。

目前的做法是升级到最新的OpenMediaVault-4.0,参考OpenMediaVault系统升级

但是升级后会遇到如下错误:

Oct 14 18:01:10 openmediavault collectd[1081]: rrdcached plugin: Failed to connect to RRDCacheD at unix:/var/run/rrdcached.sock: Unable to connect to rrdcached: No such file or directory (status=2)

以及

Oct 14 18:19:28 openmediavault monit[1053]: 'omv-engined' process is not running
Oct 14 18:19:28 openmediavault monit[1053]: 'omv-engined' trying to restart
Oct 14 18:19:28 openmediavault monit[1053]: 'omv-engined' start: '/bin/systemctl start openmediavault-engined'
Oct 14 18:19:59 openmediavault monit[1053]: 'omv-engined' failed to start (exit status 1) -- '/bin/systemctl start openmediavault-engined': Failed to start openmediavault-engined.service: Unit openmediavault-engined.service is masked.

修复方法为:

$ omv-mkconf collectd

$ omv-mkconf rrdcached

$ omv-mkconf monit

$ sudo systemctl unmask openmediavault-engined.service

$ sudo reboot

参考链接


ROS Kinetic切换OpenCV到2.X版本

注意,本文章只针对简单的应用,不涉及到复杂的严重依赖OpenCV模块的项目。如果依赖复杂,可能会导致OpenCV 2.XOpenCV 3.X的运行时库同时被加载,导致运行时候崩溃。

最近在使用ROS开发项目,代码从Indigo(Ubuntu 14.04)升级到KineticUbuntu 16.04)。

发现OpenCV升级到了opencv-3.2.0-dev版本,但是实际使用中发现代码在opencv-2.4.9版本上能正确运行,但是升级到opencv-3.2.0-dev版本之后,就不能正常工作了。

为了查找问题,需要降级一下OpenCV版本。

网上查找了一下,找到如下解决方法:

$ sudo apt-get install libcv-dev

$ sudo apt-get install libopencv-dev

$ sudo apt-get install libopencv-contrib-dev

$ sudo apt-get install libopencv-gpu-dev

$ sudo gedit /opt/ros/kinetic/share/cv_bridge/cmake/cv_bridgeConfig.cmake

然后修改如下的内容(修改之前请注意先备份

第94-96行:
    if(NOT "include;/opt/ros/kinetic/include/opencv-3.1.0-dev/opencv;/opt/ros/kinetic/include/opencv-3.1.0-dev " STREQUAL " ")
      set(cv_bridge_INCLUDE_DIRS "")
      set(_include_dirs "include;/opt/ros/kinetic/include/opencv-3.1.0-dev/opencv;/opt/ros/kinetic/include/opencv-3.1.0-dev")

#112行:
set(libraries "cv_bridge;/opt/ros/kinetic/lib/libopencv_calib3d3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_core3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_features2d3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_flann3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_highgui3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_imgcodecs3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_imgproc3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_ml3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_objdetect3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_photo3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_shape3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_stitching3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_superres3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_video3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_videoio3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_videostab3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_viz3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_aruco3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_bgsegm3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_bioinspired3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_ccalib3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_cvv3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_datasets3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_dpm3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_face3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_fuzzy3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_hdf3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_line_descriptor3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_optflow3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_phase_unwrapping3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_plot3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_reg3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_rgbd3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_saliency3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_stereo3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_structured_light3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_surface_matching3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_text3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_xfeatures2d3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_ximgproc3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_xobjdetect3.so.3.2.0;/opt/ros/kinetic/lib/libopencv_xphoto3.so.3.2.0")

指向系统自带的opencv-2.4.9版本

#94-96行:
if(NOT "include;/usr/include/opencv;/usr/include " STREQUAL " ")
  set(cv_bridge_INCLUDE_DIRS "")
  set(_include_dirs "include;/usr/include/opencv;/usr/include")

#112行:
set(libraries "cv_bridge;/usr/lib/x86_64-linux-gnu/libopencv_calib3d.so;/usr/lib/x86_64-linux-gnu/libopencv_contrib.so;/usr/lib/x86_64-linux-gnu/libopencv_core.so;/usr/lib/x86_64-linux-gnu/libopencv_features2d.so;/usr/lib/x86_64-linux-gnu/libopencv_flann.so;/usr/lib/x86_64-linux-gnu/libopencv_gpu.so;/usr/lib/x86_64-linux-gnu/libopencv_highgui.so;/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so;/usr/lib/x86_64-linux-gnu/libopencv_legacy.so;/usr/lib/x86_64-linux-gnu/libopencv_ml.so;/usr/lib/x86_64-linux-gnu/libopencv_objdetect.so;/usr/lib/x86_64-linux-gnu/libopencv_ocl.so;/usr/lib/x86_64-linux-gnu/libopencv_photo.so;/usr/lib/x86_64-linux-gnu/libopencv_stitching.so;/usr/lib/x86_64-linux-gnu/libopencv_superres.so;/usr/lib/x86_64-linux-gnu/libopencv_ts.so;/usr/lib/x86_64-linux-gnu/libopencv_video.so;/usr/lib/x86_64-linux-gnu/libopencv_videostab.so")

修改完成后,必要的情况下,请在删除~/workspace/ros/catkin/目录下的builddevel目录之后,重新编译。

参考链接