三维目标检测之ROS可视化

这篇具有很好参考价值的文章主要介绍了三维目标检测之ROS可视化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验室有一个镭神C16的激光雷达,最近在我这,想拿来玩一玩。本意是做一个实时的检测,通过ROS获取激光雷达的激光点云,用pointpillars模型来进行实时的三维目标检测任务。但是镭神c16这一个激光雷达,不太好处理,目前只能用自带的驱动,进行一个实时的显示。所以下边的思路就是,先存储镭神c16的点云数据,再用ros进行三维目标检测。

1. 思路:

  通过ros来实现点云消息的订阅和检测框bbox消息的发布,来实现一个检测效果的可视化功能。

2. 实验环境:

  • Ubuntu16.04
  • cuda 10.1
  • ros-kinetic
    检测环境主要依托OpenPCDet,环境搭建可参考我的这篇博客

3. 步骤:

1. 前提条件

已经搭建过了OpenPCDet。
已经搭建了ROS环境,我用的是kinetic版本,用其他版本应该也可以。

2. 编译环境

创建一个工作空间并进入

mkdir -p ~/pointpillars_ros/src
cd pointpillars_ros/src

将ROS包复制或者克隆到当前文件夹下

git clone https://github.com/BIT-DYN/pointpillars_ros
cd ..

编译

# 进入到搭建好的openpcdet环境
conda activate openpcdet
pip install --user rospkg catkin_pkg
pip install pyquaternion
# 因为我用的是kinetic,所以需要安装下边的库,如果是其他版本的ros,下边修改kinetic安装对应版本即可
sudo apt-get install ros-kinetic-pcl-ros
sudo apt-get install ros-kinetic-jsk-recognition-msg
sudo apt-get install ros-kinetic-jsk-rviz-plugins
## 注意,执行catkin_make时,在最外层的文件夹下,也就是我例子中的~/pointpillars_ros
catkin_make

迁移OpenPCDet中的一些文件

为保险起见,我将下边这些文件全部放入到src/pointpillars/tools文件夹下了。
利用ros仿真三维目标检测算法,3D目标检测,目标检测,python,深度学习
可以先修改一下demo.py文件的配置文件和预训练模型的位置,测试是否能成功调用pcdet,如果可以的话,说明环境迁移过来后没问题,再尝试修改ros.py的代码。

3. 修改代码

ros.py代码

1. 简单修改
# 下边的路径改成自己的
sys.path.append("/home/ubuntu/pointpillars_ros/src/pointpillars_ros") # Line 22
# 54行后边
""" Initialize ros parameters """
config_path = rospy.get_param("/config_path", "/home/ubuntu/pointpillars_ros/src/pointpillars_ros/tools/cfgs/kitti_models/pointpillar.yaml")
ckpt_path = rospy.get_param("/ckpt_path", "/home/ubuntu/pointpillars_ros/src/pointpillars_ros/tools/models/pointpillar.pth")
# 订阅的激光点云名字,改成自己的,我用的是kitti的.bag文件
self.sub_velo = rospy.Subscriber("/kitti/velo/pointcloud", PointCloud2, self.lidar_callback, queue_size=1,  buff_size=2**12)
2. 修改旋转参数

修改旋转参数,大概在ros.py的86行前后。我问了开源作者,他们安装的雷达有偏角,所以这里置0就行。

# 旋转轴
#rand_axis = [0,1,0]
#旋转角度
#yaw = 0.1047
#yaw = 0.0
#返回旋转矩阵
#rot_matrix = self.rotate_mat(rand_axis, yaw)
#np_p_rot = np.dot(rot_matrix, np_p[:,:3].T).T

# convert to xyzi point cloud
x = np_p[:, 0].reshape(-1)
y = np_p[:, 1].reshape(-1)
z = np_p[:, 2].reshape(-1)
if np_p.shape[1] == 4: # if intensity field exists
    i = np_p[:, 3].reshape(-1)
else:
    i = np.zeros((np_p.shape[0], 1)).reshape(-1)
points = np.stack((x, y, z, i)).T
3.添加类似与NMS的功能,去除不靠谱的检测结果

