使用RGBD相机实现YOLOv3目标识别并测距,获取物体三维坐标

设备环境:Ubuntu18.04 + ros melodic

相机:乐视相机(乐视遗产,和奥比中光的Astra Pro同方案,便宜)

1. 首先要安装一部分依赖

sudo apt install ros-$ROS_DISTRO-rgbd-launch ros-$ROS_DISTRO-libuvc ros-$ROS_DISTRO-libuvc-camera ros-$ROS_DISTRO-libuvc-ros

2. 我建议建立一个空的工作空间,供调试(当然,也可以放入自己原有的ros工作空间)

mkdir -p ~/astra_ws/src

3. github下载astra的包并安装(也可以ros命令安装,这里采用github下载再编译)

cd ~/astra_ws/src

git clone https://github.com/orbbec/ros_astra_camera

roscd astro_camera

sudo sh ./scripts/create_udev_rules

随后进行编译

cd ..

catkin_make --pkg astra_camera

4. 插上相机的USB线,再

lsusb

得到输出

Bus 001 Device 019: ID 2bc5:0502 # RGB模块

Bus 001 Device 018: ID 2bc5:0403 # 深度模块

根据本机信息修改launch文件

找到ros_astra_camera/launch文件夹下的astropro.launch进行修改

使用RGBD相机实现YOLOv3目标识别并测距,获取物体三维坐标_第1张图片

将默认的0x0501改为刚才lsusb得到的0x0502
使用RGBD相机实现YOLOv3目标识别并测距,获取物体三维坐标_第2张图片
修改launch无需重新编译,但需要source一下


5. 查看相机原始数据

source devel/setup.bash

roslaunch astra_camera astrapro.launch

终端会弹出大量调试信息,主要注意有无红色,黄色的警告也可以自己看一下要不要修改

然后另开一个新的终端

rosrun rviz rviz

通过 add by topic添加image数据即可,需要深度图还是RGB均可自行选择

6. 查看点云数据

(忘记截图了,也不是刚需,埋个坑待更新)

7. 下载darknet-ros并编译

cd ~/astra_ws/src

git clone https://github.com/leggedrobotics/darknet_ros

cd ..

catkin_make -DCMAKE_BUILD_TYPE=Release

这部分需要等待较长时间,系统会自动检查并下载yolo的权重文件,看着很像假死,建议耐心等待

8. 修改darket_ros中订阅的图像话题

首先查看当前的图像数据发布话题

rostopic list

然后记住,再在darket_ros/config/ros.yaml中进行修改



使用RGBD相机实现YOLOv3目标识别并测距,获取物体三维坐标_第3张图片

9. 运行astrodarknet

source devel/setup.bash

roslaunch astra_camera astrapro.launch

另开一个终端

source devel/setup.bash

roslaunch darknet_ros darknet_ros.launch

正常的话会弹出一个对话框,名称为YOLO,大概效果如图

使用RGBD相机实现YOLOv3目标识别并测距,获取物体三维坐标_第4张图片


需要修改权重为自己的数据集的话,可以修改如下文件

使用RGBD相机实现YOLOv3目标识别并测距,获取物体三维坐标_第5张图片

10. 修改YoloObjectDetector.cppimage.c,增加对应的测距和三维坐标计算

使用RGBD相机实现YOLOv3目标识别并测距,获取物体三维坐标_第6张图片

(这部分当时改代码改的太乱了,就不贴代码了,大概思路是,首先将RGB图和深度图进行配准,然后在修改YoloObjectDetector中,在回调函数用bridge搞一个深度图的副本,然后在YOLOv3检测完,对满足阈值条件的目标进行测距)

测距部分我使用了5个点取均值,不然容易出现nan的情况,也不好适应不规则物体(具体取哪5个点应该需要返校后更详细的测试)

使用RGBD相机实现YOLOv3目标识别并测距,获取物体三维坐标_第7张图片使用RGBD相机实现YOLOv3目标识别并测距,获取物体三维坐标_第8张图片

放一个大概的效果动图(测距暂时显示在终端了,加在图上应该会更直观一点)

测试当时是在笔记本的GTX1050测的,帧率低的可怜,返校之后放到xavier nx试了一下,无tensorRT加速的情况下又20帧左右,但由于项目移交学弟处理了,所以后续没有再更新这篇文章了

参考过的博客链接:

https://blog.csdn.net/Arcann/article/details/109495134

https://blog.csdn.net/qq_42145185/article/details/105730256

https://blog.csdn.net/qq_40700822/article/details/118523941

你可能感兴趣的:(深度学习实际部署,c++,rgb,深度学习,opencv,目标检测)