ARS大陆毫米波雷达ROS开发包解析及二次开发(二)

2023-05-16

文章目录

  • 预备知识与前期工作
  • ARS_40X源码架构
  • 雷达数据格式及流向
    • 数据流向图
    • 雷达数据格式
      • socket_can通信格式(以雷达配置帧通信为例)
      • 关键数据介绍及格式说明
        • cluster数据帧
        • can_messages
  • 关键参数:topic与服务
    • Subscription
    • Services
  • 关键类与继承关系
  • 二次开发流程展示:TODO
  • 下一步工作

预备知识与前期工作

  1. 前期工作链接
  2. 雷达手册链接
  3. 中文注释版本源码(未添加完成滤波器,暂时不能跑,仅提供注释参考)

  最近阅读了前段时间刚部署到电脑上的源码,作者的源码是基于c++的,最近穿插着复习c++并完成了雷达的源码阅读,对源码关键部分进行了注释,增加了可读性。另外此架构上进行修改,完成了雷达滤波的初步开发,下一步部署到电脑进行效果验证。
  首先,雷达检测有两种方式,一种是cluster模式,即点云模式,将所有的扫描到的点云经过内部滤波后,不加处理的发布出来,具体效果可见我前一篇博客。这种状态下生成的地图可以看作点云图,优点是点云信息密集,利于二次开发。缺点也很明显:噪声大,一个物体上存在多个雷达点,分辨起来较为困难。
  另一种模式就是object模式,其中将点云进一步处理,以RCS等参数判断物体的类别并输出。这种模式的优点是:可视化程度高,易于分辨,同时噪声点少。缺点是:难以进行二次开发,对的点云特征的利用度较低。

ARS_40X源码架构

在这里插入图片描述

源码架构

  如图所示,源码主要分为三个功能部分:

  1. 与雷达接口socket_can的通信与数据处理、发布等任务;
  2. 在第一个的基础上,实现与rviz“通信”的可视化任务;
  3. 同样在第一个人物的基础上,实现object mode下的目标姿态发布任务;

  图中源码文件结构如图所示,基本上由hpp文件定义通信的数据基本格式和所有类的初始化,然后再src文件中对所有类进行初始化,其中./src/ros文件下的ros文件初始化各类上层接口类,其功能包含利用service服务将更改的参数传递给socket_can接口,可视化点云等上层服务。

雷达数据格式及流向

数据流向图

请添加图片描述

源码数据流向图

  如上图所示,soket_can负责与毫米波雷达的通信,包括对数据的封装以及读取等功能,供ars_40x_can.cpp使用,包括建立的通信类来实现与socket_can的通信、并负责更新所有数据,,实现的功能有:receive_data(), write_data(),端口设置,获取雷达状态等,这个是底层接口中最重要的文件。
  实现了数据的更新后,上层的ros接口要继承底层接口,建立ROS功能包间的通信,以进一步实现可视化与用户的实时更改。综上,实现了数据从底层获取到上层的接口开发,具体细节请读者自行看源码。

雷达数据格式

  数据的通信包含:源码与socket_can包的通信、源码内部之间的数据通信。通信之间的数据格式对于理清楚源码的架构及运行机制有着重要作用。在大陆雷达开发手册中有着清楚的说明,建议读者首先读一下开发手册。

socket_can通信格式(以雷达配置帧通信为例)

  源码与socket_can通信是符合大陆雷达的标准格式的。
数据发送包括:数据头(fram_id) + 数据(n byte)
其中:数据头说明我要发送什么数据:例如配置数据中对于最大距离的配置、滤波配置等。
数据请求:数据头(fram_id) + 数据(n byte),与数据发送同理,不过功能是对于雷达状态的请求、雷达点云数据的请求等。
在这里插入图片描述
  这是雷达配置信息的设置帧参数:可以看到,其中对于雷达的配置帧,包含了8 * 8位的数据,每一位都有特殊的用途,例如要设置雷达最大距离,就要设置其中的max_distance块,并包装进一个8byte的数据中,发送出去,当然,这些底层的移位操作作者通过union体帮我们解决了,我们只需要按照作者给定的格式进行编码,如下图所示。
在这里插入图片描述

  如上图,这是雷达的配置数据格式,这些变量按照名字都是雷达配置帧中的关键变量。雷达的配置帧数据格式是按照:第一位,第二位…每一位分别配置的,通过union体与":"符号(每个变量后面都是一个整数,这是设置的union位域)是每个变量对应其在8byte中特定的位置,免去了需要单独移位的操作。
  raw_data就是8byte的数据,raw_data用来保存所有的数据,同时还能够按照位域整体接收来自socket_can的雷达8byte数据,这样在查看某个参数时也不需要移位操作就能取到对应的雷达配置参数,非常方便。
  通过以上,可以了解到源码内部对于雷达配置等参数的封装格式以及和底层雷达通信的数据格式,下面介绍其他比较关键的数据格式。

关键数据介绍及格式说明

同样重要的还有:雷达状态帧、目标模式下的目标帧、cluster模式下的数据帧、can_messages
重点介绍:cluster下的数据帧,can_messages

