2016-07-04 6 views
5

Подписываюсь на тему "/camera/depth/points" и сообщение PointCloud2 на turtlebot (глубокая обучающая версия) с камерой ASUS Xtion PRO LIVE.Пользователь Turtlebot pointcloud2 показывает цвет в симуляторе Gazebo, но не в роботе

Я использовал сценарий python ниже в среде симулятора беседки, и я могу успешно получить значения x, y, z и rgb.

Однако, когда я запускаю его в роботе, значения rgb отсутствуют.

Является ли это проблемой моей версии turtlebot, или камеры, или это то, что я должен указать где-нибудь, что я хочу получить PointCloud2 type="XYZRGB"? или это проблема синхронизации? Любые подсказки, пожалуйста, спасибо!

#!/usr/bin/env python 
import rospy 
import struct 
import ctypes 
import sensor_msgs.point_cloud2 as pc2 
from sensor_msgs.msg import PointCloud2 

file = open('workfile.txt', 'w') 

def callback(msg): 

    data_out = pc2.read_points(msg, skip_nans=True) 

    loop = True 
    while loop: 
     try: 
      int_data = next(data_out) 
      s = struct.pack('>f' ,int_data[3]) 
      i = struct.unpack('>l',s)[0] 
      pack = ctypes.c_uint32(i).value 

      r = (pack & 0x00FF0000)>> 16 
      g = (pack & 0x0000FF00)>> 8 
      b = (pack & 0x000000FF) 

      file.write(str(int_data[0])+","+str(int_data[1])+","+str(int_data[2])+","+str(r)+","+str(g)+","+str(b)+"\n") 

     except Exception as e: 
      rospy.loginfo(e.message) 
      loop = False 
      file.flush 
      file.close 

def listener(): 

    rospy.init_node('writeCloudsToFile', anonymous=True) 
    rospy.Subscriber("/camera/depth/points", PointCloud2, callback) 
    rospy.spin() 

if __name__ == '__main__': 
    listener() 
+0

ASUS Xtion PRO ЖИВОЙ – fartagaintuxedo

+0

Я думаю, что я попробовал 'глубины registered' как хорошо, но я не могу вспомнить сейчас, я буду проверять один раз – fartagaintuxedo

+0

этот может помочь, я пробовал с openni, но не мог заставить его работать, даже не используя глубину регистрации. Но я не думаю, что я установил параметр, как указано в вашей ссылке 'depth_регистрация: = true', поэтому я попробую это завтра утром. 1 вопрос, использует openni для этого самый обычный подход? – fartagaintuxedo

ответ

2

Содержимое опубликованных тем определяется программным обеспечением, которое их предоставляет, то есть драйверами для вашей камеры. Чтобы исправить это, вам необходимо получить правильный драйвер и использовать указанную в нем тему, которая содержит необходимую информацию.

Вы можете найти рекомендуемые драйверы для своих камер на ROS wiki или на некоторых сайтах сообщества - например, this. В вашем случае устройства ASUS должны использовать openni2 и установить depth_registration:=true - как описано в документе here.

На данный момент /camera/depth_registered/points должен теперь показать объединенное облако точек xyz и RGB. Для того, чтобы использовать его, ваш новый listener() код должен выглядеть примерно так:

def listener(): 
    rospy.init_node('writeCloudsToFile', anonymous=True) 
    # Note the change to the topic name 
    rospy.Subscriber("/camera/depth_registered/points", PointCloud2, callback) 
    rospy.spin()