2016-07-04 21 views
5

Tôi đang đăng ký chủ đề "/camera/depth/points" và nhắn PointCloud2 trên rùa (phiên bản học sâu) với máy ảnh ASUS Xtion PRO LIVE.Thuê bao Turtlebot pointcloud2 hiển thị màu trong trình mô phỏng Gazebo nhưng không có trong robot

Tôi đã sử dụng tập lệnh python bên dưới môi trường mô phỏng gazebo và tôi có thể nhận được các giá trị x, y, z và rgb thành công.

Tuy nhiên, khi tôi chạy nó trong rô bốt, giá trị rgb bị thiếu.

Đây có phải là vấn đề của phiên bản rùa, hoặc máy ảnh của tôi hoặc là tôi phải chỉ định một nơi nào đó mà tôi muốn nhận được PointCloud2 type="XYZRGB"? hoặc là một vấn đề đồng bộ? Bất kỳ manh mối nào xin cảm ơn!

#!/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 Live – fartagaintuxedo

+0

Tôi nghĩ rằng tôi đã cố gắng 'sâu-registered' cũng nhưng tôi không thể nhớ bây giờ, tôi sẽ kiểm tra điều này một lần – fartagaintuxedo

+0

này có thể giúp đỡ, tôi đã thử với openni nhưng không thể làm cho nó hoạt động thậm chí không sử dụng độ sâu đăng ký. Nhưng tôi không nghĩ rằng tôi đặt tham số như được chỉ ra trong liên kết của bạn 'depth_registration: = true' vì vậy tôi sẽ cố gắng vào sáng ngày mai. 1 câu hỏi, đang sử dụng openni cho phương pháp này bình thường nhất? – fartagaintuxedo

Trả lời

2

Nội dung của chủ đề đã xuất bản được xác định bằng phần mềm cung cấp cho họ - tức là trình điều khiển cho máy ảnh của bạn. Để khắc phục điều này, bạn cần phải có được trình điều khiển phù hợp và sử dụng chủ đề mà nó nói có chứa các thông tin cần thiết.

Bạn có thể tìm thấy các trình điều khiển được đề xuất cho máy ảnh của mình trên ROS wiki hoặc trên một số trang web cộng đồng - như this. Trong trường hợp của bạn, các thiết bị ASUS nên sử dụng openni2 và đặt depth_registration:=true - như được ghi trong tài liệu here.

Tại thời điểm này, /camera/depth_registered/points bây giờ sẽ hiển thị đám mây điểm xyz và RGB kết hợp. Để sử dụng nó, listener() mã mới của bạn sẽ giống như thế này:

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() 
Các vấn đề liên quan