另外ros.py代码中是没有去除掉scores低的检测框,我打印看了一下,如下图所示,置信度为0.107的也没有去除掉:
利用ros仿真三维目标检测算法,3D目标检测,目标检测,python,深度学习修改ros.py代码的大概110行前后(去除掉不合适的检测框,我设置的阈值为0.5),如下所示:

  # 组装数组字典
  input_dict = {
      'points': points,
      'frame_id': msg.header.frame_id,
  }
  data_dict = self.demo_dataset.prepare_data(data_dict=input_dict) # 数据预处理
  data_dict = self.demo_dataset.collate_batch([data_dict])
  load_data_to_gpu(data_dict) # 将数据放到GPU上
  pred_dicts, _ = self.model.forward(data_dict) # 模型前向传播
  scores = pred_dicts[0]['pred_scores'].detach().cpu().numpy()
  mask = scores > 0.5
  scores = scores[mask]
  boxes_lidar = pred_dicts[0]['pred_boxes'][mask].detach().cpu().numpy()
  label = pred_dicts[0]['pred_labels'][mask].detach().cpu().numpy()
  num_detections = boxes_lidar.shape[0]
  #rospy.loginfo("The num is: %d ", num_detections)

  # print(boxes_lidar)
  # print(scores)
  # print(label)
4. 新增发布跟检测结果匹配的每一帧点云

分析:
  以上的代码,订阅了激光点云信息(并在rviz界面展示),发布检测框(并在rviz显示),检测是需要时间的,所以检测框与当前显示帧的点云并不匹配。
思路
  得到检测框结果之后,重新发布当前帧点云信息,名字修改一下。然后在rviz可视化界面选择重新发布的点云就可以了。
在ros.py中添加新发布的点云,在rviz文件中新增新的点云话题。
修改后的代码可查看:

国内gitee地址:https://gitee.com/ximing689/pointpillars_ros

launch/pointpillars.launch代码

<launch>
# 主要修改下边第一行
  <node pkg="rosbag" type="play" name="player" output="log" args="-l /media/ubuntu/ximing/dataset/ros_kitti/bag/2011_10_03/kitti_2011_10_03_drive_0027_synced.bag" />
  <node name="pointpillars_ros" type="ros.py" pkg="pointpillars_ros" output="screen"/>
  <node type="rviz" name="rviz" pkg="rviz" args="-d $(find pointpillars_ros)/launch/pointpillars.rviz" />
</launch>

launch/pointpillars.rviz代码

主要修改你所用的话题的名字,我改了点云和图像的名字
利用ros仿真三维目标检测算法,3D目标检测,目标检测,python,深度学习

4. 运行

执行下边的命令

conda activate openpcdet
source ~/pointpillars_ros/devel/setup.bash
roslaunch pointpillars_ros pointpillars.launch

4. 图片效果:

我使用kitti原数据的某一段时间,转成.bag格式,用pointpillars的模型进行测试的,效果也不行,猜测原因可能是1.旋转矩阵参数没有修改;2.激光点云显示的跟检测框有延时,不能很好匹配;3.第三点可能就是模型不行(可能性不大)。
利用ros仿真三维目标检测算法,3D目标检测,目标检测,python,深度学习

1.未设定阈值的检测效果:

利用ros仿真三维目标检测算法,3D目标检测,目标检测,python,深度学习

2.设定阈值之后的效果

设定阈值之后,明显减少了很多检测框,不过依然存在检测延时(检测框不准)。
利用ros仿真三维目标检测算法,3D目标检测,目标检测,python,深度学习

3. 最终效果

初次部署这个代码的时候,检测框跟实际点云完全不匹配,目标框是杂乱的。经过分析,将点云和检测框进行匹配对齐之后,显示的检测效果还是不错的(目前还没做图像的对齐,所以图像和点云显示不一致)。
哔哩哔哩
利用ros仿真三维目标检测算法,3D目标检测,目标检测,python,深度学习

下图是用雷神c16雷达在实验室采集的30秒的数据,不到1分钟,696MB。
利用ros仿真三维目标检测算法,3D目标检测,目标检测,python,深度学习
目前用rosbag record存储了一些雷神C16激光雷达的数据,还不太会使用雷达实时读取,实时检测。后期再想办法吧。

5. 主要参考资料:

  非常感谢这些网友分享的开源资料,让一个小白的我,也能快速demo出一个效果。

  • ROS点云的Pointpillars实时目标检测
  • Github资料

遇到的问题,解决办法:

  • error while loading shared libraries: libopencv_core3.so.3.3
  • ROS运行python报错:/usr/bin/env: ‘python\r’: No such file or directory

视频效果:https://www.bilibili.com/video/BV1ce4y1D76o/
代码地址:https://gitee.com/ximing689/pointpillars_ros文章来源地址https://www.toymoban.com/news/detail-803463.html

