这篇博客主要是记录在ROS+gazebo学习中遇到的各种坑(掩面),希望能对一些也在该领域的同志提供一点小小帮助~~
由于ros和gazebo本身是通过ros_gazebo_pkg包连接的,一般来说,安装时候直接安装ros--full版本即可,博主本人的平台是ubuntu18,官方发布的合适版本melodic,下面是安装步骤,其实和官网一模一样。这里主要说明一下,博主由于之前是在虚拟机上面搭建的,系统是ubuntu14,合适的ros版本是indigo,结果遇到一大堆依赖项的问题,也百度谷歌找了很多解决方法,但是最后还是没安装成功,貌似是因为indigo版本官方已经停止更新,而依赖项由于ubuntu14仍然在更新,导致indigo很多依赖项不符合版本。所以推荐小伙伴们安装kinetic版本或者melodic这种比较新的版本。
安装步骤:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
接着添加许可证:
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt update
这里提醒一下:最好是在这步后面,加入如下代码
sudo apt upgrade
加这步主要是防止出现依赖项的问题,当然,可以先不加,如果出现了依赖项问题,再重新加入看看。
sudo apt install ros-melodic-desktop-full
或者desktop版本,一般机器人仿真的话,desktop版本足以,但是博主建议如果内存够,还是安装全包的方便一些。
desktop版本:
sudo apt install ros-melodic-desktop
安装某个包,博主就经常因为包的冲突,经常安装和卸载某个包,所以这个命令很实用。
sudo apt install ros-melodic-PACKAGE
比如:sudo apt install ros-melodic-slam-gmapping
如果不知道该版本有什么包,用下面命令查询:
apt search ros-melodic
sudo rosdep init
rosdep update
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
cv_bridge主要是用来实现opencv和ros数据之间传输的一个包。由于博主安装了别的版本的opencv,这就导致出现很多bug,最为头疼的bug有两个:
一个是lib**.so文件的,网上只找到一个解决方法,但是解决方法太暴力,简单来说,出现这个问题的原因是系统同一个动态链接库版本太多了,而程序直接调用时候会直接去调用最新版本的,导致版本不匹配。解决方法是把这个动态链接库其他版本的都删除,太暴力,可能会导致你其他依赖于该动态链接库的软件或者程序无法运行。
还有一个是
ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)
最后解决方法:重新安装cv_bridge这个包。
首先是卸载系统自带的包
sudo apt-get remove ros-melodic-cv-bridge
这里说明一下,由于博主需要ros与gazebo连接,而运行这个命令 还会卸载掉两个包:ros-melodic-gazebo-plugins、ros-melodic-gazebo-ros-pkgs这两个包,而博主需要gazebo_plugins包里面自带的一些plugin,这里博主用的方法是
到ros的包里面,将对应的包删除掉。ros的包一般安装在/opt/ros/melodic/share里面,这里将melodic替换成你安装版本即可。
代码:
cd /opt/ros/melodic/share
sudo rm -r cv_bridge
然后下载最新的cv_bridge包
git clone https://github.com/ros-perception/vision_opencv.git
将里面的cv_bridge包copy出来,放在自己的catkin_workplace的src文件夹里面。
find_package(OpenCV 3 REQUIRED)
根据自己安装的opencv版本修改,比如博主是安装了opencv3.4.3,故而:
find_package(OpenCV 3.4.3 REQUIRED)
catkin_make --pkg cv_bridge
cmake编译:
cd /src/cv_bridge
mkdir build
cd build
cmake ..
make
sudo make install
到了这一步,你用如下命令查询安装的cv_bridge包是否是自己刚刚编译的包。
roscd cv_bridge
如果是,恭喜你,后面基本上没什么大问题了。
set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake) //在find_package前面
如果是python,想直接调用cv_bridge模块的的话。在~/.bashrc文件里面添加路径。(Note:如果你的电脑装了多个版本的python,如果想用rosrun运行python脚本,记得修改python脚本的首行#!/usr/bin/env python,修改为#! /usr/bin/env python2.7,博主版本的ros为melodic,默认安装的python2.7,请根据自己安装ros版本对应的python修改)
sudo gedit ~/.bashrc
//然后在里面添加下面一行代码。
export LD_LIBRARY_PATH=/usr/local/lib/
或者你在用catkin_create_pkg创建自己的程序包时候,加入cv_bridge的依赖包也行。