来自点云的XYZ

时间:2019-04-03 12:58:19

标签: ros point-cloud-library

我正在将ros节点用于ensenso相机。我要从中读取点云数据,该数据以消息类型PointCloud2发布在/ point_cloud主题上,并将其转换为可用于声明机器人目标的数据。

我尝试使用

sensor_msgs.point_cloud2.read_points(pointCloud, 
                                    field_names=pointCloud.data, 
                                    skip_nans=True)

实际上是从脚本point_cloud2.py返回三个值,我知道它们实际上是x,y和z坐标。问题是这些是浮点数,其值小于1。

我还尝试直接读取pointCloud.data中的数据,但是这导致原始的未排序数据无法应用。

    def point_cloud_callback(self, pc_msg):
        rospy.logdebug("Get a point cloud")
        if self._msg_lock.acquire(False): 
            self._last_point_cloud_msg = pc_msg
            self._msg_lock.release()

    def print_pc(self):
        pointCloud = self._last_point_cloud_msg

        for point in sensor_msgs.point_cloud2.read_points(pointCloud,
                            field_names=pointCloud.data, 
                            skip_nans=True):
            pt_x = point[0]
            pt_y = point[1]
            pt_z = point[2]
            print pt_x, pt_y, pt_z

def main():
    rospy.init_node("simple_pc_subscriber")
    node = pc_subscriber()
    rate = rospy.Rate(1)
    while not rospy.is_shutdown():
        node.print_pc()
        rate.sleep()

if __name__ == '__main__':
    main()

我得到的结果是0到1之间的浮点型。我期望基于它们重合的像素来获得坐标。相机的分辨率为1280 * 1080,我希望这是x和y值,并且对于每个像素,代表Z坐标的深度值可用于确定对象的位置。

0 个答案:

没有答案