OAK相机在Ubuntu16.04系统ros kinetic 下实现数据的发布订阅
Posted OAK中国_官方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OAK相机在Ubuntu16.04系统ros kinetic 下实现数据的发布订阅相关的知识,希望对你有一定的参考价值。
编辑:OAK中国
首发:oakchina.cn
喜欢的话,请多多👍⭐️✍
▌前言
Hello,大家好,这里是OAK中国,我是助手君。
现在大家将OAK相机用在ROS上越来越多了,为了方便大家的使用,我们的技术小哥非常给力地开发出在ROS里实现订阅来自OAK设备的数据。
OAK相机在Ubuntu16.04系统ros kinetic 下实现数据的发布订阅
- 已验证官方库depthai-core在Ubuntu16.04 kinetic环境下也可使用,Ubuntu18和Ubuntu20的支持正在进行中。
- 可以获取深度、点云、YOLO、RGB、双目、IMU等数据。
- 所有的数据都是从OAK设备端获取,送到ROS里。
- 本教程适用于所有OAK相机。
一、Ubuntu16.04系统安装
默认系统已经安装完成,不会安装的可以自行搜索网络教程。
二、安装ROS环境
ROS版本与系统版本对应,Ubuntu16.04系统对应Kinetic版本。
1.添加镜像到Ubuntu系统列表中,即添加sources.list。建议使用国内镜像源,这样能够保证下载速度。
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
镜像添加好后进行设置,可以使用刚添加的镜像源也可以使用国内的其他镜像源。具体操作如下:
- a.打开"系统设置"
- b.软件与更新
- c.选择要使用的镜像源
- d."其他站点"。可以选择刚添加的镜像mirrors.ustc.edu.cn,也可以选择国内其他镜像,例如阿里云aliyun。
- e.选择服务器
2.添加keys,公钥是系统的一种安全机制,也是很重要的一部分。
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
3.系统更新,即更新所有package。
sudo apt-get update
4.安装ROS Kinetic。安装方式有四种:桌面完整版安装、桌面版安装、基础版安装、单独软件包安装。此处我们使用第一种安装方式,执行指令如下:
sudo apt-get install ros-kinetic-desktop-full
注意:安装时间视网络速度而定,时间较长。
5.使用ROS之前必须要做的一步,初始化rosdep。rosdep可以方便在你需要编译某些源码的时候为其安装一些系统依赖,同时也是某些ROS核心功能组件所必需用到的工具。
sudo rosdep init && rosdep update
6.配置ros环境。ROS的环境配置,使得你每次打开一个新的终端,环境变量都能够自动配置好,也就是添加到bash会话中。
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
7.安装rosinstall。rosinstall是ROS中一个独立分开的常用命令行工具,它可以方便让你通过一条命令就可以给某个ROS软件包下载很多源码树。
sudo apt-get install python-rosinstall
8.ROS安装好后,对其进行测试。
#终端一:启动ROS
roscore
#终端二:启动一个ROS自带的节点例子。成功后你会看到一只海龟出现在屏幕上。
rosrun turtlesim turtlesim_node
#终端三:启动一个海龟控制程序使其移动。按键盘的上下左右键进行移动。
rosrun turtlesim turtle_teleop_key
可以控制小海龟运动,说明ros环境安装成功。
三、安装OAK相机的ros驱动包
安装过程中出现任何问题可以到文档最后一部分查找解决,如果出现的问题不在此部分,并无法自行解决时可以与我们联系。
1. 创建一个catkin_ws工作空间
cd $HOME
mkdir -p catkin_ws/src
cd catkin_ws/src
2.安装git工具,方便从GitHub中克隆工程代码
sudo apt-get install git
3. 安装oak ros驱动包所需的依赖库
3.1 安装usb驱动
sudo apt install libusb-1.0-0-dev
3.2 安装pcl点云库,版本:1.8.0
a. 安装各种依赖
sudo apt-get update
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui
sudo apt-get install libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common
sudo apt-get install libflann1.8 libflann-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install libqhull* libgtest-dev
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mono-complete
sudo apt-get install libopenni-dev
sudo apt-get install libopenni2-dev
b. 安装VTK库。因为pcl库中用到了vtk库进行可视化。版本:7.1.1
- ➀安装依赖项X11,OpenGL
#X11
sudo apt-get install libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev
#OpenGL
sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev
- ➁下载vtk工程源码包到Home路径下,解压工具将压缩包解压出来
- ➂编译和安装vtk
cd VTK-7.1.1
mkdir build
cd build
cmake ..
make
sudo make install
- ➃下载vtk工程源码包到Home路径下,解压工具将压缩包解压出来
- ➄编译和安装pcl
cd pcl-pcl-1.8.0
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=None ..
make
sudo make install
3.3 安装OpenCV算法库,版本:3.3.1。不建议安装2版本,因为后续工程需要用到opencv中的imgcodecs模块包,从3版本才开始有。另外,从3.3.1版本开始加入了深度学习相关的模块包更利于我们后期的使用。卸载原来已安装的opencv方法可参考此网站。
a.安装依赖项
#安装依赖包
sudo apt-get install libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
#安装可选包
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
b.下载OpenCV工程源码包到Home路径下,解压工具将压缩包解压出来
c.编译和安装OpenCV
cd opencv-3.3.1
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make #编译过程比较长
sudo make install #安装
d.OpenCV环境配置
#需要将opencv的库添加至路径
sudo gedit /etc/ld.so.conf.d/opencv.conf
#接着在打开的文本中添加(可能打开的是空文本,直接在最后添加上下面这句话即可)
/usr/local/lib
#执行下面的代码让程序生效
sudo ldconfig
#配置 bash
sudo gedit /etc/bash.bashrc
#在打开的文档末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
#保存 执行下面的代码使程序生效
source /etc/bash.bashrc
3.4 安装cv_bridge。不使用ROS自带的OpenCV库,使用自己安装的OpenCV库,cv_bridge充当ROS和OpenCV之间的桥梁。
a.下载源代码。由于我的Ubuntu版本为16.04,对应的ROS版本为kinetic,下面我给出该版本的下载链接:kinetic-cv_bridge阿里云下载链接 提取码: p06k。如果Ubuntu为其他版本,请从以下链接的分支中选取适合自己版本的cv_bridge。Github链接
b.解压工具将压缩包解压出来,然后打开下载好的软件包中的CMakeLists.txt文件,将自己已安装好的OpenCV版本和位置链接进去。修改代码如下:
#这几行是原来就有的
find_package(OpenCV 3 REQUIRED
COMPONENTS
opencv_core
opencv_imgproc
opencv_imgcodecs
CONFIG
)
#在其上方添加一行 这里是自己安装的opencv的路径
set(OpenCV_DIR /usr/local/share/OpenCV)
#并修改第一行,这里是自己安装的opencv版本
find_package(OpenCV 3.3.1 REQUIRED
COMPONENTS
opencv_core
opencv_imgproc
opencv_imgcodecs
CONFIG
)
注意:如果你的OpenCV是2版本的,因为2版本中没有opencv_imgcodecs包。因此后期编译出现错误,建议opencv换为3版本。
c.编译和安装cv_bridge
cd kinetic-cv_bridge
mkdir build
cd build
cmake ..
make
sudo make install
4.下载和安装oak ros软件包
4.1 下载oakd-ros-simple工程包
cd $HOME/catkin_ws/src
git clone https://github.com/mapping520/oakd-ros-simple.git
cd oakd-ros-simple
sudo apt-get install tar
tar zxvf depthai-core.tar.gz
4.2 删除hunter文件。因为hunter仅是C/C++项目的CMake依赖项管理器,去除它可以避免外部库的错误提示信息。
#打开新终端
rm -r ~/.hunter
4.3 先安装相机官方依赖库depthai-core。(两种方式:源码安装或编译包安装)
方式一:源码安装。
1)源码配置依赖
$ cd catkin_ws/src/oakd-ros-simple/depthai-core
$ mkdir build && cd build
$ cmake .. -DBUILD_SHARED_LIBS=ON
出现以下信息表示编译成功。
2)编译depthai-core包。
make
出现以下界面说明编译成功。
3)最后执行以下指令进行安装。
sudo make install
方式二:编译包deb安装
#新终端
git clone https://github.com/mapping520/depthai_2.16.0_amd64.git
cd ~/depthai_2.16.0_amd64
sudo dpkg -i depthai_2.16.0_amd64.deb
4.4 包含oakd-ros-simple工程包的工作空间进行编译,以实现对oakd相机的ros配置。
a. 配置
cd ~/catkin_ws
#使用上述方式一源码安装的depthai-core,需执行下面一条指令.否则不需要执行.
catkin config -Ddepthai_DIR=<your_workspace_path>/src/oakd-ros-simple/depthai-core/build/install/lib/cmake/depthai
#工作空间编译
catkin_make
b. 删掉工作空间catkin_ws下除src外的所有文件,在oakd-ros-simple工程中的oakd-ros-simple/CMakeLists.txt文件中添加一行代码,确保找到自己安装的OpenCV3.3.1。重新返回步骤d编译整个catkin_ws工作空间。
出现以下提示信息说明编译成功。
4.5 PC的usb3.0接口连接oak-d相机。执行以下指令连接相机:
cd ~/catkin_ws
source devel/setup.bash
echo 'SUBSYSTEM=="usb", ATTRSidVendor=="03e7", MODE="0666"' | sudo tee /etc/udev/rules.d/80-movidius.rules
roslaunch oakd_ros main.launch
#新终端下可以查看发布的数据节点
rostopic list
另打开一个新终端,启动rviz,通过add订阅相应节点,查看相机获取的数据。
roscd oakd_ros
rviz -d rviz.rviz
4.6 配置工作空间路径,使得每打开一个新的终端会自动刷新环境变量。执行以下指令:
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
注意,如果你的工作空间的名称不是catkin_ws,你需要把上面的catkin_ws换成自己的名称。
4.7 更改/catkin_ws/src/oakd-ros-simple/launch/main.launch下相应节点的开关状态,以发布所需的数据。例如,我们需要相机的双目图像数据,就需要把文件中第17行的/get_stereo_ir变量由false改为true:
另外,想获取彩色数据,可以控制打开第15行的/get_rgb等参数状态。
四、常见问题
问题1:搭建ros环境过程中进行rosdep操作时出现“website may be down”错误。
解决方法:
#先执行此指令
sudo pip install rosdepc
#如果上一条执行后显示没有pip可以试试pip3。即换成此指令,上一条执行成功的话就不用了.
sudo pip3 install rosdepc
#如果换成第二条pip3还不行,则执行此指令.
sudo apt-get install python3-pip
sudo pip3 install rosdepc
#最后重新初始化
sudo rosdepc init
rosdepc update
问题2:depthai-core源码编译出现无法下载资源包的问题。
解决方法:depthai-core包的安装采用第二种方式。
问题3:depthai-core源码编译过程中出现hunter问题。
解决方法:新终端下执行以下指令删除hunter文件。然后把建立的build文件删掉,重新编译depthai-core包。
#终端
rm -r ~/.hunter
问题4:depthai-core源码编译出现CMake版本过低问题。
解决方法:安装高版本的CMake编译工具。Cmake安装完毕后,再次把刚刚建立的build文件删掉,重新编译depthai-core包。
1.下载CMake3.10及以上版本的软件包,这里以3.14.0版本为例。切记不要执行这条指令sudo apt-get autoremove cmake,这样会把之前用 cmake 编译好的包都给卸载掉,包括ros。比较简单的方法是下载 cmake 压缩包,直接覆盖掉系统的 cmake。
2.解压工具进行工程包解压,
#新终端
cd cmake-3.14.0
mkdir build && cd build
cmake ..
make
sudo make install
3.运行后查看CMake版本。
cmake --version
若出现以下结果,说明CMake安装成功。
问题5:depthai-core源码编译出现no match for call to '(const std::hash<dai::DatatypeEnum>) ...'
解决方法:安装升级gcc、g++。gcc安装完毕后,再次把刚刚建立的build文件删掉,重新编译depthai-core包。
#1. 安装gcc和g++的7版本,其他版本也可安装,最好选用7版本及以上。
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-7
sudo apt-get install g++-7
# 2. 配置:将gcc7,g++7作为默认选项
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100
sudo update-alternatives --config gcc
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 100
sudo update-alternatives --config g++
问题6:编译catkin_ws工作空间出现catkin未找到指令
解决方法:安装catkin编译工具
sudo apt-get update
sudo apt-get install python3-catkin-tools
问题7:编译catkin_ws工作空间出现depthai::opencv目标没有生成问题
原因:先前在安装depthai-core时,自己的opencv库版本与代码要寻找的版本不一致,也就可选的没有生成depthai::opencv。因此需要把代码中要寻找的opencv版本改为任意版本都可以,让它找到opencv库来生成对应的depthai::opencv。以供oakd-ros-simple编译时链接到。注意,确保自己的opencv在3版本及以上。
解决方法:修改depthai-core/cmake/depthaiDependencies.cmake文件中的代码,然后重新编译安装depthai-core。
问题8:depthai-core包源码编译出现CV_16FC1和CV_16FC3类型错误
解决方法:修改depthai-core/src/opencv/ImgFrame.cpp文件中的部分代码,CV_16FC1改为CV_16SC1,CV_16FC3改为CV_16SC3。保存并重新编译安装depthai-core。
问题9:编译catkin_ws工作空间出现TypeError:signal handler must be signal.STG_TGN ...
解决方法:删掉工作空间catkin_ws下除src外的所有文件,更换指令重新编译。
cd ~/catkin_ws
catkin_make -Ddepthai_DIR=<your_workspace_path>/src/oakd-ros-simple/depthai-core/build/install/lib/cmake/depthai
问题10:相机出现发烫现象
解决方法:默认下我们的yolo相关节点结果也发布了,这就使得相机在全速工作,因此出现相机发热现象。当我们不需要YOLO的结果、点云结果和图像压缩结果时,可以把代码中第43行的/get_YOLO,第19行的/get_pointcloud,第11行的/get_compressed变量由true改为false。
▌参考资料
https://docs.oakchina.cn/en/latest/
https://www.oakchina.cn/selection-guide/
OAK中国
| OpenCV AI Kit在中国区的官方代理商和技术服务商
| 追踪AI技术和产品新动态
戳「+关注」获取最新资讯↗↗
以上是关于OAK相机在Ubuntu16.04系统ros kinetic 下实现数据的发布订阅的主要内容,如果未能解决你的问题,请参考以下文章