PythonでROSメッセージをおくる方法として、rospyの活用があります
実際のところ
まず使うためのサービス名を把握
$ rosservice list /rosout/get_loggers /rosout/set_logger_level ・・・ /xarm/vacuum_gripper_set /xarm/velo_move_joint /xarm/velo_move_line /xarm/xarm_driver/get_loggers /xarm/xarm_driver/set_logger_level
目当てのサービス名move_jointで使っているメッセージを把握
$ rosservice type /xarm/move_joint xarm_msgs/Move
そのメッセージの中身を確認
$ rossrv show xarm_msgs/Move float32[] pose float32 mvvelo float32 mvacc float32 mvtime float32 mvradii --- int16 ret string message
rospyを使ってみる
先ほど確認したメッセージをrospy経由で送付
ROSのディレクトリが環境変数に突っ込まれていれば、メッセージはパスを特にしていせず動かせる
#!/usr/bin/env python import rospy from xarm_msgs.srv import Move rospy.wait_for_service('/xarm/move_joint') response = rospy.ServiceProxy('/xarm/move_joint', Move) res = response( [0, 0, 0,0,0,0], 0.35, 7, 0, 0 ) res = response( [0.1, 0, 0,0,0,0], 0.35, 7, 0, 0 ) res = response( [0.1, 0.1, 0,0,0,0], 0.35, 7, 0, 0 ) res = response( [0, 0, 0,0,0,0], 0.35, 7, 0, 0 ) print(res)
ちょっと改良
以上ではメンテ性が悪すぎるのでパラメータをバラします
#!/usr/bin/env python import rospy from xarm_msgs.srv import Move rospy.wait_for_service('/xarm/move_joint') payload = Move payload.pose = [0.0,0,0,0,0,0] payload.mvvelo = 0.35 payload.mvacc = 7 payload.mvtime = 0 payload.mvradii = 0 response = rospy.ServiceProxy('/xarm/move_joint', Move) res = response(payload.pose, payload.mvvelo, payload.mvacc, payload.mvtime, payload.mvradii) payload.pose = [0.1, 0, 0,0,0,0] res = response(payload.pose, payload.mvvelo, payload.mvacc, payload.mvtime, payload.mvradii) payload.pose[1] = 0.1 res = response(payload.pose, payload.mvvelo, payload.mvacc, payload.mvtime, payload.mvradii) print(res)