Python 中的 Rostopic 酒吧等价物
Rostopic pub equivalent in Python
我正在使用模拟的 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()
您的代码中 mistakes/suggestions 很少:
您没有检查用户是否在开始时实际输入了所有参数,即文件名、速度和时间。在这里尝试使用以下代码:
if len(sys.argv)>2:
speed = float(sys.argv[1])
time = float(sys.argv[2])
else:
print("one or more arguments missing!!")
- 检查
len(sys.argv)>2
条件后,就不需要 speed != ""
和 time != ""
。
您在 movement_publisher.publish()
中传递了一个未知变量 movement_msg
。请检查以下行:
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
[=31使其可执行=]
输出:
(1 号航站楼):运行 roscore
命令。您必须有 roscore
运行 才能让 ROS
个节点进行通信。
(终端 2):运行 python publisher
带参数的文件。
(3号航站楼):查看rostopic
信息
我正在使用模拟的 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()
您的代码中 mistakes/suggestions 很少:
您没有检查用户是否在开始时实际输入了所有参数,即文件名、速度和时间。在这里尝试使用以下代码:
if len(sys.argv)>2: speed = float(sys.argv[1]) time = float(sys.argv[2]) else: print("one or more arguments missing!!")
- 检查
len(sys.argv)>2
条件后,就不需要speed != ""
和time != ""
。 您在
movement_publisher.publish()
中传递了一个未知变量movement_msg
。请检查以下行: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
[=31使其可执行=]
输出:
(1 号航站楼):运行 roscore
命令。您必须有 roscore
运行 才能让 ROS
个节点进行通信。
(终端 2):运行 python publisher
带参数的文件。
(3号航站楼):查看rostopic
信息