首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ROS服务无法保存文件

ROS服务无法保存文件
EN

Stack Overflow用户
提问于 2018-06-20 01:10:14
回答 1查看 182关注 0票数 0

我想有一个服务'save_readings‘,它可以自动将数据从rostopic保存到文件中。但每次调用该服务时,它都不会保存任何文件。我试着在不使用rosservice的情况下用python运行这些保存文件的代码,代码运行得很好。我不明白为什么会发生这种事。

代码语言:javascript
运行
复制
#!/usr/bin/env python
# license removed for brevity

import rospy,numpy
from std_msgs.msg import String,Int32MultiArray,Float32MultiArray,Bool
from std_srvs.srv import Empty,EmptyResponse
import geometry_msgs.msg
from geometry_msgs.msg import WrenchStamped
import json
# import settings
pos_record = []
wrench_record = []
def ftmsg2listandflip(ftmsg):
    return [ftmsg.wrench.force.x,ftmsg.wrench.force.y,ftmsg.wrench.force.z, ftmsg.wrench.torque.x,ftmsg.wrench.torque.y,ftmsg.wrench.torque.z]

def callback_pos(data):
    global pos_record
    pos_record.append(data.data)

def callback_wrench(data):
    global wrench_record
    ft = ftmsg2listandflip(data)
    wrench_record.append([data.header.stamp.to_sec()] + ft)

def exp_listener():
    stop_sign = False
    rospy.Subscriber("stage_pos", Float32MultiArray, callback_pos)
    rospy.Subscriber("netft_data", WrenchStamped, callback_wrench)
    rospy.spin()

def start_read(req):
    global pos_record
    global wrench_record
    pos_record = []
    wrench_record = []
    return EmptyResponse()

def save_readings(req):
    global pos_record
    global wrench_record
    filename = rospy.get_param('save_file_name')
    output_data = {'pos_list':pos_record, 'wrench_list': wrench_record }
    rospy.loginfo("output_data %s",output_data)

    with open(filename, 'w') as outfile:  # write data to 'data.json'
        print('dumping json file')
        json.dump(output_data, outfile)   #TODO: find out why failing to save the file.
    outfile.close()
    print("file saved")
    rospy.sleep(2)
    return EmptyResponse()


if __name__ == '__main__':
    try:
        rospy.init_node('lisener_node', log_level = rospy.INFO)
        s_1 = rospy.Service('start_read', Empty, start_read)
        s_1 = rospy.Service('save_readings', Empty, save_readings)
        exp_listener()
        print ('mylistener ready!')
    except rospy.ROSInterruptException:
        pass
EN

回答 1

Stack Overflow用户

发布于 2018-06-20 09:16:10

明白了。我需要指定要保存的文件的路径。

代码语言:javascript
运行
复制
save_path = '/home/user/catkin_ws/src/motionstage/'
filename = save_path + filename
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50933646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档