(ROS)如何使用相对路径保存日志文件?

时间:2018-12-22 19:14:53

标签: c++ ros

我正在使用命令roslaunch运行一个节点。

roslaunch loop record_node

此节点位于

/home/user/Dropbox/Lab/lp_ws/src/loop/src/record.cpp  

我想使用此节点将日志文件保存到

中的另一个目录
/home/user/Dropbox/Lab/lp_ws/src/loop/plot/log.dat  

所以在cpp文件中,我写了

hand_x_record.open("../plot/hand_x.dat", ios::app);  

但是,它不起作用。没有文件被保存。但是当我使用绝对路径时它可以工作。我使用以下方法检查当前路径:

char current_absolute_path[100000];
if (NULL == realpath("./", current_absolute_path))
{
    printf("***Error***\n");
    exit(-1);
}
strcat(current_absolute_path, "/");
printf("current absolute path:%s\n", current_absolute_path);

输出是

current absolute path:/home/user/.ros/

roslaunch命令将我带到.ros /目录。

如何通过roslaunch命令使用相对路径保存日志?

1 个答案:

答案 0 :(得分:0)

如果要存储到ROS软件包中的路径(基于您的路径,我认为您的软件包称为loop),则可以使用ROS软件包接口的C ++:

#include <ros/package.h>
std::string path = ros::package::getPath("loop");

然后,您可以在此后面附加/plot/log.dat以获得所需的完整路径。或者,如果您的路径不是相对于ROS包的路径,则可以在启动节点时将文件路径作为参数传递。例如,启动文件中的节点看起来像

<node name="my_node" pkg="loop" type="record">
    <param name="path" value="/home/user/Dropbox/Lab/lp_ws/src/loop/plot"/>
</node>

然后您就可以按照here进行阅读。