Files
ascend_community_projects/2D_LiDAR_Pedestrain_Detection/README_cn.md
sha-xiaobao 85897b183e 2d-lidar
2022-11-29 14:50:43 +08:00

28 KiB
Raw Blame History

2D 激光雷达行人检测

1 介绍

该项目基于DROW3和DR-SPAAM模型实现了实时的2D激光雷达行人检测。 主要处理流程为:输入预处理后的激光雷达点云序列(帧)->行人检测模型推理->行人检测模型后处理->检测结果输出及可视化。

1.1 支持的产品

  • Ascend 310
  • Atlas 200DK

1.2 支持的版本

Ascend-CANN5.0.4 SDK2.0.4

1.3 软件方案介绍

基于MindX SDK的2D激光雷达行人检测业务流程为待检测LiDAR序列经预处理后得到按时间顺序的帧输入本项目开发的模型推理插件得到模型的推理结果。

表1.1 系统方案功能描述:

序号 模块 功能
1 序列处理 接收输入激光雷达点云序列路径对序列进行处理并将得到的帧存储到dataloader中并发送到模型推理插件。
2 模型推理 行人目标检测输入为坐标转换后的帧输出tensor为预测点分类结果和预测点坐标。
3 行人检测后处理 实现对输入tensor解析提取最终行人位置坐标。
4 行人检测可视化 将后处理得到的每一帧的检测目标可视化并显示在2D平面上。

1.4 代码目录结构与说明

本工程提供的测试数据集目录如下:

$(PROJECT_DIR)
├── dataset
│   ├── DROWv2
│   │   ├── test
│   │   ├── train
│   │   ├── val
│   ├── JRDB
│   │   ├── test_dataset
│   │   ├── train_dataset
...

本工程目录如下:

$(PROJECT_DIR)
├── README_cn.md
├── lidar_quicktest.sh
├── lidar_submit.sh
├── release_lidar_main.py
├── release_lidar_speedtest.py
├── LaserDet
│   ├── dr_spaam_ros
│   │   ├── src
│   │   │   ├── dr_spaam_ros
│   │   │   │   ├── launch
│   │   │   │   │   ├── dr_spaam_ros.launch
│   │   │   │   ├── scripts
│   │   │   │   │   ├── drow_data_converter.py
│   │   │   │   ├── __init__.py
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── dr_spaam_ros.py
│   │   │   │   ├── node.py
│   │   │   │   ├── package.xml
│   │   │   │   ├── setup.py
│   │   ├── example.rviz
│   ├── scripts
│   │   ├── det.py
│   │   ├── eval_test.py
│   │   ├── eval_test_ros.py
│   │   ├── onnx_om_convertor.sh
│   │   ├── setup_jrdb_dataset.py(自行下载)
│   ├── srcs
│   │   ├── data_handle
│   │   │   ├── __init__.py
│   │   │   ├── drow_handle.py
│   │   │   ├── jrdb_handle_handle.py
│   │   ├── data_loader
│   │   │   ├── __init__.py
│   │   │   ├── builder.py
│   │   │   ├── drow_dataset.py
│   │   │   ├── jrdb_dataset.py
│   │   ├── nexts
│   │   │   ├── __init__.py
│   │   │   ├── dr_spaam.py
│   │   │   ├── drow_net.py
│   │   │   ├── get_model.py
│   │   ├── utils
│   │   │   ├── __init__.py
│   │   │   ├── precision_recall.py
│   │   │   ├── utils.py
│   │   ├── __init__.py
│   │   ├── detector.py
│   ├── outputs_{*}
│   ├── pipelines
│   │   ├── *.pipeline
│   ├── release_logs

1.5 技术实现流程图

DROW/DR-SPAAM模型前处理流程为:

  • 读取输入激光雷达点阵序列,根据预设的参数对序列进行裁剪和变换,得到原始模型支持的输入格式。
  • 得到的模型输入按时间顺序排列。

