我一直在尝试将图像发布到 ROS(使用 Python/rospy),虽然我认为我的方法是正确的,但我很难确认它。使用
rosrun image_view image_view image:=(topic)
似乎没有显示任何东西。我也尝试过 rqtbag,但我真的不知道那个东西是如何工作的,除了它没有显示发布的东西,无论如何。
粘贴我当前的代码之前的一些注意事项:
- 我现在使用的代码是基于我以前工作的代码。我使用类似的设置将文本图像发布到 ROS,并且这些输出相当可靠。
- 此处稍作修改。大部分代码都是
on_message
函数的一部分,因为这一切在实现时都通过 MQTT 运行。(逻辑是在一个系统上获取图像 -> 对其进行编码 -> 传输到另一个系统 -> 解码 -> 发布到 ROS。) - 我在 Ubuntu 和 ROS Indigo 上使用 Python 2.7。
事不宜迟,我当前的发布代码:
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()
回调只是打印出图像已收到。