как отобразить маркер ros в python?

#python #ros #rospy

#python #ros #rospy

Вопрос:

Я хочу показать 3D bbox в ROS с помощью Python. У меня есть 3D bbox координаты, и я хочу использовать маркер для отображения. Тем не менее, я добавил к маркеру несколько точек, которые были угловыми координатами, и опубликовал их, но я не увидел bbox , что не так с моим кодом?

Вот мой код:

 markers = MarkerArray()        
for i in range(len(self.bbox_data)):
     marker = Marker(type=Marker.LINE_LIST,ns='velodyne', action=Marker.ADD)
     marker.header.frame_id = "velodyne"
     marker.header.stamp = rospy.Time.now()
     if self.bbox_data[i][0][0] == frame:

     for n in range(8):
         point = geom_msg.Point(self.bbox_data[i][n 1][0],self.bbox_data[i][n 1][1],self.bbox_data[i][n 1][1])
         marker.points.append(point)

     marker.scale.x = 0.02
     marker.lifetime = rospy.Duration.from_sec(0.1)
     marker.color.a = 1.0
     marker.color.r = 0.5
     marker.color.g = 0.5 
     marker.color.b = 0.5    
     markers.markers.append(marker)

self.bbox.publish(markers)
  

где

 (self.bbox_data[i][n 1][0],self.bbox_data[i][n 1][1],self.bbox_data[i][n 1][2])
  

является

 (x,y,z)
  

Ответ №1:

Когда вы говорите

но я не видел bbox

что именно вы имеете в виду? Вы вообще ничего не видите или просто пару параллельных линий или что-то еще?

В вашем коде есть одна небольшая ошибка, создающая сообщение point. Вы добавляете x, y, y значения вместо x, y, z.

Однако вы также неправильно создаете набор строк, описывающих ограничивающую рамку. В bbox_data отображается список из 8 угловых точек ограничивающей рамки, вам нужно определить 12 граничных линий, соединяющих эти точки, чтобы они были нарисованы в RVIZ. Маркеру line_list нужны две точки для определения каждой строки, поскольку не существует простого алгоритма сопоставления 8 точек с 24 начальными и конечными точками, которые вам нужно добавить к сообщению о маркере, поэтому вам, возможно, придется жестко закодировать эту часть.

Эти две ошибки вполне могут сочетаться таким образом, что вы ничего не видите на экране, но, надеюсь, это поможет вам это исправить.