[英]How to Automate terminal commands of ROS using a python script
我目前正在嘗試用 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 節點來訂閱主題並實現您的邏輯。
您可以按照本指南進行操作。
主要思想是訂閱位置主題,在回調函數中獲取相關數據並在同一個回調中發布您通常通過命令行執行的命令。
要重現簡單的rostopic echo
,您只需打印您在回調中收到的值。
這不是 Python 自動化腳本,它是一個 Python ROS 程序,可以作為 ROS 節點(使用 rosrun)執行。 這樣做的效果與通過 ROS 內置終端命令發布手動消息相同。 每當在“/position_cartesian_current”主題上發布消息時,該程序都會執行回調。
如果您不想在想嘗試某事時在不同的終端上執行一堆命令,ROS 為您提供了創建啟動文件 (roslaunch) 的能力,這將您的執行管道減少到單個 roslaunch 命令。 這在 ROS 社區中被大量用於自動化流程。
根據Pose
和Header
消息中包含的這個文檔PoseStamped
消息,因此要獲取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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.