cluster数据帧

  cluster数据帧主要是包括三个部分:

  1. cluster_0_status:包含一帧内的点云数量等基本点云信息;
  2. cluster_1_general:点云的速度和方向等信息;
  3. cluster_2_quality:点云的质量信息:例如点的真实存在概率等;
    在这里插入图片描述
cluster的数据格式定义

can_messages

在这里插入图片描述
  这个信息头的作用在于发送的时候作为fram_id,说明自己要发送或者要取什么数据,例如要ars_40x_can.cpp中的receive_data()中,要发送数据前必须要加上frame_id = RadarCfg。
在这里插入图片描述

ars_40x_can.cpp中关于发送配置请求的部分

  前面的can_messsages作为frame_id就是这个作用,通过socket_can提供的can_.write来确定写入的信息类别,类的get方法返回的raw_data传入雷达中修改配置信息等雷达运行参数。

关键参数:topic与服务

  通过查看topic,可以实时获取雷达的当前状态与目标点的信息等,ROS的topic机制实现了ROS系统内的信息共享,免去了复杂的进程间通信,利用其在系统内发布的信息进行订阅,继而可以方便的进行二次开发。

MessageTypeDescriptionMessage Box
/radar_statusars_40X/RadarStatusDescribe the radar configuration0x201
/ars_40X/clustersars_40X/ClusterListRaw clusters data from radar0x600, 0x701
/ars_40X/objectsars_40X/ObjectListRaw objects data from radar0x60A, 0x60B, 0x60C, 0x60D
/visualize_clustersvisualization_msgs/MarkerArrayClusters markers for RViz visualization-
/visualize_objectsvisualization_msgs/MarkerArrayObject markers for RViz visualization-

  这是作者源码中定义的基本topic。

$sudo rostopic echo /radar_status

通过这个语句,可以获取实时的雷达状态:最大距离、功率等信息。

Subscription

MessageTypeDescriptionMessage Box
/odomnav_msgs/OdometryVelocity and accleration information0x300, 0x301

Services

Services
/set_ctrl_relay_cfg
/set_max_distance
/set_output_type
/set_radar_power
/set_rcs_threshold
/set_send_ext_info
/set_send_quality
/set_sensor_id
/set_sort_index
/set_store_in_nvm

这是源码中提供的服务,可以通过服务来更改雷达的各项参数,调节雷达使其满足自己的使用需求,例如我要更改检测的最大距离,可以这么做:

$rosservice call /set_max_distance 200 #将最大检测距离更改到200米

  这里很关键,后面我们进行二次开发,需要对雷达点云进行滤波等需要与雷达通信的功能,都需要进行基于service进行更改,service提供给我们一个非常方便与雷达进行人机交互的接口,我们可以添加滤波服务,对静态物体进行滤除或者对一定距离的物体进行滤除。

关键类与继承关系

  源码中的数据获取等都是基于类的方法进行的,利用类的方法实现数据的更新,雷达参数的订阅、获取及人工设置。
请添加图片描述

类的继承关系及引用框架
  如上图所示(以**雷达配置类**相关为例):
  1. 基本类:

在这里插入图片描述

雷达配置基本类
  这个类实现的基本功能有:初始化雷达配置信息,设置雷达的运行参数,返回雷达的配置信息指针(radar_cfg * get_radar_cfg() ),初始化雷达配置信息(radar_cfg radar_cfg_msg)。

在这里插入图片描述

ros对于基本的继承
  如上图所示,ROS继承类得到基本类对于数据的获取、发送等工作,实现对底层数据的抽象化工作,通过ROS的消息与服务机制对接雷达设置的参数,来达到调节的功能。

二次开发流程展示:TODO

下一步工作

  下一步工作主要是测试自己添加的滤波的代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARS大陆毫米波雷达ROS开发包解析及二次开发(二) 的相关文章

