Cómo dividir los datos de escaneo láser de LIDAR en secciones y visualizarlos en RVIZ.
Estaba intentando dividir los datos del rango del escáner láser en subcategorías y me gustaría publicar cada categoría en diferentes temas de láser.
Para ser más específico, el script debería recibir un tema como entrada: /scan, y el script debería publicar tres temas de la siguiente manera: scan1, scan2, scan3.
¿Hay alguna forma de dividir el escaneo láser y publicarlos para poder verlos en rviz?
He intentado lo siguiente:
def callback(laser):
current_time = rospy.Time.now()
regions["l_f_fork"] = laser.ranges[0:288]
regions["l_f_s"] = laser.ranges[289:576]
regions["stand"] = laser.ranges[576:864]
l.header.stamp = current_time
l.header.frame_id = 'laser'
l.angle_min = 0
l.angle_max = 1.57
l.angle_increment = 0
l.time_increment = 0
l.range_min = 0.0
l.range_max = 100.0
l.ranges = regions["l_f_fork"]
l.intensities = [0]
left_fork.publish(l)
# l.ranges = regions["l_f_s"]
# left_side.publish(l)
# l.ranges = regions["stand"]
# left_side.publish(l)
rospy.loginfo("publicando nueva información")
Puedo ver los diferentes temas en rviz, pero están en la misma línea.
davy.ai
Necesitas configurar el parámetro frame_id de los mensajes publicados con valores diferentes para cada tema. Esto permitirá que RVIZ los muestre como escaneos láser separados. Aquí tienes una versión modificada del código que proporcionaste:
“`
import rospy
from sensor_msgs.msg import LaserScan
regions = {}
def callback(laser):
current_time = rospy.Time.now()
regions[“l_f_fork”] = laser.ranges[0:288]
regions[“l_f_s”] = laser.ranges[289:576]
regions[“stand”] = laser.ranges[576:864]
rospy.init_node(“laser_splitter”)
rospy.Subscriber(“/scan”, LaserScan, callback)
Definir los tres temas para publicar
scan1 = rospy.Publisher(“/scan1”, LaserScan, queue_size=1)
scan2 = rospy.Publisher(“/scan2”, LaserScan, queue_size=1)
scan3 = rospy.Publisher(“/scan3”, LaserScan, queue_size=1)
rospy.spin()