后处理的整体思路为:

  • 读取模型推理插件输出的帧中行人的位置信息,对位置信息进行坐标变换。
  • 进行NMS通过空间距离作为两个点是否重合的度量标准给定最小距离冗余阈值移除可能重复检测点提高置信度。

1.6 适应场景

本案例可实现2D激光雷达行人检测对输入有以下限制

  • 模型训练使用的数据为225 deg/360 deg精度为0.5 deg若采用其他测试样例需额外增加补零或裁剪操作。
  • 输入要求为txt格式其中.txt存储内容为float32数据类型。
  • 适用于单帧输入。

2 环境依赖

名称 版本 (310适用)
MindX SDK 2.0.4
Ubuntu 18.0.4 LTS
Ascend-CANN-toolkit 5.0.4
Python 3.9.2

3 软件依赖

如需要生成自己的数据集,涉及的第三方软件依赖如下:

软件 版本 功能描述
json NA 读写.json文件。
rosbag 1.15.11 读取.bag格式的激光数据。
roslz4 4.0.2 To solve "Failed to load Python extension for LZ4 support. LZ4 compression will not be available." rosbag正常运行依赖之一。
python-lzf 0.2.4 压缩/解压缩.pcd格式的点云数据。

4 模型转换

本项目使用的模型提供onnx版本供开发者使用,使用模型转换工具ATC将onnx转换成om模型。

onnx转om一步转换

进入LaserDet/scripts/文件夹下,可直接运行onnx_om_convertor.sh文件,即可对四个模型进行一步转换。命令如下:

bash onnx_om_convertor.sh ${path_to_onnx_model}

最后的指令为四个onnx模型的存放路径需存于同一位置

5 准备

5.1 数据集准备

5.1.1 下载测试数据集

创建dataset目录确保下载并解压完毕后的dataset目录结构为

$(PROJECT_DIR)
├── dataset
│   ├── DROWv2
│   │   ├── test
│   │   ├── train
│   │   ├── val
│   ├── JRDB
│   │   ├── test_dataset
│   │   ├── train_dataset
...

数据集DROWv2下载地址

数据集JRDB下载地址

请注意通过上述两个链接下载的数据集原名为test_dataset_without_labels与train_dataset_with_activity请按照上述的目录结构更改为test_dataset及train_dataset。下载后请确保文件夹内包含rosbags文件夹且内包含.bag原文件。

5.1.2 预处理 JRDB 数据集

即将激光测量数据从RAW格式的rosbag中提取出来并且按时间轴与摄像头获取的图像对其先安装必要的包

# install required dependencies
$ pip install python-lzf
$ pip install lz4
$ pip install --extra-index-url https://rospypi.github.io/simple/ rosbag
$ pip install roslz4 --extra-index-url https://rospypi.github.io/simple/

接下来请从2D_lidar_person_detection/setup_jrdb_dataset.py at master · VisualComputingInstitute/2D_lidar_person_detection · GitHub上下载setup_jrdb_dataset.py脚本放置于LaserDet/scripts文件夹下并修改代码的第8行使_jrdb_dir指向5.1.1下载的JRDB数据集。然后执行该脚本。

# extract laser measurements from raw rosbag and synchronize with images
$ python LaserDet/scripts/setup_jrdb_dataset.py

(可根据需要只处理test测试集的部分删除setup_jrdb_dataset.py文件的166与167行代码即可。)

5.2 pipeline文件准备

本项目提供了四个pipeline文件以满足测试要求请将pipelines文件保存在以下路径。

$(PROJECT_DIR)
├── pipelines
│   ├── dr_spaam_drow_e40.pipeline
│   ├── dr_spamm_jrdb_e20.pipeline
│   ├── drow3_drow_e40.pipeline
│   ├── drow3_jrdb_e20.pipeline
...

其中DROWv2数据集对应的pipeline文件为dr_spaam_e40.pipeline和drow_e40.pipelineJRDB数据集对应的pipeline文件为drow_jrdb_e20.pipeline和dr_spaam_jrdb_e20.pipeline。 确保pipeline文件中模型推理插件mxpi_tensorinfer的参数["props"]["model_path"]是正确的。

6 编译与运行

