gscam + darknet_ros + image_view node 物体检测节点编译测试

环境配置

记录一下使用 gscam + darknet_ros + image_view node 做物体检测测试的过程。
在做这个测试前要先配置好ros2 ,gstreamer, nvidia显卡驱动的环境
我使用的环境如下:
gstreamer一般使用设备自带的即可,ros2要看ubuntu版本选择安装,我使用的是ubuntu22.04,
使用源码安装humble版本。nvidia驱动使用桌面版ubuntu的软件与更新->扩展驱动安装最新的即可,
安装完成后重启,使用nvidia-smi查看结果。
HP
ubuntu: 22.04
gstreamer: 1.20.3
ros2: humble
graphics: GA107M(RTX3050 Ti)
opencv: 3.4.16(这个是自己编译的,darknet_ros用4.x编译会失败)
cuda : 11.5
nvidia driver: 535.129.03

1. Install gscam

gscam 是ros2的一个节点,用于为ros2节点提供image更具体的请看github的介绍,地址:
https://github.com/ros-drivers/gscam

下载安装:
mkdir gscam/src && cd gscam/src (也可以放到ros_humble下编译,不用每次配置环境)
git clone git@github.com:ros-drivers/gscam.git -b ros2
cd …
colcon build --packages-select gscam

使用:
. ~/envtool/ros2_humble/install/local_setup.bash
source install/local_setup.bash
运行节点:ros2 launch gscam v4l.launch.xml

我编译的lunch文件在~/envtool/ros2_humble/install/gscam/share/gscam/examples/v4l.launch.xml
,可以自行配置参数。
编译这个应该不会有什么错误。最多是一些库需要用apt安装一下。下面安装image_view node 来测试一下它。

2.install image_pipeline && vision_opencv

vision_opencv编译darknet_ros需要用到
安装 image_pipeline vision_opencv:
cd ~/envtool/ros2_humble/src/ros-perception
git clone git@github.com:ros-perception/image_pipeline.git -b humble
git clone git@github.com:ros-perception/vision_opencv.git -b humble

编译:
cd …/…/ (回到ros2_humble)
colcon build --symlink-install

可能会有错误:
错误:找不到 boost_pythonConfig.cmake,执行下面命令在编译
apt-cache search boost-python
sudo apt install libboost-python1.74-dev
sudo apt install libboost-python1.74.0
如果找不到**Config.cmake可以使用上面的方法安装,但这只能适用于ubuntu 与ros版本对应的情况,如果ubuntu22
源码装ros2 foxy或 u20装 humble就要动手上谷歌搜 boost_python使用源码安装了。(也有可能apt安装的库可以向下兼容,不过如果库与ros有关 eg: ros_***的,一定要用源码安装,apt无法安装,这是我在ubuntu18/04上安装 foxy的经验。对应关系:20.04 -> foxy ,22.04 -> humble)

2.2 gscam + image_pipeline测试

执行如下命令:
打开一个terminal
source ~/envtool/ros2_humble/install/local_setup.bash
source /opt/ros/humble/local_setup.bash
ros2 launch gscam v4l.launch.xml

在开一个:
source ~/envtool/ros2_humble/install/local_setup.bash
source /opt/ros/humble/local_setup.bash
ros2 launch gscam v4l.launch.xml
ros2 run image_view image_view --ros-args --remap image:=/v4l/camera/image_raw

3.安装darknet_ros

darknet_ros虽然年代久远,但是用来学习还是不错的。
节点地址: https://github.com/leggedrobotics/darknet_ros

3.1 获取code:

mkdir darknet_ros/src && cd darknet_ros/src
git clone --recursive git@github.com:leggedrobotics/darknet_ros.git -b foxy

cd 到darknet下 git branch 查看分支有没有在 508381b,没有的话手动切,仓库没有clone下来的话就手动clone一下,
然后: git checkout 508381b ,如下图:
在这里插入图片描述

3.2 编译code

命令:
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
有很多错误,毕竟我使用的是foxy版本,放到humble下且darknet_ros年代久远,接下来解决编译中的bug

3.3 编译问题

3.3.1 nvcc fatal : Unsupported gpu architecture ‘compute_30’ nvcc fatal : Unsupported gpu architecture ‘compute_30’

compute_30已经被cuda11放弃使用了,将Cmakeist.txt 中这一行对应内容注释掉即可。

3.3.2 opencv多版本共存

具体错误忘记是什么了,总之是没有安装opencv导致的。安装:
pip install opencv-python
pip install --upgrade pip

安装后的版本是4.5.4用这个版本编译,在我的另外一台设备(没有nvidia独立显卡和cuda是可以编译通过的)。
但是现在这一台不行,尝试了多种方法后只能选择使用 opencv3.x来编译darknet_ros了。我推测darknet_ros
是在opencv3.x、环境下开发的。 保留原有的opencv4.5.4,使用源码编译的方式 安装opencv3.4.16
( 3.x都可 )),使两个版本共存

opencv: github地址:https://github.com/opencv/opencv/releases

下载下面两个压缩文件
OPENCV
https://github.com/opencv/opencv/releases/tag/3.4.16
OPENCV_CONTRIB
https://github.com/opencv/opencv_contrib/releases/tag/3.4.16

