这是对于任何从事ROS工作的人的理想解决方案。我将解决方案分为两个部分 - 一、将其存储为ROS bag文件(用于存储来自ROS主题的任何类型的数据的便捷工具);二、将rosbag文件写入pcd文件。现在这非常简单。
(参考文献:
http://wiki.ros.org/Bags)
A)将数据存储在BAG文件中(ROS文件类型)
首先将数据(任何类型的数据都可以存储)存储为ROSBAG。 ROSBAG仅记录主题的数据。
1.要开始使用kinect,请打开终端并运行:
$roslaunch kinect2_bridge kinect2_bridge.launch publish_tf:=true
这将让ROS系统开始从Kinect获取数据。您应该看到系统启动并显示“等待客户端连接”的状态。
2.要查看点云,请打开一个新终端。运行:
$ rosrun kinect2_viewer kinect2_viewer sd cloud
您将看到一个新窗口弹出,显示点云视图。这里是解释kinect2_viewer函数参数的链接:https://github.com/code-iai/iai_kinect2/tree/master/kinect2_viewer
3.要记录数据,在新终端中运行:
$ rosbag record -O pcl_sample1.bag -a
在这里,“-a”表示您将订阅所有可用的ros主题并记录它们的数据。当您认为数据足够时,可以通过ctrl-C停止它。数据将存储在.bag文件中,这里的名称是name.bag。更多设置可以在此处找到:
http://wiki.ros.org/rosbag/Commandline#record
现在拔掉Kinect。bag文件包含了通过启动kinect2_bridge运行的所有主题的数据。现在,您可以像实际插入Kinect一样使用主题数据。
4. 要回放数据,您需要停止第一个终端(即启动文件)中的程序。然后运行:
$ roscore
这将启动一个ROS服务器。然后在另一个终端中运行以下命令:
播放bag文件:
$ rosbag play pcl_sample1.bag
这将使ROS系统回放您刚刚记录的数据,就好像设备仍在工作一样。然后,您可以使用kinect2_viewer查看数据,例如:
运行任何与Kinect实际插入时相同的命令。
$ rosrun kinect2_viewer kinect2_viewer sd cloud
注意:如果您想记录特定主题,请访问http://wiki.ros.org/Bags。
B) 将BAG转换为PCD文件:(现在只需一个命令。)
将适当的主题写入相应的文件夹:
rosrun pcl_ros bag_to_pcd pcl_sample1.bag /kinect2/sd/image_color_rect src/
rosrun pcl_ros bag_to_pcd pcl_sample1.bag /kinect2/sd/image_depth_rect src/PCD\ Files/