S1. 按 2 环境依赖 中的步骤设置环境变量。

S2. 按 4 模型转换 中的步骤获得om模型推理文件并按 5.2 pipeline文件准备 中的步骤确认模型推理文件是否可以被正确调用。

S3. 按 5.1 数据集准备 中的步骤准备测试用数据集。

S4. 运行行人检测推理。首先找到可执行文件所在路径,在当前项目根目录下。

$ cd $(PROJECT_PATH)

命令执行成功后,终端打印出测试精度,并将可视化结果保存在项目根目录下。关于测试文件的使用方法详见 7 性能与精度测试

7 性能与精度测试

7.1 性能测试

执行 6 编译与运行 中 S1-S3步骤完成准备工作执行以下命令

首先确保lidar_quicktest.sh中的python命令行如下

# lidar_quicktest.sh
nohup python -u release_lidar_speedtest.py --data_path $1 --pipe_store $2 --split $3 --seq_name $4

[注] 当测试完整数据集时split可以为val/test当测试单个序列时split可以为train_nano/test_nano当测试单个帧时split可以为train_single/test_single。对于DROWv2数据集序列名称即为train/test文件夹下.csv文件的名称对于JRDB数据集序列名称可以在train_dataset/lasers或test_dataset/lasers下快速查找得到。

测试整个数据集的平均性能:

# lidar_quicktest.sh
nohup python -u release_lidar_speedtest.py --data_path $1 --pipe_store $2 --split $3
$ cd $(PROJECT_PATH)
$ bash lidar_quicktest.sh dataset/{DATASET_NAME} pipelines/{NAME.pipeline} {VAL_OR_TEST}
# e.g. bash lidar_quicktest.sh dataset/DROWv2 pipelines/drow3_drow_e40.pipeline val
# e.g. bash lidar_quicktest.sh dataset/DROWv2 pipelines/dr_spaam_drow_e40.pipeline val
# e.g. bash lidar_quicktest.sh dataset/JRDB pipelines/drow3_jrdb_e40.pipeline test
# e.g. bash lidar_quicktest.sh dataset/JRDB pipelines/dr_spaam_jrdb_e40.pipeline test

(注意:关于指令split在drowv2数据集下可选择val或者test,在jrdb数据集下仅可选择test)

经测试推理性能可达到如下表所示满足性能要求。实际推理速度与输入帧每一行的点数、数据集的大小有关同时也与CPU的可分配资源有关。

该命令不包含可视化输出。

性能推理结果如下:

1On DROW val dataset (450 points, 225 degrees field of view)

FPS (Ascend 310)
DROW3 6.6274
DR-SPAAM 3.0385

[注] 因为预处理方式不同DR-SPAAM模型的输入是DROW3的十倍模型本身体量差异不大执行性能体现在FPS上。

2On JackRabbot (JRDB) val dataset (1091 points, 360 degrees field of view)

FPS (Ascend 310)
DROW3 11.0865
DR-SPAAM 10.9769

[注] JRDB数据集的性能测试不包括计算精度的时间。

7.2 精度测试

执行 6 编译与运行 中 S1-S3步骤完成准备工作。

7.2.1 DROWv2数据集测试

基于序的评价指标

  • AP (ROC curve 与 AUC):将所有的样本-标签对按照预测值逆序排列,从坐标点$(0,0)$出发若第1个为正则向上走一步否则向右走一步向上走一步的步距为$1/P$,向右走一步的步距为$1/N$,其中$|P|$为实际正标签的的总数,$|N|$为实际负标签的的总数。这样获得的曲线称为ROCReceiver Operating Characteristic Curve而AUCArea Under Curve就是该曲线与坐标轴围成的面积。本项目的测试指标AP即AUC。

  • peak-F1将所有的样本-标签对按照预测值逆序排列,第$k$次认为前$k$个样本-标签对为正以此画出F1曲线最终取该曲线中最大值称之为peak-F1.

  • EER均等错误率EEREqual Error Rate是ROC曲线中FPR+TPR==1.0的地方即ROC曲线与经过点$(1,0)$和点$(0,1)$的直线的交点。

