перемещение черепахи по кругу и остановка ее в начальной позиции как узла ros?

#python #python-2.7 #ubuntu-18.04 #ros

#python #python-2.7 #ubuntu-18.04 #ros

Вопрос:

Я запустил приведенный ниже код, используя команду rosrun в качестве узла, но больше не работает по кругу. Но в этой функции нет ошибки. Как это решить и запустить по кругу и остановиться в исходном положении?

ROS: мелодичный Ubuntu 18.04

 #!/usr/bin/env python
import rospy
import rospkg
from geometry_msgs.msg import Twist
from turtlesim.msg import Pose
#defining variables
x = 0
y = 0
theta = 0.0
    
#main function  
def pose_callback(msg):
    global x, y, psi
    x = msg.x
    y = msg.y
    psi = msg.theta
    print(msg.theta)
if __name__=="__main__":

    
    rospy.init_node('node_turtle_revolve', anonymous = True)
    r = rospy.Rate(10)
    velocity_publisher = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10) 
    
    while not rospy.is_shutdown():
        
    sub = rospy.Subscriber('/turtle1/pose', Pose, pose_callback)
        vel_msg = Twist()
    vel_msg.linear.x = 0.2
    vel_msg.linear.x = 0.0
    vel_msg.linear.x = 0.0
    vel_msg.angular.x= 0.0
    vel_msg.angular.y= 0.0
    vel_msg.angular.z= 0.1
    velocity_publisher.publish(vel_msg)
    r.sleep
  

Комментарии:

1. Отсутствует пробел if__name__=="__main__": , который должен быть if __name__=="__main__":

2. да, я исправил это, но теперь черепаха движется в том же положении, а не по кругу

3. vel_msg.linear.x = 0.0 ??

4. Положение остановки vel_msg.linear.x = 0.0

5. вы устанавливаете скорость на ноль. У вас опечатка, и хотя я указываю вам на нее, вы все равно ее не видите. Это домашнее задание?

Ответ №1:

Вы должны изменить сообщение как pose

def pose_callback(pose): глобальные x, y, psi x = pose.x y = pose.y psi = msg.theta печать (msg.theta) И вы должны написать оператор if

Комментарии:

1. Спасибо. Я использовал это, но все еще не могу остановить черепаху в начальной позиции