随机推荐

  • 使用kalibr标定imu

    这种方法需要在ubuntu中安装matlab 本人只标定的imu 没有和摄像头联合标定 xff0c 方法和imu utils类似 xff0c 先用ros记录imu数据 xff0c 在通过kalibr来计算随机游走误差和高斯白噪声误差 1 首
  • 联合标定双目相机和imu,使用工具Kalibr

    文章目录 imu标定 xff0c 产生数据写入imu yaml中 xff0c 见下文 xff0c imu yaml文件要用于联合标定 双目相机标定 xff0c 产生数据文件用于联合标定 xff0c 文件名类似camchain homeubu
  • matlab从txt文件中提取出有效信息

    背景 从一份txt文件中筛选出有效信息 xff0c txt文件有非常多行 xff0c 依靠关键字筛选出有效行 xff0c 并从行中提取有效信息 test txt文件例如 xff1a aaa 1 2 3 valid 0 1 0 2 0 3 a
  • Python 基础 第一天

    print 34 Hello World 34 print 34 你好 xff0c 世界 34 在 Python 中以单下划线 xff08 xff09 开头命名的标识符 表示不能直接访问的类属性 xff0c 以双下划线 xff08 xff0
  • Python 基础 第二天

    import random import math 集合 xff08 set xff09 是一个无序的不重复元素序列 可以使用 或 set 函数创建集合 值得注意的是 一个空集合必须用set xff0c 使用 创建时会创建一个空字典 bas
  • Django 第六天

    Django高级扩展 静态文件 xff1a css xff0c js xff0c 图片 xff0c Json文件 xff0c 字体文件等 配置settings py xff1a STATICFILES DIRS span class tok
  • Python 爬虫 小练习

    获得某易云音乐 对应歌单下的所有歌曲的歌曲 专辑图片 歌手图片 lrc歌词 span class token keyword import span requests span class token keyword from span b
  • 免费GPU

    中国移动免费GPU资源 九天 毕昇还属于内侧阶段 xff0c 没有充值入口 没有GPU算力的同学可以体验一下 xff0c 不算广告 xff0c 纯属安利羊毛 引言 最近想跑一个模型 xff0c 但突然发现手头没有可用的算力了 然后朋友推荐了
  • 分布式 ROS PX4 GAZEBO 多机仿真 服务器-客户端模式

    这是一个目录 最终目标环境配置要求具体实施方案UAV0配置UAV1配置 执行 最终目标 实现主从机器多机仿真 xff0c 模拟真机部署 具体方案如下 xff1a 设定一台计算机为通信汇集节点 xff0c 处理所有无人机位姿 移动控制等 xf
  • 算法训练 最短路

    算法训练 最短路 问题描述 给定一个n个顶点 xff0c m条边的有向图 xff08 其中某些边权可能为负 xff0c 但保证没有负环 xff09 请你计算从1号点到其他点的最短路 xff08 顶点从1到n编号 xff09 输入格式 第一行
  • Ubuntu18开启ssh服务

    Ubuntu默认不会开启ssh服务 所以我们无法对Ubuntu进行远程连接 xff0c 这对Ubuntu的运维造成了很大不便 本文详细讲解如何在Ubuntu18下开启ssh服务 关键指令 root用户下 xff0c 非root用户所有指令前
  • alembic 常用命令有哪些?

    上节为大家讲解了alembic如何使用 xff1f 本节就为大家介绍一下alembic常用命令有哪些 xff1f alembic常用命令如下 xff1a 在讲这些命令用法之前 xff0c 我们先建立一个alembic demo数据库 然后再
  • Linux UIO驱动框架(一)

    文章目录 Linux UIO驱动框架1 什么是uio驱动框架2 uio驱动框架使用3 uio驱动框架实现原理 Linux UIO驱动框架 1 什么是uio驱动框架 uio全称为用户空间IO Userspace I O xff0c 是一种在用
  • maven 3.6.3 下载与详细配置图文教程(基于win10系统)

    maven下载与配置 1 下载maven1 1 apache maven官网下载链接1 2 百度云资源下载1 3 CSDN资源下载 2 配置maven环境变量3 验证maven配置是否生效4 修改 settings xml 文件 1 下载m
  • Dockerfile 深入理解

    Docker 专栏文章索引 x1f449 Docker 简介 x1f449 Docker 安装图文教程 x1f449 Docker 镜像概念及操作 x1f449 Dockerfile 深入理解 Dockerfile 深入理解 x1f680
  • 深度学习之局部连接与权值共享

    在网络中 xff0c 如果全部使用全连接网络 xff0c 则会使参数异常多 xff0c 造成计算复杂 xff0c 降低训练的效率 由此引入卷积层 xff0c 卷积层能够有效减小训练参数 xff0c 这与卷积具有的两个性质有关 结合自身经历以
  • nuScenes自动驾驶数据集:数据格式精解,格式转换,模型的数据加载 (一)

    nuScenes数据集及nuScenes开发工具包简介 文章目录 nuScenes数据集及nuScenes开发工具包简介1 1 nuScenes数据集简介 xff1a 1 2 数据采集 xff1a 1 2 1 传感器布置1 2 2 数据格式
  • 基于毫米波雷达与视觉融合的行人检测

    这篇文章通过在数据层进行毫米波雷达与相机的融合以提高行人检测效果 其不仅可以通过雷达产生ROI以减小对图像进行滑动窗口检测的数量 xff0c 提高检测速度 xff0c 同时利用雷达 xff0c 可以检测远处不明显的行人 xff0c 提高检测
  • ROS中进行大陆ARS408雷达点云的可视化及二次开发(一)

    文章目录 一 硬件准备二 驱动准备2 1 首先安装依赖 xff1a 2 2 检验是否正确安装2 3 启动雷达并检查数据 三 ROS工作环境搭建3 1 安装socket can依赖3 2 安装ars 40X开发包 四 测试五 总结二次开发 毫
  • ARS大陆毫米波雷达ROS开发包解析及二次开发(二)

    文章目录 预备知识与前期工作ARS 40X源码架构雷达数据格式及流向数据流向图雷达数据格式socket can通信格式 xff08 以雷达配置帧通信为例 xff09 关键数据介绍及格式说明cluster数据帧can messages 关键参