若选择测试数据集为DROWv2执行命令后终端输出测试精度。 首先确保lidar_submit.sh中的python命令行的输入如下

# lidar_submitt.sh
nohup python -u release_lidar_main.py --data_path $1 --pipe_store $2 --split $3 --visu $4

再执行如下

$ cd $(PROJECT_PATH)
$ bash lidar_submit.sh dataset/DROWv2 pipelines/{NAME.pipeline} {VAL_OR_TEST} {True or False}
# e.g. bash lidar_submit.sh dataset/DROWv2 pipelines/drow3_drow_e40.pipeline test False
# e.g. bash lidar_submit.sh dataset/DROWv2 pipelines/drow3_drow_e40.pipeline val False
# e.g. bash lidar_submit.sh dataset/DROWv2 pipelines/dr_spaam_drow_e40.pipeline test False
# e.g. bash lidar_submit.sh dataset/DROWv2 pipelines/dr_spaam_drow_e40.pipeline val False

On DROW test dataset (450 points, 225 degrees field of view)

AP0.3 AP0.5 peak_F10.3 peak_F10.5 EER0.3 EER0.5
DROW3 (GPU) 0.6375 0.6589 0.6431 0.6505 0.6407 0.6483
DROW3 (310) 0.6374 0.6586 0.6427 0.6502 0.6586 0.6478
DR-SPAAM (GPU) 0.7072 0.7227 0.6941 0.6979 0.6822 0.6878
DR-SPAAM (310) 0.7092 0.7250 0.6970 0.7010 0.6862 0.6918

On DROW val dataset (450 points, 225 degrees field of view)

AP0.3 AP0.5 peak_F10.3 peak_F10.5 EER0.3 EER0.5
DROW3 (GPU) 0.4346 0.4507 0.4953 0.5024 0.4932 0.5000
DROW3 (310) 0.4347 0.4503 0.4949 0.5023 0.4929 0.4997
DR-SPAAM (GPU) 0.5107 0.5284 0.5476 0.5552 0.5458 0.5535
DR-SPAAM (310) 0.5128 0.5297 0.5488 0.5560 0.5474 0.5551

[注] DROWv2数据集的val部分比test部分包含更多hard samples故两个推理模型的val检测结果比test检测结果差。

7.2.2 JRDB数据集测试

若选择测试数据集为JRDB因计算精度是几何增加的运算复杂度执行命令后会将检测结果保存在路径下需要切换测试环境任意支持scipy和sklearn依赖的环境以获得最终测试精度。首先执行以下命令:

$ cd $(PROJECT_PATH)
$ bash lidar_submit.sh dataset/JRDB pipelines/{NAME.pipeline} test False
# e.g. bash lidar_submit.sh dataset/JRDB pipelines/drow3_jrdb_e40.pipeline test False
# e.g. bash lidar_submit.sh dataset/JRDB pipelines/dr_spaam_jrdb_e40.pipeline test False

默认的检测结果和对应的groundtruth将会被保存到$(PROJECT_PATH)/outputs_{MODEL_NAME}_JRDB/下,保存的结果如下所示:

$(PROJECT_DIR)
├── output_JRDB_{MODEL_NAME}
│   ├── detections
│   │   ├── <sequence_name_0>
│   │   │   ├── 000000.txt
│   │   │   ├── 000001.txt
│   │   │   ├── ...
│   │   ├── <sequence_name_1>
│   │   │   ├── 000000.txt
│   │   │   ├── 000001.txt
│   │   │   ├── ...
│   ├── groundtruth
│   │   ├── <sequence_name_0>
│   │   │   ├── 000000.txt
│   │   │   ├── 000001.txt
│   │   │   ├── ...
│   │   ├── <sequence_name_1>
│   │   │   ├── 000000.txt
│   │   │   ├── 000001.txt
│   │   │   ├── ...
...

如果测试单个序列,保存路径有少许不同,如下

