用ROS加载kitti数据集的激光雷达点云数据,并用rviz显示出来,实现的效果如下:
1.准备数据
2.启动roscore
roscore
3.创建功能包
mkdir catkin_ws
cd catkin_ws
mkdir src
catkin_make
进入vscode后:
code .
创建功能包:kitti_tutorial
添加功能包的依赖:rospy roscpp
创建文件 scripts/kitti2pcl.py
4.发布点云话题
#!/usr/bin/env python
import rospy
import os
import numpy as np
from sensor_msgs.msg import PointCloud2
import sensor_msgs.point_cloud2 as pcl2
from std_msgs.msg import Header
DATA_PATH='/home/chen/Downloads/kittidata/2011_09_26/2011_09_26_drive_0005_sync/'
if __name__=='__main__':
rospy.init_node('kitti_node',anonymous=True)
pcl_pub=rospy.Publisher('kitti_pcl',PointCloud2,queue_size=10)
rate=rospy.Rate(10)
frame=0
while not rospy.is_shutdown():
pcl=np.fromfile(os.path.join(DATA_PATH,'velodyne_points/data/%010d.bin'%frame),dtype=np.float32).reshape(-1,4)
header=Header()
header.stamp=rospy.Time.now()
header.frame_id='map'
pcl_pub.publish(pcl2.create_cloud_xyz32(header,pcl[:,:3]))
rospy.loginfo('published')
rate.sleep()
frame+=1
frame%=154
注解:
- 节点名称为kitti_node;
- 发布的话题名称为kitti_pcl,数据类型为PointCloud2;
- fram最多为153,因为我采用的这组数据只有153张;
- frame前面进行了补零操作,可以参考这篇文章;
- bin文件的数据每一行有四个数字,分别代表xyz和反射强度信息,我们显示的话只显示xyz信息。
5.修改权限,运行节点
chmod +x kitti.py
rosrun kitti_tutorial kitti2pcl.py