基于ROS2的costmap中Obstacle Layer中对障碍物信息的增加与删除机制的方案调研。

news/2024/7/24 5:02:40 标签: ros2, costmap, obstacle layer, obstacle clear

文章目录

    • 1.背景
    • 2.目标
    • 3. 障碍物信息添加方式
      • 发送数据的数据结构与接收数据的数据结构
    • 4. 障碍物清理机制
      • 4.1 可调参数
      • 4.2 优化光追算法
      • 4.3 障碍物跟踪

1.背景

基于costmap地图,使用navigation导航时,会出现由于激光雷达/图像测距的局限性, 会导致costmap上有行人走过,代价地图中的障碍物,无法被及时的清除,留下影子一样的轨迹。

2.目标

针对障碍物无法及时清除,主要从两方面下手,一方面是对障碍物数据的预处理,例如给障碍物语义信息,对动态障碍物通过i卡尔曼继续跟踪,或者设置相关的参数,。另一方面是对障碍物清除机制进行优化,目前障碍物是根据光追法对障碍物进行清除,有其有时和弊端。

3. 障碍物信息添加方式

发送数据的数据结构与接收数据的数据结构

目前障碍物层主要接收种类型的障碍物信息,分别是LaserScanPointCloud2两种,msg位于/opt/ros/humble/share/sensor_msgs/msg中,相关的数据结构如下所示:
LaserScan.msg

# Single scan from a planar laser range-finder
#
# If you have another ranging device with different behavior (e.g. a sonar
# array), please find or create a different message, since applications
# will make fairly laser-specific assumptions about this data

std_msgs/Header header # timestamp in the header is the acquisition time of
                             # the first ray in the scan.
                             #
                             # in frame frame_id, angles are measured around
                             # the positive Z axis (counterclockwise, if Z is up)
                             # with zero angle being forward along the x axis

float32 angle_min            # start angle of the scan [rad]
float32 angle_max            # end angle of the scan [rad]
float32 angle_increment      # angular distance between measurements [rad]

float32 time_increment       # time between measurements [seconds] - if your scanner
                             # is moving, this will be used in interpolating position
                             # of 3d points
float32 scan_time            # time between scans [seconds]

float32 range_min            # minimum range value [m]
float32 range_max            # maximum range value [m]

float32[] ranges             # range data [m]
                             # (Note: values < range_min or > range_max should be discarded)
float32[] intensities        # intensity data [device-specific units].  If your
                             # device does not provide intensities, please leave
                             # the array empty.

PointCloud2.msg

# This message holds a collection of N-dimensional points, which may
# contain additional information such as normals, intensity, etc. The
# point data is stored as a binary blob, its layout described by the
# contents of the "fields" array.
#
# The point cloud data may be organized 2d (image-like) or 1d (unordered).
# Point clouds organized as 2d images may be produced by camera depth sensors
# such as stereo or time-of-flight.

# Time of sensor data acquisition, and the coordinate frame ID (for 3d points).
std_msgs/Header header

# 2D structure of the point cloud. If the cloud is unordered, height is
# 1 and width is the length of the point cloud.
uint32 height
uint32 width

# Describes the channels and their layout in the binary data blob.
PointField[] fields

bool    is_bigendian # Is this data bigendian?
uint32  point_step   # Length of a point in bytes
uint32  row_step     # Length of a row in bytes
uint8[] data         # Actual point data, size is (row_step*height)

bool is_dense        # True if there are no invalid points

其中关于PointField.msg数据类型如下:

# This message holds the description of one point entry in the
# PointCloud2 message format.
uint8 INT8    = 1
uint8 UINT8   = 2
uint8 INT16   = 3
uint8 UINT16  = 4
uint8 INT32   = 5
uint8 UINT32  = 6
uint8 FLOAT32 = 7
uint8 FLOAT64 = 8

# Common PointField names are x, y, z, intensity, rgb, rgba
string name      # Name of field
uint32 offset    # Offset from start of point struct
uint8  datatype  # Datatype enumeration, see above
uint32 count     # How many elements in the field

订阅相关话题之后,转成的障碍物类型为Observation,其主要的成员参数为

  geometry_msgs::msg::Point origin_;
  sensor_msgs::msg::PointCloud2 * cloud_;
  double obstacle_max_range_, obstacle_min_range_, raytrace_max_range_, raytrace_min_range_;

在这里插入图片描述
其中最主要的是cloud_和origin_两个变量,origin_类型为Point类型,该位置为/opt/ros/humble/share/geometry_msgs/msg,其数据结构为x,y,z
如下所示