$(PROJECT_DIR)
├── output_JRDB_{seq_name}_{MODEL_NAME}
│ ├── detections
│ │ ├── 000000.txt
│ │ ├── 000001.txt
│ │ ├── ...
│ ├── groundtruth
│ │ ├── 000000.txt
│ │ ├── 000001.txt
│ │ ├── ...

确认输出结果存在后,可在支持scipysklearn的环境中安装依赖。注意安装顺序首先安装numpy和scipy再安装sklearn

# # If using pip
# To install scipy, try:
$ pip install scipy
# If this fails, then try:
$ python -m pip install --user numpy scipy matplotlib ipython jupyter pandas sympy nose
# To install sklearn, try:
$ pip install -U scikit-learn

# # If using conda
$ conda install -c anaconda scipy
$ conda install -c anaconda scikit-learn

我们提供了可供参考的脚本LaserDet/scripts/eval_test.py

将参数 --result_dir 修改为正确的输出结果txt集地址执行以下指令

$ cd $(PROJECT_PATH)/LaserDet
$ python scripts/eval_test.py --result_dir ${OUTPUTS_RESULTS_DIR}

执行命令后终端输出测试精度。

On JackRabbot(JRDB) test dataset (1091 points, 360 degrees field of view)

AP0.3 AP0.5 peak_F10.3 peak_F10.5 EER0.3 EER0.5
DROW3 (GPU) 0.7642 0.8255 0.7277 0.7516 0.7229 0.7479
DROW3 (310) 0.7357 0.8170 0.7138 0.7468 0.7096 0.7344
DR-SPAAM (GPU) 0.7856 0.8377 0.7482 0.7744 0.7477 0.7741
DR-SPAAM (310) 0.7560 0.8289 0.7320 0.7677 0.7311 0.7673

[注] 验证DROWv2和JRDB的精度值不能跨数据集比较。

7.3 可视化测试

需要提前安装安装matplotlib。

