我目前正在尝试使用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脚本。任何帮助将不胜感激!
import rospy
from tf import transformations
from tf_conversions import posemath
from std_msgs.msg import String, Bool, Float32, Empty, Float64MultiArray
from geometry_msgs.msg import Pose, PoseStamped, Vector3, Quaternion, Wrench, WrenchStamped, TwistStamped
def callback(data):
rospy.loginfo(rospy.get_caller_id() + data.data)
def listener():
rospy.init_node('listener', anonymous=True)
rospy.Subscriber(self.__full_ros_namespace + '/position_cartesian_current', PoseStamped, callback)
rospy.spin()
if __name__ == '__main__':
listener()
最佳答案
您要做的是编写一个Python ROS节点以订阅该主题并实现您的逻辑。
您可以按照this guide进行操作。
主要思想是订阅position主题,在回调函数中获取相关数据,然后在同一回调中发布通常通过命令行执行的命令。
要重现简单的rostopic echo
,您只需打印在回调中收到的值即可。
关于python - 如何使用python脚本自动化ROS的终端命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56665531/