我正在尝试通过Julia RobotOS.jl包发布sensor_msgs / PointCloud2。但是,出现以下错误。
PyError ($(Expr(:escape, :(ccall(#= /home/comrob/.julia/packages/PyCall/ttONZ/src/pyfncall.jl:44 =# @pysym(:PyObject_Call), PyPtr, (PyPtr, PyPtr, PyPtr), o, pyargsptr, kw))))) <class 'rospy.exceptions.ROSSerializationException'>
ROSSerializationException('field data must be a list or tuple type',)
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/topics.py", line 886, in publish
raise ROSSerializationException(str(e))
我将代码简化为一个最小的示例,试图从订阅的主题重新发布pc2。
using RobotOS
@rosimport sensor_msgs.msg: PointCloud2
rostypegen()
using .sensor_msgs.msg
function callback(msg::PointCloud2, pub::Publisher{PointCloud2})
try
println("Received pc2 msg.")
publish(pub, msg)
println("Republished pc2 msg.")
catch e
println("pc2 callback exception: ", e)
end
end
init_node("pc2_example")
pub = Publisher{PointCloud2}("/terrain/elevation", queue_size=1)
sub = Subscriber{PointCloud2}("/camerad/depth/color/points_throttle", callback, (pub,), queue_size=1)
spin()
仅当有内容订阅“ / terrain / elevation”主题时,才会出现错误。否则,代码将运行而不会出现任何错误,尽管我实际上必须手动捕获回调中发生的任何错误,否则它们不会被打印出来。
订阅的主题中的pc2消息是从rosbag播放的,rosbag是从RealSense D435记录的。我没有在使用Julia,Python或C ++解析这些点云时遇到任何重大问题,因此消息应该没问题。无论如何,我最初在尝试发布自己的一些pc2消息时遇到了问题,并且仅尝试重新发布以确保消息本身是有效的。
有什么主意要怎么做吗?