Ростопический паб в Python - PullRequest
0 голосов
/ 26 июня 2019

Я работаю с симулированным бибопом2. Это команды, которые я использую для запуска симуляции.

sphinx /opt/parrot-sphinx/usr/share/sphinx/drones/bebop2.drone

roslaunch bebop_driver bebop_node.launch ip:=10.202.0.1

В этом случае bebop_driver - подписчики bebop_commander издатель (см. код ниже)

Я использовал:

rostopic pub -r 10 cmd_vel geometry_msgs/Twist  '{linear:  {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'

для публикации на cmd_vel тема успешно. Мне нужно опубликовать одно и то же сообщение в той же теме, используя скрипт Python, но пока я не смог.

Это скрипт PythonЯ пытаюсь использовать:

#!/usr/bin/env python

import rospy

from geometry_msgs.msg import Twist

import sys

rospy.init_node("bebop_commander")
movement_publisher= rospy.Publisher('cmd_vel', Twist , queue_size=10)
movement_cmd = Twist()

speed = float(sys.argv[1])
time = float(sys.argv[2])

print ("Adelante")

if speed != "" and speed > 0 : 

    print ("Velocidad =" , speed , "m/s")

else:

    print ("Falta parametro de velocidad o el valor es incorrecto")

if time != "" and time > 0 :

    print ("Tiempo = ",time, "s")

else:

    print ("Falta parametro de tiempo o el valor es incorrecto")

if time != "" and time > 0 : 


   movement_cmd.linear.x = 0
   movement_cmd.linear.y = 0
   movement_cmd.linear.z = 0 
   movement_cmd.angular.x = 0 
   movement_cmd.angular.y = 0               
   movement_cmd.angular.z = 0 

   movement_publisher.publish(movement_msg)

   print ("Publishing")

rospy.spin()

1 Ответ

1 голос
/ 26 июня 2019

Несколько ошибок / предложений в вашем коде:

  • Вы не проверяете, действительно ли пользователь вводит все аргументы в начале, а именно имя файла, скорость и время.Здесь попробуйте использовать следующий код:

    if len(sys.argv)>2:
       speed = float(sys.argv[1])
       time = float(sys.argv[2]) 
    else:
       print("one or more arguments missing!!")
    
  • Нет необходимости в speed != "" и time != "" после того, как вы проверили len(sys.argv)>2 условие.
  • вы проходитенеизвестная переменная movement_msg внутри movement_publisher.publish().Пожалуйста, проверьте ниже строки:

    movement_publisher.publish(movement_msg)
    

    Это должно быть movement_cmd.

Модифицированный код (проверено):

Имя файла: test_publisher.py

import rospy
from geometry_msgs.msg import Twist
import sys

rospy.init_node("bebop_commander")
movement_publisher= rospy.Publisher('cmd_vel', Twist , queue_size=10)
movement_cmd = Twist()

if len(sys.argv)>2:
    speed = float(sys.argv[1])
    time = float(sys.argv[2])  
    print("Adelante")
    if speed > 0.0:
        print("Velocidad =" , speed , "m/s")      
    else:
        print("Falta parametro de velocidad o el valor es incorrecto") 
    if time > 0.0:
        print ("Tiempo = ",time, "s")
        movement_cmd.linear.x = 0
        movement_cmd.linear.y = 0
        movement_cmd.linear.z = 0
        movement_cmd.angular.x = 0
        movement_cmd.angular.y = 0              
        movement_cmd.angular.z = 0
        movement_publisher.publish(movement_cmd)
        print ("Publishing")
        rospy.spin()      
    else:
        print ("Falta parametro de tiempo o el valor es incorrecto")     
else:
    print('one or more argument is missing!!')

Примечание: Не забудьте скопировать файл test_publisher.py в scripts каталог и сделать его исполняемым через chmod +x test_publisher.py

Выход:

(Клемма 1): запустить команду roscore.У вас должен быть roscore для работы ROS узлов.

enter image description here

(Терминал 2): Запустите файл python publisherс аргументами.

enter image description here

(терминал 3): проверка rostopic информации

enter image description here

...