目的
针对需要调用本地文件的函数,这时需要提供本地文件的地址,而在ros中的执行文件并不在编写的cpp处,因此相对路径会导致寻找不到文件而报错。
然而,直接将绝对路径进行赋值搜索,当这个工作包放到别的电脑上时,这个路径就又错误了。
为了提供文件的可行性,我们需要找到一种自适应寻找绝对路径的方法。
方法
我们可以调用函数获取本工作包的位置,这样不同的电脑用户使用这个bag都是可以直接运行的。
1.引用ros/package.h
头文件中加入:
#include "ros/ros.h"
#include <ros/package.h>
2.函数内调用ros::package::getPath("your_bag_name'')
std::string package_path = ros::package::getPath("task_fsm");
3.在CMakeLists里加入依赖
在原有find_package内容的基础上添加roslib。
find_package(catkin REQUIRED COMPONENTS
...
...
roslib
)
demo示例
#include "ros/ros.h"
#include <ros/package.h>
int main(int argc, char **argv) {
// 初始化ROS节点
ros::init(argc, argv, "my_node");
std::string package_path = ros::package::getPath("task_fsm");
std::cout <<package_path << std::endl;
return 0;
}
这个demo获取task_fsm这一个bag的地址,并打印出来。后续根据需要处理这个字符串package_path就可以啦。