参考博主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包,还没跑直接订阅,一直没时间,原理是一样的,希望对大家有帮助。
版权归原作者 Debtor 所有, 如有侵权,请联系我们删除。