基于YOLOv5以及ROS的Kobuki小车防撞报警算法实现

一、主体函数部分:

创建一个BoundingBoxes对象,用于存储检测结果。

将BoundingBoxes对象的header和image_header设置为收到的图像消息的header。

将getImageStatus设置为True,表示已经收到了图像消息。

将图像数据转换成OpenCV格式,并将图像从BGR格式转换为RGB格式。

使用yolov5模型对图像进行物体检测,并将检测结果以Pandas DataFrame的形式返回。

获取检测结果中的边界框坐标、置信度和类别信息。

调用dectshow函数可视化检测结果,并将图像高度和宽度作为参数传递。

订阅话题以及发布话题

二、Dectshow函数部分

复制输入图像,初始化txt字符串和count计数器。使用for循环遍历检测结果中的所有边界框,并在每个边界框周围画一个矩形。创建一个BoundingBox对象,用于存储边界框的信息。将边界框的坐标、置信度、类别等信息存储在BoundingBox对象中。如果当前边界框的类别已经存在于self.classes_colors字典中,则使用该类别对应的颜色。否则,随机生成一种颜色,并将其与当前类别关联。如果当前边界框的类别为人,则计算目标与相机之间的距离,将其添加到label字符串中。(小车中的见人报警效果)绘制边界框和类别标签,并将BoundingBox对象添加到self.boundingBoxes.bounding_boxes列表中。将检测结果和图像发布到指定的话题中,并在窗口中显示结果。

三、Person_distance行人测距函数部分

用于单目相机的距离测量,根据相机的视场角和图像宽度,计算出相机的焦距。然后根据测得的行人在图像中的高度,通过三角形相似原理计算出行人与相机的距离.具体来说,首先将相机的视场角fov和图像宽度image_width作为已知量,计算出相机的焦距foc。然后通过测得行人在图像中的高度h,利用以下公式计算行人与相机的距离:

distance = (real_height * foc) / (h - 2)

其中real_height为行人的实际高度,这里默认为66.9英寸(即170厘米),需要根据实际情况进行修改。距离的单位为米。

四、Kobuki机器人调试部分

  1. 首先,安装ubuntu虚拟机、ros以及运行算法所需要的虚拟环境http://t.csdn.cn/8BOKg,在这一步要特别小心:
    1. ubuntu版本和ros版本对应关系:
      1. ubuntu16.04对应ros-kinetic
      2. ubuntu18.04对应ros-melodic;
      3. ubuntu20.04对应ros-noetic。
    2. 运行ros和虚拟环境的python版本冲突问题:
      1. 版本切换方法ubuntu切换python版本-CSDN博客
      2. 汇总解决方法https://blog.51cto.com/u_15302822/5777865
  2. 其次,建立ros工作空间(最好一步到位直接下载kobuki的所有资源包),然后catkin_make编译工作空间,这一步时常会有报错,基本上网上都可以找的到,有点耐心debug;
  3. 终于编译成功之后,就可以把自己写的代码添加到src文件夹里面了,一定要注意如果自己的代码里面有自定义的数据类型,一定要在msgs里面进行注册;
  4. 接下来可以连接kobuki小车进行测试:Turbot中级教程-安装-Turtlebot及相关软件安装 - 创客智造/爱折腾智能机器人
  5. 最后,进行小车准确性和速度的调试。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值