2015-09-22 4 views
0

Я пытался получить изображение для публикации в ROS (используя Python/rospy), и, хотя я думаю, что у меня есть метод, мне сложно его подтвердить. ИспользованиеПодтверждение изображения опубликовано в ROS

rosrun image_view image_view image:=(topic) 

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

Несколько замечаний, прежде чем вставить мой текущий код:

  1. код я использую сейчас базируется кода я получил работу ранее. Я использовал аналогичную настройку для отправки текстовых изображений в ROS, и эти результаты достаточно надежно.
  2. Это немного изменено здесь. Большая часть этого кода является частью функции on_message, так как все это выполняется через MQTT при ее реализации. (Логика - получение изображения на одной системе -> encode it -> передача в другую систему -> декодирование -> публикация в ROS.)
  3. Я использую 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() 

Обратный звонок только распечатывает, что изображение получено.

ответ

1

Как проверить, если что-то опубликовано на тему А

Чтобы проверить, если сообщение действительно опубликовано, вы можете использовать команду rostopic. Запустите следующее в терминале, чтобы распечатать все, что опубликовано в указанной теме. Это самый простой способ проверить, что что-то опубликовано.

rostopic echo <topic_name> 

Смотрите ROS wiki для более полезных вещей rostopic может сделать.

Почему изображение не получено images_view?

Если вы делаете это в основном правильно, ваши изображения не будут получены ни одним подписчиком для не столь очевидной, но фатальной проблемы в вашем коде: вы используете издателя (pub2) сразу после его инициализации. Подписчикам нужно время, чтобы зарегистрироваться в новом издателе и не будут готовы, прежде чем опубликовать изображение (см. Также this answer).

➔ Не инициализируйте издателя незадолго до того, как он вам понадобится, но сделайте это прямо в начале при инициализации узла.

Смежные вопросы