gpt4 book ai didi

python - Python 中的 Rostopic pub 等效项

转载 作者:行者123 更新时间:2023-12-04 19:10:25 25 4
gpt4 key购买 nike

我正在使用模拟的 bebop2
这些是我用来运行模拟的命令。

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()

最佳答案

您的代码中几乎没有错误/建议:

  • 您没有检查用户是否实际上在开始时输入了所有参数,即文件名、速度和时间。在这里尝试使用以下代码:
    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.pyscripts目录并通过 chmod +x test_publisher.py 使其可执行

    输出:

    (1号航站楼):运行 roscore命令。您必须拥有 roscoreROS 运行节点进行通信。

    enter image description here

    (终端2):运行python publisher带参数的文件。

    enter image description here

    (3号航站楼):查看 rostopic信息

    enter image description here

    关于python - Python 中的 Rostopic pub 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56762948/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com