2016-07-04 11 views
5

मैं "/camera/depth/points" विषय और PointCloud2 पर एएसयूएस एक्सशन प्रो लाइव कैमरे के साथ एक कछुए (गहरी सीखने के संस्करण) पर संदेश भेज रहा हूं।टर्टलबॉट ग्राहक पॉइंटक्लाउड 2 गैज़बो सिम्युलेटर में रंग दिखाता है लेकिन रोबोट में नहीं

मैंने गैज़बो सिम्युलेटर पर्यावरण के नीचे नीचे पाइथन लिपि का उपयोग किया है और मैं सफलतापूर्वक एक्स, वाई, जेड और आरजीबी मान प्राप्त कर सकता हूं।

हालांकि, जब मैं इसे रोबोट में चलाता हूं, तो आरजीबी मान गुम हैं।

क्या यह मेरे कछुए संस्करण, या कैमरा की समस्या है या यह है कि मुझे कहीं निर्दिष्ट करना है कि मैं 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 प्रो LIVE – fartagaintuxedo

+0

मैं मैं 'की कोशिश की है गहराई-registered' रूप में अच्छी तरह लगता है, लेकिन मैं अब याद नहीं कर सकते, मैं एक बार यह जाँच करेगा – fartagaintuxedo

+0

यह: इसका इस्तेमाल करने के लिए, अपने नए listener() कोड कुछ इस तरह दिखना चाहिए मदद कर सकता है, मैंने ओपननी के साथ प्रयास किया है लेकिन इसे गहराई से पंजीकृत करने के लिए भी काम नहीं कर सका। लेकिन मुझे नहीं लगता कि मैंने आपके लिंक 'गहराई_registration: = true' में दर्शाए गए पैरामीटर को सेट किया है, इसलिए मैं कल सुबह यह कोशिश करूंगा। 1 प्रश्न, सबसे सामान्य दृष्टिकोण के लिए ओपननी का उपयोग कर रहा है? – fartagaintuxedo

उत्तर

2

प्रकाशित विषयों की सामग्री उन सॉफ़्टवेयर द्वारा निर्धारित की जाती है जो उन्हें प्रदान करती हैं - यानी आपके कैमरे के लिए ड्राइवर। इसे ठीक करने के लिए आपको सही ड्राइवर प्राप्त करने और उस विषय का उपयोग करने की आवश्यकता है जिसमें यह आवश्यक जानकारी है।

आप ROS wiki पर या कुछ समुदाय वेबसाइटों पर अपने कैमरों के लिए अनुशंसित ड्राइवर ढूंढ सकते हैं - जैसे this। आपके मामले में, ASUS उपकरणों को openni2 का उपयोग करना चाहिए और depth_registration:=true सेट करना चाहिए - दस्तावेज here के रूप में।

इस बिंदु पर, /camera/depth_registered/points अब संयुक्त xyz और आरजीबी बिंदु क्लाउड दिखाएगा।

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() 
संबंधित मुद्दे