如何在ROS python中使用Twist()将海龟旋转两次使其形成不同的圆?



我想在圆中移动海龟两次制作两个不同的圆,我使用Twist()但是当我为同一个出版商提供两个不同的扭曲和值时,只有一个是发布的,即使我尝试使用两个不同的出版商,但得到相同的输出。所以谁都可以告诉我如何用两个不同的值发布Twist()。

pub = rospy.Publisher('turtle1/cmd_vel', Twist, queue_size=10)
pub_1 = rospy.Publisher('turtle1/cmd_vel', Twist, queue_size=10)
# Create a Twist message and add linear x and angular z values
move_cmd = Twist()
move_cmd.linear.x =   1.0
move_cmd.linear.y =   0.0
move_cmd.angular.z = -1.0
move_cmd_1 = Twist()
move_cmd_1.linear.x =  1.0
move_cmd_1.linear.y =  0.0
move_cmd_1.angular.z = 1.0
# Save current time and set publish rate at 10 Hz
now = rospy.Time.now()
rate = rospy.Rate(10)
# For the next 6 seconds publish cmd_vel move commands to Turtlesim
while rospy.Time.now() < now + rospy.Duration.from_sec(10.5):
pub.publish(move_cmd_1)
pub_1.publish(move_cmd_1)
rate.sleep()

这里的代码有几处错误。首先,你实际上是在两个发布者上发布相同的消息。其次,像这样在同一主题上连续发布两个值并不是一个好主意。如果订阅者缓存的是最近的值,那么它很有可能只会看到/使用发布的第二个值。如果您正在尝试交替使用,请尝试使用下面的代码。注意,我降低了旋转速率,并且每个循环的发布者是交替的。

pub = rospy.Publisher('turtle1/cmd_vel', Twist, queue_size=10)
# Create a Twist message and add linear x and angular z values
move_cmd = Twist()
move_cmd.linear.x =   1.0
move_cmd.linear.y =   0.0
move_cmd.angular.z = -1.0
move_cmd_1 = Twist()
move_cmd_1.linear.x =  1.0
move_cmd_1.linear.y =  0.0
move_cmd_1.angular.z = 1.0
# Save current time and set publish rate at 10 Hz
now = rospy.Time.now()
rate = rospy.Rate(3)
loop_count = 0
# For the next 6 seconds publish cmd_vel move commands to Turtlesim
while rospy.Time.now() < now + rospy.Duration.from_sec(10.5):
if loop_count % 2 == 0:
pub.publish(move_cmd)
else:
pub.publish(move_cmd_1)
loop_count += 1
rate.sleep()

最新更新