rospy rosaria AttributeError: 'list' object has no attribute 'x'

rospy rosaria AttributeError: 'list' object has no attribute 'x'

我正在尝试使用 RosAria 向 Pioneer P3-AT(编辑:3-AT 或 P3-AT,两个名称均已使用)发送命令。 我知道 RosAria 可以工作,因为当我在终端时,我可以使用以下命令移动机器人:

rostopic pub /RosAria/cmd_vel geometry_msgs/Twist '{linear: {x: 0.9, y: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}'

我现在正在尝试使用带有 rospy 的 python 脚本来移动机器人。 这是我发布速度命令的部分:

import rospy
from geometry_msgs.msg import Twist

topic = rospy.Publisher('/RosAria/cmd_vel', Twist, queue_size=10)
linear = [ 0, 0, 0 ]
angular = [ 0, 0, 0 ]
rospy.sleep(1) # waiting for subscribers
test = topic.publish(linear, angular)

这是错误信息(最重要的部分):

Traceback (most recent call last):
File "robotControl.py", line 32, in startServer
  test = topic.publish(linear, angular)
packages/geometry_msgs/msg/_Twist.py", line 71, in serialize
buff.write(_get_struct_6d().pack(_x.linear.x, _x.linear.y, _x.linear.z, _x.angular.x, _x.angular.y, _x.angular.z))

AttributeError: 'list' object has no attribute 'x'

当我使用集合或 numpy 数组时出现同样的错误。 如果我尝试以另一种格式(不是两个列表)发布值,它会给出一个错误,指出该格式不是预期的。 在任一列表中添加或删除条目也无法解决此错误。

所以我现在的问题是为什么它说我没有 x 值? 我是否需要使用向量(因为它们指定了 x、y 和 z 值)?

已解决:之前我使用了两个列表,但我查了一下,geometry_msgs/Twist 需要两个 geometry_msgs/Vector3 变量。我添加了这个导入:

from geometry_msgs.msg import Vector3

并将线性和 angular 声明更改为:

linear = Vector3(0.8, 0, 0)
angular = Vector3(0, 0, 0)
now it works like a charm!