ROS で配列を Publish したかったときに詰まったので共有します
最初はC++ の書き方を真似てこうすればいけるやろ!
ってやると...
import rospy
from std_msgs.msg import Float32MultiArray
def talker():
pub = rospy.Publisher('/hoge', Float32MultiArray, queue_size=10)
array=Float32MultiArray()
array.data.resize(5)
i=0
for p in range(5):
array.data[i]=p
i+=1
pub.publish(array)
AttributeError: 'list' object has no attribute 'resize'
と怒られました.
2020/12/20 追記
こちらのコメントでご指摘を受けているように,
このコードではPythonのList型がresize
という関数を持っていないため,エラーになっています.
この間違いはC++とPythonの型の違いに起因しています.
C++ではfloat32[]型で定義されていて,resize関数を使って配列長を拡張してからデータを入れる必要があるのに対し,
PythonではList型が使用されているため,配列長に影響されず,append関数で要素を追加することができる.
という感じになっています.
正解の文こちら
動作するものは以下
import rospy
from std_msgs.msg import Float32MultiArray
def talker():
pub = rospy.Publisher('/hoge', Float32MultiArray, queue_size=10)
array=[]
for p in range(5):
array.append(p)
array_forPublish = Float32MultiArray(data=array)
pub.publish(array_forPublish)
一度List型にぶちこんでから MultiArray に変換するといけます