mkdir opencv3.4.16 && cd opencv3.4.16 && mkdir build
在这里插入图片描述
cd opencv3.4.16/build ,在build目录下执行
执行编译命令:

CPU 版本:(过了)
cmake -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.16 \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.16/modules \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_ENABLE_NONFREE=True ..
GPU 版本 (没编译通过)
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.16 \
-D CUDA_ARCH_BIN='8.6' \
-D WITH_CUDA=ON -D WITH_QT=ON -D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.16/modules \
-D INSTALL_C_EXAMPLES=ON \
-D BUILD_EXAMPLES=ON ..
GPU编译二 (没过)
编译命令:
cmake -D CMAKE_BUILD_TYPE=RELEASE \
 -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.16 \
 -D INSTALL_PYTHON_EXAMPLES=ON \
 -D INSTALL_C_EXAMPLES=ON \
 -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.16/modules \
 -D PYTHON3_EXECUTABLE=/usr/bin/python3 \
 -D PYTHON_EXECUTABLE=/usr/bin/python \
 -D WITH_TBB=ON \
 -D WITH_V4L=ON \
 -D WITH_QT=ON \
 -D WITH_GTK=ON \
 -D WITH_VTK=ON \
 -D WITH_OPENGL=ON \
 -D WITH_OPENMP=ON\
 -D BUILD_EXAMPLES=ON \
 -D WITH_CUDA=ON \
 -D BUILD_TIFF=ON \
 -D ENABLE_PRECOMPILED_HEADERS=OFF\
 -D INSTALL_PYTHON_EXAMPLES=ON \
 -D OPENCV_GENERATE_PKGCONFIG=ON \
 -DOPENCV_ENABLE_NONFREE=ON \
 -D CUDA_nppicom_LIBRARY=stdc++ \
 -D CUDA_ARCH_BIN="8.6" ..

参考: https://blog.csdn.net/weixin_49099730/article/details/128478549
在这里插入图片描述
成功执行上面命令后继续执行:

sudo make -j8 //编译
sudo make install //安装
sudo ldconfig -v //查看

在编译的过程中可能会有一些问题,一般都是一些依赖没有安装
sudo apt-get install -y libprotobuf-dev
配置opencv3.4.16到共享库列表 ,此时在编译darknet_ros应该就可编译过了,但是执行时会出现连接库找不到的问题

3.3.3 libopencv_highgui.so找不到

运行 ros2 launch darknet_ros darknet_ros.launch.py 出错
libopencv_highgui.so找不到,
配置如下:注意文件位置
找到这个库
在这里插入图片描述
添加一个文件 : sudo vim /etc/ld.so.conf.d/opencv.conf
在这里插入图片描述刷新: sudo ldconfig

还要配置环境变量
vim ~/.bashrc
加入 export PKG_CONFIG_PATH=/usr/local/opencv3.4.16/lib/pkgconfig
source ~/.bashrc

查看opencv版本:
pkg-config --modversion opencv (就是我们安装的3.4.16了)
pkg-config --modversion opencv4

如果想在加其他版本的opencv像上面步骤添加即可 *.pc文件自己改一下名字。
这样在编译和执行就应该没问题了

3.3.4 找不到darknet_ros_core_lib库

查看darknet_ros/src/darknet_ros/darknet_ros下的CMakeList.txt,CUDA_FOUND为真,不会编译darknet_ros_core_lib库,
把这一行注释掉:
#${PROJECT_NAME}_core_lib

注意 darknet_ros会使用到vision_opencv中 cv_bridge node

这个节点作用是沟通 ros2 与 opencv, 这个编译使用opencv4.x没问题,但是编译darknet_ros时还是会报一些警告,所以将这个
也用opencv3.4.16编译一下,修改它的CMakeList.txt
find_package(OpenCV QUIET) 看了下好像不用修改,添加了opencv3.x后默认应该就是先找到3.x版本的,
find_package(OpenCV 4.5.4 QUIET) 才是找4.5.4版本了。

ok,在编译一下ros_humble,然后编译darknet_ros,应该就没什么问题了。

4 测试

每打开一个terminal都要执行:
source ~/envtool/ros2_humble/install/local_setup.bash
source /opt/ros/humble/local_setup.bash

然后执行下面的命令:(每个ros2 node的 local_setup.bash也要执行一下,都在install目录下)

启动gscam 发布视频:
ros2 launch gscam v4l.launch.xml
在这里插入图片描述
topic如下,v4l/camera/image_raw就是发布主题,darknet_ros通过这个主题接收数据
在这里插入图片描述 执行启启动darknet_ros
在这之前还要配置一下,ros.yaml (主要是接受topic),还有使用yovo3检测
在这里插入图片描述在这里插入图片描述

再编译一下,
在这里插入图片描述运行:
成功后执行下面命令,启动节点开始检测
ros2 launch darknet_ros darknet_ros.launch.py
darknet_ros可以配置是否需要预览,也可以使用image_view进行预览
在这里插入图片描述GPU状态
在这里插入图片描述 在darknet_ros/src/darknet_ros/darknet_ros/config目录下还可以配置是否需要预览,检测的目标有那些等等。

完成

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值