【ROS自定义文件】自定义头文件及源文件的调用
创始人
2024-05-08 23:57:10
0

本文记录ROS中的自定义文件的调用,主要包括自定义头文件和源文件的使用。

1 自定义C++头文件的调用

注意这个文件目录的结构,尤其是 hello.h 这个自定义的头文件在 include/plumbing_head
文件夹之下,这个会直接影响后续头文件的引用。

在这里插入图片描述
hello.h文件的内容

#ifndef _HELLO_H
#define _HELLO_H
namespace hello_ns{
class HelloPub {
public:void run();
};
}
#endif

src下面定义hello.cpp
在这里插入图片描述
hello.cpp的内容

#include "ros/ros.h"
#include "plumbing_head/hello.h"
//"/home/Documents/learn/ros/ros_ws_demo1/src/plumbing_head/include/**",
namespace hello_ns {
void HelloPub::run(){ROS_INFO("自定义头文件的使用....");
}
}
int main(int argc, char *argv[])
{setlocale(LC_ALL,"");ros::init(argc,argv,"test_head_node");hello_ns::HelloPub helloPub;helloPub.run();return 0;
}

上述源代码如何起作用?仍需下面的配置

1 项目目录下的c_cpp_properties.json文件的 includePath 配置该 .h 头文件所在的位置,一定要注意前面说的hello.h 这个自定义的头文件在 include/plumbing_head文件夹下
 "includePath": ["/home/Documents/learn/ros/ros_ws_demo1/src/plumbing_head/include/**"],
2 配置 CMakeLists.txt
include_directories(include${catkin_INCLUDE_DIRS}
)
add_executable(hello_node src/hello.cpp)
add_dependencies(hello_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(hello_node${catkin_LIBRARIES}
)

然后即可编译运行,启动roscore后,尝试运行该节点即可,就可以发现正常执行了。

在这里插入图片描述

2 自定义C++文件的调用

同样是在该工作空间下,定义haha.cpp 和 test_haha.cpp,一个为源文件,一个为测试文件。实现逻辑为:在haha.cpp中对函数进行了定义,而test_haha.cpp中对haha.cpp中定义的函数进行调用。
在这里插入图片描述

haha.cpp 内容

#include "plumbing_head/hello.h"
#include "ros/ros.h"
namespace hello_ns{
void HelloPub::run(){ROS_INFO("hello,head and src ...");
}
}

test_haha.cpp内容

#include "ros/ros.h"
#include "plumbing_head/hello.h"
int main(int argc,char *argv[]){ros::init(argc,argv,"head_src");hello_ns::HelloPub helloPub;helloPub.run();return 0;
}
难点还是在于配置层面,在以上配置CMakeLists.txt基础上,再进行下面的配置
add_library(head_srcinclude/${PROJECT_NAME}/hello.hsrc/haha.cpp
)
add_dependencies(head_src ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
add_executable(test_haha_node src/test_haha.cpp)
add_dependencies(test_haha_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(head_src${catkin_LIBRARIES}
)
target_link_libraries(test_haha_nodehead_src${catkin_LIBRARIES}
)
然后进行编译后,启动roscore节点,然后运行test_haha_node。

在这里插入图片描述

3 Python模块的自定义引用

Python的文件结构如下
在这里插入图片描述
haha.py

num = 10

test_haha.py

#! /usr/bin/env python
# -*- coding:utf-8 -*-import os
import sys
import rospy
p = os.path.abspath(".")
rospy.loginfo("*"*10+p)
# 临时环境变量,不然无法加载到 haha.py,,因为在运行过程中,默认路径为工作空间目录而不是scripts目录
sys.path.insert(0,p + "/src/plumbing_head/scripts")
import haha
if __name__=="__main__":rospy.init_node("hah")
#rospy.loginfo("*"*10+os.path.abspath("."))rospy.loginfo(haha.num)

【注】注意修改上面两个py文件的执行权限。

CMakeLists.txt的配置
catkin_install_python(PROGRAMSscripts/haha.pyscripts/test_haha.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

然后运行即可
在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...