#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 начальными и конечными точками, которые вам нужно добавить к сообщению о маркере, поэтому вам, возможно, придется жестко закодировать эту часть.
Эти две ошибки вполне могут сочетаться таким образом, что вы ничего не видите на экране, но, надеюсь, это поможет вам это исправить.