2016-07-04 61 views
5

Ich abonniere das Thema "/camera/depth/points" und die Nachricht PointCloud2 auf einem Turtlebot (Deep Learning-Version) mit ASUS Xtion PRO LIVE-Kamera.Turtlebot-Teilnehmer pointcloud2 zeigt Farbe im Gazebo-Simulator, aber nicht im Roboter

Ich habe das Python-Skript unten unter der Gazebo Simulator-Umgebung verwendet und ich kann x, y, z und rgb Werte erfolgreich erhalten.

Wenn ich es jedoch im Roboter laufen lasse, fehlen die rgb-Werte.

Ist das ein Problem meiner Turtlebot-Version oder Kamera oder muss ich irgendwo angeben, dass ich PointCloud2 type="XYZRGB" erhalten möchte? oder ist es ein Synchronisierungsproblem? Irgendwelche Hinweise bitte danke!

#!/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

Ich denke, ich versucht habe 'Tiefen registered' als gut, aber ich kann nicht mehr erinnern, ich werde dies überprüfen, sobald – fartagaintuxedo

+0

Dieses könnte helfen, ich habe versucht mit openni aber konnte es nicht zum arbeiten nicht einmal mit der Tiefe registriert. Aber ich denke nicht, dass ich den Parameter wie in Ihrem Link 'depth_registration: = true' angegeben habe, also werde ich das morgen früh versuchen. 1 Frage, verwendet Openni für diese den normalsten Ansatz? – fartagaintuxedo

Antwort

2

Der Inhalt der Veröffentlichten Themen wird von der Software bestimmt, die sie bereitstellt - also die Treiber für Ihre Kamera. Um dies zu beheben, müssen Sie daher den richtigen Treiber finden und das Thema verwenden, das die erforderlichen Informationen enthält.

Sie finden empfohlene Treiber für Ihre Kameras auf der ROS wiki oder auf einigen Community-Websites - wie this. In Ihrem Fall sollten die ASUS-Geräte openni2 verwenden und depth_registration:=true setzen - wie dokumentiert here.

An dieser Stelle sollte /camera/depth_registered/points jetzt die kombinierte XYZ- und RGB-Punktwolke anzeigen. Um es zu nutzen, Ihr neuer listener() Code soll wie folgt aussehen:

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()