Я пытался получить изображение для публикации в ROS (используя Python/rospy), и, хотя я думаю, что у меня есть метод, мне сложно его подтвердить. ИспользованиеПодтверждение изображения опубликовано в ROS
rosrun image_view image_view image:=(topic)
, похоже, ничего не показывает. Я также пробовал rqtbag, но я действительно не знаю, как это работает, кроме того, что в любом случае не публикуется опубликованное.
Несколько замечаний, прежде чем вставить мой текущий код:
- код я использую сейчас базируется кода я получил работу ранее. Я использовал аналогичную настройку для отправки текстовых изображений в ROS, и эти результаты достаточно надежно.
- Это немного изменено здесь. Большая часть этого кода является частью функции
on_message
, так как все это выполняется через MQTT при ее реализации. (Логика - получение изображения на одной системе -> encode it -> передача в другую систему -> декодирование -> публикация в ROS.) - Я использую Python 2.7 на Ubuntu и ROS Indigo.
Не мудрствуя лукаво, мой текущий код для публикации:
rospy.init_node('BringInAnImage', log_level = rospy.INFO)
def convert(messagepayload):
t = open('newpic.bmp','w')
t.write(messagepayload)
t.close()
def on_message(client, userdata, msg):
img = base64.b64decode(msg.payload)
convert(img)
time.sleep(5)
source = cv2.imread('newpic.bmp') #this should be a mat file
# talk to ROS
bridge = CvBridge()
pub2 = rospy.Publisher('/BringInAnImage', Image, queue_size = 10)
pub2.publish(bridge.cv2_to_imgmsg(source, "bgr8"))
print "uh..... done??"
Я использую основную функцию прослушивания, чтобы попробовать и посмотреть, что происходит (это в другой сценарий я выполнить в отдельный терминал):
def listener():
rospy.init_node('listener', anonymous=True)
rospy.Subscriber("/BringInAnImage", Image, callback)
rospy.spin()
if __name__ == '__main__':
listener()
Обратный звонок только распечатывает, что изображение получено.