如何使用python脚本实现ROS终端命令的自动化

2024-04-25 06:02:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试用python编写一个可执行程序,它运行以下ROS命令:rostopic echo dvrk/PSM1/position_cartesian_current然而,尽管我阅读了ROS教程,但我不确定如何进行这项工作。在名为arm.py的文件中,已存在以下订阅服务器和定义:

rospy.Subscriber(self.__full_ros_namespace + '/position_cartesian_current', PoseStamped, self.__position_cartesian_current_cb)

def __position_cartesian_current_cb(self, data):
        self.__position_cartesian_current = posemath.fromMsg(data.pose)

我应该在新的自动python脚本中重用这个订阅服务器和定义吗?在获得当前笛卡尔位置后,机器人随后将被移动到另一个位置,目前可以使用终端中的ROS命令来完成,但是,目标是编写一个python脚本来自动执行这些命令。任何帮助将不胜感激!在

^{pr2}$

Tags: 命令echoself服务器脚本data定义position
3条回答

根据Pose和{}消息中包含的this docPoseStamped消息,因此要获得Pose值,请尝试:

from geometry_msgs.msg import PoseStamped,

def callback(data):
  print(data.pose)

def listener():
    rospy.init_node('listener', anonymous=True)
    rospy.Subscriber(self.__full_ros_namespace + '/position_cartesian_current', 
    PoseStamped, callback
)
    rospy.spin()

您要做的是编写一个pythonros节点来订阅主题并实现您的逻辑。在

您可以按照this guide操作。在

其主要思想是订阅position主题,在回调函数中获取相关数据,并在同一个回调中发布通常由命令行执行的命令。在

要重现一个简单的rostopic echo,您只需打印在回调中接收到的值。在

这不是Python自动化脚本,而是一个Python ROS程序,可以作为ROS节点执行(使用rosrun)。这样做的目的与通过ROS内置终端命令发布手动消息是一样的。每当在“/position_cartesian_current”主题发布消息时,此程序将执行回调。在

如果您不想在不同的终端上执行一堆命令,那么ROS提供了创建启动文件(roslaunch)的功能,它将您的执行管道减少到一个roslaunch命令。这在ROS社区中大量用于自动化流程。在

相关问题 更多 >