0


基于ros和openpcdet使用自己的雷达进行实时三维目标检测

参考博主hello689的教程,文中主要介绍了对于kitti的三维目标检测,本文对代码进行修改,添加旋转坐标轴的代码,以适配自己的雷达,可以参考这个博主的流程,再看本文对旋转参数的修改。


目录

1.实现思路

2.实验环境

3.实验步骤

3.1 ros.py代码修改

3.2 pointpillar.launch代码修改

3.3 pointpillar.rviz代码修改

3.4 ros.py订阅话题代码修改

4.试验结果

1.实验思路

用自己的雷达发布点云数据,然后通过订阅,添加旋转参数,将自己雷达的坐标系旋转到kitti的坐标系,或者交换点云的坐标都是可以的,如果不将坐标系统一,会导致发布的bbox乱飘。

2.实验环境

1.硬件配置:RTX 3060ti i7
2.软件环境:openpcdet环境,ros melodic,ubuntu18.04,cuda11.3
3.雷达:Tanway scope 64线

3.实验步骤

前提是你已经配置好了openpcdet的环境,和根据教程迁移了代码和配置好了ros环境。

#启动流程
#进入之前搭建好的openpcdet环境
conda activate pcdet
roslaunch pointpillars_ros pointpillars.launch

3.1 ros.py旋转参数代码修改

        """ Captures pointcloud data and feed into second model for inference """
        pcl_msg = pc2.read_points(msg, skip_nans=True, field_names=("x", "y", "z","intensity","ring"))
        np_p = np.array(list(pcl_msg), dtype=np.float32)
        #print(np_p)
        # 旋转轴
        rand_axis = [0,0,1]
        #旋转角度
        #yaw = 0.1047
        yaw = -1.57
        #返回旋转矩阵
        rot_matrix = self.rotate_mat(rand_axis, yaw)
        np_p_rot = np.dot(rot_matrix, np_p[:,:3].T).T

        x = np_p_rot[:, 0].reshape(-1)
        y = np_p_rot[:, 1].reshape(-1)
        z = np_p_rot[:, 2].reshape(-1)
        if np_p_rot.shape[1] == 4: # if intensity field exists
            i = np_p_rot[:, 3].reshape(-1)
        else:
            i = np.zeros((np_p_rot.shape[0], 1)).reshape(-1)
        points = np.stack((x, y, z, i)).T
        #print(points.shape)

首先给出kitti和tanway雷达坐标系的图方便理解。
请添加图片描述

可以看到我的雷达的坐标系和kitti的坐标系是不一样的,所以为将我的雷达的坐标系统一到kitti坐标系下,可以将我的雷达的坐标系以z轴为旋转轴,逆时针旋转90度,所得到的坐标系就和kitti一样了,注意代码中用的是弧度制,所以是-1.57。
3.2 pointpillar.launch代码修改

<launch>
  <node pkg="rosbag" type="play" name="player" output="log" args="-l /home/debtor/test_ce.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>

args是自己雷达录制的bag包,如果实时检测需要把第一段代码去掉。

3.3 pointpillar.rviz代码修改

  Global Options:
    Background Color: 48; 48; 48
    Default Light: true
    Fixed Frame: TanwayTP
    Frame Rate: 30
  Name: root

Fixed Frame 要改成自己雷达的Fixed Frame。
3.4 ros.py订阅话题代码修改

self.sub_velo = rospy.Subscriber("/tanwaylidar_pointcloud", PointCloud2, self.lidar_callback, queue_size=1,buff_size=2 ** 12)

此处修改成自己雷达发布的话题。
#4.实验结果
请添加图片描述

目前运行的是自己雷达录制的一分钟的rosbag包,还没跑直接订阅,一直没时间,原理是一样的,希望对大家有帮助。


本文转载自: https://blog.csdn.net/Debtor/article/details/129825175
版权归原作者 Debtor 所有, 如有侵权,请联系我们删除。

“基于ros和openpcdet使用自己的雷达进行实时三维目标检测”的评论:

还没有评论