es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se corrige un mensaje personalizado en ROS que no se puede suscribir?

import hdbscan
import rospy
from rospy.core import rospyinfo
from sensor_msgs.msg import PointCloud, PointCloud2
import numpy as np
import pcl
import ros_numpy
import time
from hdbscan_py.msg import cluster_list

rospy.init_node(‘hdbscan’)

Utilizando los datos para el agrupamiento

def callback(data):
tstart = time.time()
pc = ros_numpy.numpify(data)
points=np.zeros((pc.shape[0], 3))
points[:,0]=pc[‘x’]
points[:,1]=pc[‘y’]
points[:,2]=pc[‘z’]
p = pcl.PointCloud(np.array(points, dtype=np.float32))

# Utilizando los puntos de PointCloud generados para pasar por HDBSCAN
clusterer = hdbscan.HDBSCAN(min_cluster_size=15, min_samples=1, alpha=1.3).fit(p)
cluster_labels = clusterer.fit_predict(p)

# cloudpoints =
# rospy.loginfo(cluster_labels)
tstop = time.time()

talker(cluster_labels, p)
rospy.loginfo(tstop-tstart)

def talker(cluster_labels, p):
pubClusters = rospy.Publisher(‘clusters’, cluster_list, queue_size=1)
cluster_list_msg = cluster_list()
# cluster=[]
for cluster_index in range(np.size(p)):
cluster_list_msg.clusters[cluster_labels[cluster_index]].append(p[cluster_index])

rospy.loginfo('Test')
pubClusters.publish(cluster_list_msg)

Suscribiéndose a los datos del sensor

def listener():
rospy.Subscriber(‘/wamv/sensors/lidars/lidar_wamv/points’, PointCloud2, callback)
rospy.spin()

if name==’main‘:
listener()

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que el objeto “cluster_list” no es subscriptable, lo que significa que no se puede acceder a él como una lista con corchetes cuadrados. Esto sugiere que puede haber un problema con la forma en que se está utilizando el objeto “cluster_list” en la función “talker”.

    Una posibilidad es que “cluster_list” sea un tipo de mensaje personalizado que no admita el indizado. En este caso, podría intentar utilizar una estructura de datos diferente, como un diccionario o una lista de listas, para almacenar los grupos.

    Alternativamente, si “cluster_list” admite el indizado pero la sintaxis utilizada en la función “talker” es incorrecta, es posible que deba revisar el código para utilizar la sintaxis correcta para acceder y agregar al objeto “cluster_list”.

    En general, es difícil proporcionar una solución más específica sin más información sobre el objeto “cluster_list” y su uso previsto. Puede ser útil revisar la documentación de ROS sobre tipos de mensaje personalizados y la transmisión de mensajes para asegurarse de que el código esté utilizando la sintaxis y las estructuras de datos correctas.

Comments are closed.