2016-07-04 41 views
5

Zapisuję się w temacie "/camera/depth/points" i wiadomości PointCloud2 na turtlebot (wersja do nauki głębokiego uczenia się) z kamerą ASUS Xtion PRO LIVE.Turtlebot subskrybent pointcloud2 pokazuje kolor w symulatorze Gazebo, ale nie w robocie

Użyłem poniższego skryptu Pythona w środowisku symulatora altan i mogę pomyślnie odbierać wartości x, y, z i rgb.

Jednak po uruchomieniu go w robocie brakuje wartości rgb.

Czy jest to problem z moją wersją turbo lub aparatem fotograficznym, czy też muszę podać gdzieś, że chcę otrzymać PointCloud2 type="XYZRGB"? lub czy jest to problem z synchronizacją? Wszelkie wskazówki proszę dzięki!

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

myślę Próbowałem 'głębokość-zarejestrowana, jak dobrze, ale ja nie pamiętam teraz, będzie to sprawdzić raz – fartagaintuxedo

+0

ten może pomóc, próbowałem z openni, ale nie mogłem go uruchomić nawet przy użyciu rejestrowania głębokości. Ale nie sądzę, ustawić parametr jak wskazano w twoim linku 'depth_registration: = true', więc spróbuję tego jutro rano. 1 pytanie, używa openni do tego najbardziej normalnego podejścia? – fartagaintuxedo

Odpowiedz

2

Zawartość publikowanych tematów jest określana przez oprogramowanie, które je zapewnia - tj. Sterowniki do aparatu. Aby to naprawić, musisz uzyskać odpowiedni sterownik i użyć tematu, który zawiera wymagane informacje.

Można znaleźć zalecane sterowniki do kamer na stronie ROS wiki lub na niektórych witrynach społeczności - takich jak this. W twoim przypadku urządzenia ASUS powinny używać openni2 i ustawić depth_registration:=true - zgodnie z dokumentacją here.

W tym momencie /camera/depth_registered/points powinna teraz pokazać połączoną chmurę punktów xyz i RGB. Aby z niego skorzystać, nowy kod listener() powinien wyglądać mniej więcej tak:

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