运行脚本 lidar_submit.sh 时,在该script中的指令中加上--visu True (示例中,--visu为bash命令的第四个arg

安装matplotlib命令如下

$ pip3 install matplotlib

确保lidar_submit.sh的python命令行修改如下本例设置了6个外部输入变量。

请注意,本节主要用于对单帧进行可视化的分析如需进行完整测试集的可视化测试请在7.2节中修改visu指令为True即可。

# lidar_submit.sh
python -u release_lidar_main.py --data_path $1 --pipe_store $2 --split $3 --visu $4 --seq_name $5 --frame_id $6

请注意:

指令split需写成train_single(val_single)或者test_single的形式。

指令visu保持为True。

指令seq_name在DROW数据集下为.bag.csv结尾的文件在JRDB数据集下为lasers文件夹下的文件夹名称。

指令frame_id在DROW数据集下为按时间顺序的帧编号在JRDB数据集下为seq_name文件夹下的txt文件名。

执行命令示例1(对JRDB数据集下的train数据集下cubberly-auditorium-2019-04-22_0序列的1234帧进行可视化操作

bash lidar_submit.sh ./dataset/JRDB ./pipelines/drow3_jrdb_e40.pipeline train_single True cubberly-auditorium-2019-04-22_0 1234

执行命令示例2(对DROWv2数据集下的test数据集下run_t_2015-11-26-11-22-03.bag.csv序列的第10帧进行可视化操作

bash lidar_submit.sh ./dataset/DROWv2 ./pipelines/drow3_drow_e40.pipeline test_single True run_t_2015-11-26-11-22-03.bag.csv 10

可视化结果将保存在项目根目录的./fig文件夹下。

$(PROJECT_DIR)
├── figs
│ ├── sequence_name01
│ │ ├── dddddd.png
│ │ ├── dddddd.png
│ │ ├── ...
│ ├── sequence_name02
│ │ ├── dddddd.png
│ │ ├── dddddd.png
│ │ ├── ...

visulization

8 ROS环境下的测试

8.1 Altas 200dk 开发板 ROS环境配置

材料清单:

名称 数量
Atlas-200dk开发板+配套电源线 1
Type-C USB线 1
网线 1
可共享网络的设备(如电脑或路由器) 1
SD卡建议100G以上 1
读卡器 1

请参阅Atlas200dk-MindXSDK开发环境搭建一站式导航在Atlas200dk开发板或同类型平台上安装好MindXSDK。[确认python版本>3.6]

请参阅Atlas200dk-ROS系统移植一站式导航在Atlas200dk开发板或同类型平台上安装好ROS系统。[确认ros melodic==1.14.13]

考虑到Atlas-200dk无可视化操作界面测试结果需要借助其他平台展示如有可视化操作界面的Linux系统安装版本为desktop系列windows系统下请安装虚拟机再在虚拟机中配置Linux下的ROS系统。

8.2 编译与运行

8.2.1 编译ROS节点

首先为执行cmake新建一个文件夹并命名为dr_spaam_ros原git clone项目下的dr_spaam_ros文件夹改名为dr_spaam_ros_backup或其他不冲突的名称

$ cd $(PATH_TO_LaserDet)
$ mkdir -p dr_spaam_ros
$ cd dr_spaam_ros
$ catkin_make
// This will create a build folder and a devel folder
$ catkin_make_isolated
// This will create a build_isolated folder and a devel_isolated folder
// a CMakeLists.txt file will appear under the src folder

完成后dr_spaam_ros路径下应有如下

$(LaserDet)
├── dr_spaam_ros
│ ├── build
│ │ ├── ...
│ ├── build_isolated
│ │ ├── ...
│ ├── devel
│ │ ├── ...
│ ├── devel_isolated
│ │ ├── ...
│ ├── src
│ │ ├── ...
│ │ ├── CMakeLists.txt
│ ├── .catkin_workspace
│ ├── example.rviz

8.2.2 运行ROS节点

我们假设读者已正常执行步骤1-7所需模型与数据集已就位。

默认在ROS环境下每开启一个新的终端都在路径$(PATH_TO_LASERDet)/dr_spaam_ros下并执行source devel/setup.bash添加ROS环境路径。至目前该ROS节点支持JRDB数据集模型输入为.bag文件一般位于JRDB/(train OR test)/rosbag/SEQUENCE_NAME.bag(同时将5.1.2中处理好的包含txt的数据集一并下载一般位于JRDB/(train OR test)/lasers/SEQUENCE_NAME/*.txt;同时需要时间戳文件一般位于JRDB/(train OR test)/timestamps/SEQUENCE_NAME/frames_pc_im_laser.json。测试用bag文件和json文件的序列名称SEQUENCE_NAME是一一对应的。

首先编辑LaserDet/dr_spaam_ros/src/dr_spaam_ros/node.py主程序中的

if __name__ == '__main__':
# init ros node here
rospy.init_node("dr_spaam_ros")
MODE_CHOOSE = 1 # 1: eval , 2: render
SEQ_NAME = # 指向处理后的数据集文件夹路径
TIMESTAMPS_PATH = # TODO $(PATH_TO_TIMESTAMP_FILE)/frames_pc_im_laser.json
PIPE_STORE = # TODO $(PATH_TO_MODEL_PIPELINES)/XXX.pipeline
IS_RIVZ_SUPPORTED = False # TODO if you have rviz-supported env or not

若MODE_CHOOSE为1模型推理结果将保存在LaserDet/dr_spaam_ros/src/outputs/seq_name下按时间戳文件中的顺序逐帧写入txt文件当rosbag play步骤3正常结束后roslaunch步骤2也会正常退出。同时也可以设置is_rviz_supported为False每一帧的可视化结果将会保存到LaserDet/dr_spaam_ros/src/bag2png下。

若MODE_CHOOSE为2则节点会一直处于等待接收sensor message的状态rosbag play步骤3结束后roslaunch步骤2不会自动退出必须手动ctrl+C。

运行步骤如下:

  1. 开启一个终端输入roscore在测试过程中第一个终端不能关闭或停止roscore。

  2. 开启另一个终端输入roslaunch dr_spaam_ros dr_spaam_ros.launch启动DR-SPAAM-ROS节点等待片刻直至推理模型初始化完毕即终端显示stream创建成功。

I20221105 11:21:15.085721 29942 MxStreamManager.cpp:175] Creates streams successfully.
I20221105 11:21:15.085903 30016 MxsmStream.cpp:326] state changed: NULL->READY
-----------------Create Stream Successfully, ret=0-----------------
I20221105 11:21:15.086086 30016 MxsmStream.cpp:326] state changed: READY->PAUSED
I20221105 11:21:15.086273 30016 MxsmStream.cpp:326] state changed: PAUSED->PLAYING
loop TOTAL_NUM_OF_FRAMES_IN_A_BAG_FILE_TO_BE_READ
  1. 开启第三个终端输入:rosbag play -r 0.015 ${PATH_TO_BAG_FILE}DR-SPAAM-ROS节点开始接收每一帧信息。其中-r是play rate为避免丢帧造成模型推理无法正常进行我们不得不适当降低rosbag play的速率至0.015-0.020这个范围。

终端显示

[ INFO] [1667556035.108439173]: Opening xxx.bag

Waiting 0.2 seconds after advertising topics... done.

Hit space to toggle paused, or 's' to step.
 [RUNNING]  Bag Time: xxx   Duration: xxx / xxx               xxx
Done.

直至bag文件播放结束。若rosbag play执行结束后roslaunch的节点没有正常输出以下指示并正常退出可能是因为速率过高造成的丢帧不同于C++下的ROSrospy.spin()的使用会使节点一直处于等待接收信息的状态只能在第二个开启的终端中执行ctrl+C退出roslaunch或rosrun

Mission completed, please check your output dir and welcome for the next use.

optional

  1. 开启第四个终端输入:
$ cd $(PATH_TO_LaserDet)/dr_spaam_ros
$ source devel/setup.bash
$ mkdir bagfiles
$ cd bagfiles
$ rosbag record -a
// OR ALTERNATIVE
$ rosbag record -O subset /segway/scan_multi /dr_spaam_rviz /dr_spaam_detections

其中-a表示把rosrun发表的所有topics都保存到新建的.bag文件中。这个方法不需要提前执行rostopic list -v查看所有topics且后期更换任意一支持平台可视化时更方便只需执行rosrun rviz rviz -d example.rziz启动GUI界面。注意该选项要求开发板预留足够的free space至少大于当前bag文件+1GB。注意若选择用rosbag保存subset后两个topics即{/dr_spaam_rviz, /dr_spaam_detections}是在节点启动后才会发布的。

$:rostopic hz /segway/scan_multi # SensorMessage input of node dr_spaam_ros
$:rostopic hz /dr_spaam_rviz # Published topic of node dr_spaam_ros
$:rostopic hz /dr_spaam_detections # Published topic of node dr_spaam_ros

8.3 ROS精度测试

本项目提供精度测试代码位于LaserDet/scripts/eval_test_ros.py使用方法与LaserDet/scripts/eval_test.py相同此处不作过多展开。

9 常见问题

9.1 测试输入用例不存在

解决方案:检查输入路径。

9.2 测试输入格式错误

解决方案:严格按照数据集处理流程处理测试数据。

9.3 测试数据不符合模型输入

如果采用本说明提供的数据集以外的数据作为测试用例,可能需要自行实现前处理。

10 参考文献

@article{Jia2021Person2DRange,
  title        = {{Self-Supervised Person Detection in 2D Range Data using a
                   Calibrated Camera}},
  author       = {Dan Jia and Mats Steinweg and Alexander Hermans and Bastian Leibe},
  booktitle    = {International Conference on Robotics and Automation (ICRA)},
  year         = {2021}
}

@inproceedings{Jia2020DRSPAAM,
  title        = {{DR-SPAAM: A Spatial-Attention and Auto-regressive
                   Model for Person Detection in 2D Range Data}},
  author       = {Dan Jia and Alexander Hermans and Bastian Leibe},
  booktitle    = {International Conference on Intelligent Robots and Systems (IROS)},
  year         = {2020}
}