ros+gazebo学习(持续更新)

由于实习需要,开始学习ROS的东西


这篇博客主要是记录在ROS+gazebo学习中遇到的各种坑(掩面),希望能对一些也在该领域的同志提供一点小小帮助~~


安装问题(gazebo+ros):

由于ros和gazebo本身是通过ros_gazebo_pkg包连接的,一般来说,安装时候直接安装ros--full版本即可,博主本人的平台是ubuntu18,官方发布的合适版本melodic,下面是安装步骤,其实和官网一模一样。这里主要说明一下,博主由于之前是在虚拟机上面搭建的,系统是ubuntu14,合适的ros版本是indigo,结果遇到一大堆依赖项的问题,也百度谷歌找了很多解决方法,但是最后还是没安装成功,貌似是因为indigo版本官方已经停止更新,而依赖项由于ubuntu14仍然在更新,导致indigo很多依赖项不符合版本。所以推荐小伙伴们安装kinetic版本或者melodic这种比较新的版本。
安装步骤:

  • 第一步,打开ubuntu软件更新,将restricted,universe和multiverse勾选上,同时,最好是选择ubuntu software里面选择适合自己的下载点,不然安装会有点慢。详细看图:
    ros+gazebo学习(持续更新)_第1张图片
  • 然后是打开终端,输入如下代码:
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
  • 更新一下debian包:
sudo apt update

这里提醒一下:最好是在这步后面,加入如下代码

sudo apt upgrade

加这步主要是防止出现依赖项的问题,当然,可以先不加,如果出现了依赖项问题,再重新加入看看。

  • 安装自己想要的版本或者某一个包(如果你安装别的版本ros,请把下面代码的melodic替换成对应的版本,比如kinetic)
    安装全部包:
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


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文件夹里面。

  • 修改cv_bridge的CmakeLists.txt,将里面的
find_package(OpenCV 3 REQUIRED)
根据自己安装的opencv版本修改,比如博主是安装了opencv3.4.3,故而:
find_package(OpenCV 3.4.3  REQUIRED)
  • 回到catkin_workplace目录。用catkin_make编译,或者cmake都行。
    catkin_make编译:
catkin_make --pkg cv_bridge

cmake编译:

cd /src/cv_bridge
mkdir build
cd build
cmake ..
make
sudo make install

到了这一步,你用如下命令查询安装的cv_bridge包是否是自己刚刚编译的包。

roscd cv_bridge

如果是,恭喜你,后面基本上没什么大问题了。

  • 如果你是用c++编译,那么在对应的cmakelists.txt添加如下的语句
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的依赖包也行。

你可能感兴趣的:(ros,gazebo,ros,opencv)