我正在使用命令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命令使用相对路径保存日志?
答案 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进行阅读。