2016-07-04 6 views
5

Mi iscrivo all'argomento "/camera/depth/points" e al messaggio PointCloud2 su un turtlebot (versione deep learning) con videocamera ASUS Xtion PRO LIVE.Sottotitoli Turtlebot pointcloud2 mostra il colore nel simulatore Gazebo ma non nel robot

Ho usato lo script python sotto l'ambiente del simulatore gazebo e posso ricevere correttamente i valori x, y, z e rgb.

Tuttavia, quando lo eseguo nel robot, mancano i valori di rgb.

Si tratta di un problema della versione turtlebot o della fotocamera o devo specificare da qualche parte che desidero ricevere PointCloud2 type="XYZRGB"? o è un problema di sincronizzazione? Qualsiasi indizio grazie, grazie!

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

+0

credo di aver provato 'profondità iscritto il come pure, ma non ricordo ora, controllerò questa volta – fartagaintuxedo

+0

Questo potrebbe essere d'aiuto, ho provato con openni ma non sono riuscito a farlo funzionare nemmeno usando la profondità registrata. Ma non penso di aver impostato il parametro come indicato nel tuo link 'depth_registration: = true' quindi proverò questo domani mattina. 1 domanda, sta usando openni per questo l'approccio più normale? – fartagaintuxedo

risposta

2

I contenuti degli argomenti pubblicati sono determinati dal software che li fornisce, ovvero i driver per la fotocamera. Per risolvere questo problema, è necessario ottenere il driver corretto e utilizzare l'argomento che contiene le informazioni richieste.

È possibile trovare i driver consigliati per le proprie telecamere su ROS wiki o su alcuni siti Web della comunità, ad esempio this. Nel tuo caso, i dispositivi ASUS dovrebbero usare openni2 e impostare depth_registration:=true - come documentato here.

A questo punto, /camera/depth_registered/points ora dovrebbe mostrare la nuvola di punti combinata xyz e RGB. Per usarlo, il nuovo codice listener() dovrebbe essere simile a questo:

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