到了这里,关于三维目标检测之ROS可视化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Ubuntu】Docker中配置ROS并可视化Rviz及Gazebo

    由于 ros 常与本地环境冲突,为了不影响大量的本地项目,因此选择在 docker 中搭建 ros 环境,从而与本地环境隔离,但会引入 docker 中无法可视化的问题,而 ros 项目常需要与 rviz 及 gazebo 配合开发,以下提供可视化的解决方案 拉取镜像文件 ros安装是个费时费力费脑且看脸的

    2024年02月06日
    浏览(38)
  • ROS从入门到精通8-2:构造动态多行人可视化仿真环境

    本专栏旨在通过对ROS的系统学习,掌握ROS底层基本分布式原理,并具有机器人建模和应用ROS进行实际项目的开发和调试的工程能力。 🚀详情:《ROS从入门到精通》 最初,移动机器人的应用仅限于制造业。但如今,随着人工智能技术的发展,它在娱乐、医疗、采矿、救援、教

    2024年02月01日
    浏览(24)
  • docker使用与服务器上的可视化(ROS rviz等)

    安装docker:官网教程,按照官网命令一步步来即可。 添加当前用户到 docker 用户组: 【docker】添加用户到docker组,这样后面运行docker的时候前面不需要加 sudo 命令,否则运行 docker 的时候一直需要在前面加 sudo ,即 sudo docker xxx 首先区分镜像(images)和容器(containers):他们

    2024年02月15日
    浏览(29)
  • Ubuntu20.04+Docker+ROS Noetic 可视化容器管理工具Portainer

    官网教学安装网址:Install Docker Engine on Ubuntu | Docker Documentation ros镜像网址 https://hub.docker.com/r/osrf/ros https://hub.docker.com/r/osrf/ros/tags 3.1 宿主机开启xhost,使得docker里面可视化界面(vscode rviz)  注意:每次重启容器,主机都得执行一遍,否则容器内可视化报错。 3.2 创建宿主机数

    2024年02月12日
    浏览(50)
  • 【ROS2机器人入门到实战】RVIZ2可视化移动机器人模型

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 大家好,我是小鱼,上一节讲完joint和link,我们来把我们上面定义

    2024年02月03日
    浏览(31)
  • 毫米波雷达 TI IWR1443 在 ROS 中使用 Rviz 可视化雷达点云

    官方文档:TI mmWave ROS Driver Users Guide 官方文档有更详细的步骤说明,本篇博客仅为本人的实验记录。 实验环境:IWR1443 + linux 18.04 + ROS melodic 使用 Uniflash 成功烧录对应 SDK 版本中的 Demo 能够在 mmwave demo visulalizer 中成功运行开箱演示的 demo,看到数据。 参考链接:毫米波雷达

    2024年02月13日
    浏览(34)
  • 【OpenCV实现图像:可视化目标检测框】

    目标检测框的可视化在计算机视觉和机器学习领域中是一项重要的任务,有助于直观地理解和评估目标检测算法的性能。通过使用Python和相关的图像处理库,可以轻松实现目标检测框的可视化。主要步骤包括读取图像数据、提取目标检测框的坐标信息,然后利用可视化工具在

    2024年02月04日
    浏览(46)
  • 目标检测yolo格式与labelme标注互相转换及其可视化

              yolo目标检测数据采用矩形框进行标注,其标注格式为[cls_id xp yp wp hp],cls_id表示目标所属的类别序号。xp、yp表示目标中心点相对坐标,其中xp等于目标的绝对横坐标除以图像宽度,yp等于目标的绝对纵坐标除以图像高度。wp和hp表示目标的相对宽度和高度,其中

    2024年02月05日
    浏览(30)
  • 关于目标检测任务中,YOLO(txt格式)标注文件的可视化

    本文是针对yolo标注格式txt文件的可视化脚本介绍  如果是VOC格式的xml文件,参考:关于目标检测任务中,XML(voc格式)标注文件的可视化 代码比较简单, 50行这样 。。。。 下面是代码的目录结构,1.jpeg 是数据图像,1.txt是对应的相对坐标信息和索引类别 result.png 是保存的绘制

    2024年02月03日
    浏览(49)
  • YoloV8 +可视化界面+GUI+交互式界面目标检测与跟踪

    本项目旨在基于 YoloV8 目标检测算法开发一个直观的可视化界面,使用户能够轻松上传图像或视频,并对其进行目标检测。 通过图形用户界面,用户可以方便地调整检测参数、查看检测结果,并将结果保存或导出。同时,该界面还将提供实时目标检测功能,让用户能够在视频

    2024年02月20日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包