# This contains the position of a point in free space
float64 x
float64 y
float64 z
  • 总的来说,Observation类型最重要的信息为点云和位置
  • 使用LaserScan数据类型更符合相机有视场角的信息。
  • 使用PointCloud2可以加入障碍物的rgb信息。可以用intensity将障碍物的语义信息传到障碍物层进行处理。

4. 障碍物清理机制

前提: 基于costmap对障碍物的清除,主要是在接收端对障碍物进行处理,系统原本的是基于光追法对障碍物清理。
问题:

  • 但当障碍物面向机器人运动时,根据光追法原理,上一帧的障碍物在地图上由于当前帧同一障碍物的遮挡保留在地图中,会对当前的规划造成困扰。
  • 当障碍物面向机器人左右移动时,会因为当前帧点云没有抵达上一帧障碍物所在点的后方,上一帧障碍物也依然会保留在地图中

针对以上的问题,处理思路主要如下:

  • 通过yaml文件对障碍物进行参数滤波
  • 优化障碍物的光追算法
  • 对障碍物进行跟踪(后期优化),通过卡尔曼滤波对障碍物进行跟踪,增加语义信息增加障碍物跟踪的稳定性。

4.1 可调参数

4.2 优化光追算法

4.3 障碍物跟踪


http://www.niftyadmin.cn/n/351627.html

相关文章

苦卷一个月,P9大佬给我的Alibaba面试手册,终于成功踹开字节大门

怎么说呢&#xff0c;今年真的是寒气逼人啊&#xff01;在这个大环境下&#xff0c;裁员已经不算是特别的事情&#xff0c;粗暴裁员也许是未来一种趋势…在职的卷的起飞&#xff0c;离职的找不到好工作。 做点能做的&#xff1a;跑跑步骑骑车多锻炼&#xff1b;当当上面正版书…

第十五届“中国电机工程学会杯”数学建模竞赛

第十五届电工杯5月26号就要开始啦&#xff0c;今天给大家回顾第十四届全国大学生电工数学建模竞赛A题&#xff0c;主要从赛题重述和问题分析与代码实战展开。第十五届全国大学生电工数学建模竞赛已经开始报名了哦&#xff0c;后续我也会分享对应的建模思路哦&#xff0c;大家记…

互联网医院系统的优势与挑战:现状调研分析

随着互联网技术的不断发展和普及&#xff0c;互联网医院系统也逐渐走进人们的视野。这种以互联网技术为支撑的医疗服务模式&#xff0c;可以为患者提供更加便捷、快速和高效的医疗服务&#xff0c;同时也可以缓解医院资源短缺的问题。 一、互联网医院系统的优势 方便快捷 互联…

Axure教程-竖向堆叠图(中继器)

本文将教大家如何用AXURE中的中继器动态竖向堆叠图 一、效果介绍 如图&#xff1a; 预览地址&#xff1a;https://wo8zqr.axshare.com 下载地址&#xff1a;https://download.csdn.net/download/weixin_43516258/87810606 二、功能介绍 简单填写中继器内容即可生成动态竖向堆…

数据结构初阶——堆

目录 一&#xff0c;堆的概念 二&#xff0c;创建堆 2.1堆的结构 2.2堆的初始化 2.3堆的数据插入 2.4堆的数据的删除 注意点&#xff1a; 2.5 堆顶元素 2.6堆的长度 2.7堆的销毁 思维导图&#xff1a; 一&#xff0c;堆的概念 堆是什么&#xff1f;对于一个对于电脑储存结…

档案室漏水检测控制的类型和感应漏水线的规格

一、漏水绳的类型 漏水绳的类型有两种&#xff0c;一种是区域式漏水绳&#xff0c;搭配漏水控制器&#xff0c;对漏水异常秒级反应、报警。但是仅仅是对有漏水的情况进行监控&#xff0c;无法给出具体的位置&#xff0c;还需要工作人员的进一步排查。 还有一种是定位式漏水检…

关于ERP系统,你可能不知道的10件事

谈到ERP系统&#xff0c;大多数人只是考虑ERP日常管理的核心功能&#xff0c;即财务、销售、采购、库存、生产和分销。保持对这些关键领域的控制对任何企业的成功都是不可或缺的。但这些只是冰山一角&#xff0c;如果深入挖掘ERP系统&#xff0c;你可能会惊讶于它的其他功能。以…

考研复试第十六天:合并果子 【哈佛曼树】

前置知识 哈佛曼树&#xff1a;我们先来复习一下啥叫做哈佛曼树 1.背景 我们有下面这样一个字符串需要编码&#xff0c;就是将下面的字符转为二进制。我们采用的方法是前缀编码&#xff0c;用一颗树的叶节点来放字符。 2.前缀编码 编码是咋样的呢&#xff1f;看下面这个例子…