【问题标题】:Store Terminal Output in a File ros melodic cpp将终端输出存储在文件中 ros melodic cpp
【发布时间】:2022-01-10 04:22:25
【问题描述】:

我有一个 pcd 文件,其中包含点云的 x y z 坐标。

现在我有另一个 cpp 文件,我在终端上打印 x y z 坐标。 (这只是坐标而不是点云) 我想将其存储在另一个文件中,以便将其与 pcd 文件进行比较。 我该怎么做?

【问题讨论】:

    标签: ros pcl


    【解决方案1】:

    为什么需要直接从标准输出存储?有几种不同的方法可以解决这个问题,可能更容易。

    您可以简单地发布(x,y,z) 数据并使用rosbag record 记录它,然后通过rosbag_to_csv 导出。

    您也可以直接在代码中将值写入文件,而不是打印出来。由于您没有指定 Python 或 C++,这里是 Python 中的一个简单示例

    f = open('your_output_file.csv', 'a')
    while not rospy.is_shutdown():
        #Whatever ops to get data
        x,y,z = get_the_data()
        output_str = str(x)+','+str(y)+','+str(z)
        f.write(output_str)
    

    ROS 还会自动记录rospy.log*() 函数的输出。您可以通过导出环境变量ROS_LOG_DIR 来控制它的存储位置。请注意,对于 print() 语句,这可能无法 100% 正确工作

    最后,如果你真的因为某种原因真的需要使用标准输出,你可以随时重定向输出,但是你正在启动节点。例如:roslaunch your_package your_launch.launch >> some_file.txt

    【讨论】:

    • 谢谢。快速反应有所帮助。我使用了第二个选项。该文件的名称是 foo.csv 但我似乎找不到它的存储位置。
    • std::ofstream myFile("foo.csv");我的文件
    • @Sant 您正在使用该文件名的相对路径,因此它将位于程序用完的任何文件夹中。如果您使用的是本地工作区,它将类似于 workspace/devel/lib/package_name。给它一个绝对路径可能更好更容易,例如/home/your_user/foo.csv
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 2020-10-07
    • 1970-01-01
    相关资源
    最近更新 更多