我試圖用python腳本發布一個實時視頻。
#!/usr/bin/env python3。
import rospy
from sensor_msgs import msg
import cv2
from sensor_msgs.msg import Image
def takes_data_from_camera()。
rate = rospy.Rate(10)
vid = cv2.VideoCapture(0)
while not rospy.is_shutdown()。
ret, frame = vid.read()
#video_bridge = bridge.cv2_to_imgmsg(frame, "passsthrough")
pub.pub.publish(frame)
if cv2.waitKey(1) & 0xFF == ord('q')。
vid.release()
cv2.destroyAllWindows()
break: vid.release()
if __name__ == '__main__'/span>:
rospy.init_node('Server',anonymous = True)
pub = rospy.Publisher('TestOps/Camera', Image, queue_size=10)
takes_data_from_camera()
但是當我試圖運行時,我得到了以下錯誤
File "/home/akash-j/catkin_ws/src/test_package/src/py-server. py",行19,in takes_data_from_camera
pub.pub.publish(frame)
檔案 "/opt/ros/noetic/lib/python3/dist-packages/rospy/topics.py", line 879, in publish
data = args_kwds_to_message(self.data_class, args, kwds)
檔案 "/opt/ros/noetic/lib/python3/dist-packages/rospy/msg.py", line 122, in args_kwds_to_message
return data_class(*args)
檔案 "/opt/ros/noetic/lib/python3/dist-packages/sensor_msgs/msg/_Image.py", line 77, in __init__
super(Image, self).__init__(*args, **kwds)
檔案 "/opt/ros/noetic/lib/python3/dist-packages/genpy/message.py", line 354, in __init__
raise TypeError('Invalid number of arguments, args should be %s' % str(self. __slots__) ' args are' str(args))
TypeError: 引數數量無效,args應該是['header', 'height', 'width', 'encoding'。'is_bigendian', 'step', 'data'] args是(array([[209, 200, 193]。
我不知道這里出了什么問題,我不想使用cv bridge。代碼在cv bridge下運行良好。我使用ubuntu 20和ros noetic以及python 3
。uj5u.com熱心網友回復:
影像訊息型別希望有以下的資料結構。
>>> from sensor_msgs.msg importImage
>>> Image.__slots__。
['header'/span>, 'height'/span>, 'width'/span>, 'encoding'/span>, 'is_bigendian'/span>, 'step'/span>, 'data'/span>]
>>> Image._slot_types
['std_msgs/Header', 'uint32', 'uint32', 'string', 'uint8', 'uint32', 'uint8[] ' ]
而且看起來只有視頻的 "資料 "幀被發布了。
pub.pub(frame)
希望這足以讓你進一步排除故障
。轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/328646.html
標籤:
