我正在将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坐标的深度值可用于确定对象的位置。