广西南宁官方网站企业,制作电子商务网站页面,苏州北京商场网站建设,旅游网站建设方案后台【ROS学习笔记10】ROS中配置自定义Cpp头文件和导入自定义Python库 文章目录【ROS学习笔记10】ROS中配置自定义Cpp头文件和导入自定义Python库一、ROS中的头文件和源文件1.1 自定义头文件调用1.2 自定义源文件调用二、Python模块的导入Reference写在前面#xff0c;本系列笔记参…【ROS学习笔记10】ROS中配置自定义Cpp头文件和导入自定义Python库 文章目录【ROS学习笔记10】ROS中配置自定义Cpp头文件和导入自定义Python库一、ROS中的头文件和源文件1.1 自定义头文件调用1.2 自定义源文件调用二、Python模块的导入Reference写在前面本系列笔记参考的是AutoLabor的教程具体项目地址在 这里 一、ROS中的头文件和源文件
本节主要介绍ROS的C实现中如何使用头文件与源文件的方式封装代码具体内容如下:
设置头文件可执行文件作为源文件分别设置头文件源文件与可执行文件。
在ROS中关于头文件的使用核心内容在于CMakeLists.txt文件的配置不同的封装方式配置上也有差异。
1.1 自定义头文件调用
需求: 设计头文件可执行文件本身作为源文件。
流程:
编写头文件编写可执行文件(同时也是源文件)编辑配置文件并执行。
1、头文件
再功能包的include/功能包名目录下新建头文件hello.h示例内容如下
#ifndef _HELLO_H
#define _HELLO_Hnamespace hello_ns{class HelloPub {public:void run();
};}#endif注意
在VsCode中为了后续包含头文件时不抛出异常请配置.vscode下的c_cpp_properties.json的includepath属性。
/home/用户/工作空间/src/功能包/include/**2、可执行文件
在src目录下新建文件hello.cpp示例内容如下
#include ros/ros.h
#include test_head/hello.hnamespace 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;
}3、配置CMakeLists.txt文件
配置CMakeLists.txt文件头文件相关配置如下:
include_directories(
include${catkin_INCLUDE_DIRS}
)可执行配置文件配置方式和之前一致
add_executable(hello src/hello.cpp)add_dependencies(hello ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})target_link_libraries(hello${catkin_LIBRARIES}
)最后编译并执行控制台可以输出自定义的文本信息。
效果如下 1.2 自定义源文件调用
**需求:**设计头文件与源文件在可执行文件中包含头文件。
流程:
编写头文件编写源文件编写可执行文件编辑配置文件并执行。
1、头文件
头文件的设置和3.2.1类似在功能包下的include/功能包名目录下新建头文件haha.h示例内容如下
#ifndef _HAHA_H
#define _HAHA_Hnamespace hello_ns {class My {public:void run();};}#endif2、源文件
在src目录下新建文件haha.cpp示例内容如下
#include test_head_src/haha.h
#include ros/ros.hnamespace hello_ns{void My::run(){ROS_INFO(hello,head and src ...);
}}3、可执行文件 在src目录下新建文件use_head.cpp示例内容如下
#include ros/ros.h
#include test_head_src/haha.hint main(int argc, char *argv[])
{ros::init(argc,argv,hahah);hello_ns::My my;my.run();return 0;
}4、配置CMakeLists.txt文件
头文件与源文件相关配置
include_directories(
include${catkin_INCLUDE_DIRS}
)## 声明C库
add_library(headinclude/test_head_src/haha.hsrc/haha.cpp
)add_dependencies(head ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})target_link_libraries(head${catkin_LIBRARIES}
)可执行文件配置:
add_executable(use_head src/use_head.cpp)add_dependencies(use_head ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})#此处需要添加之前设置的 head 库
target_link_libraries(use_headhead${catkin_LIBRARIES}
)结果示例 二、Python模块的导入
与C类似的在Python中导入其他模块时也需要相关处理。
**需求:**首先新建一个Python文件A再创建Python文件UseA在UseA中导入A并调用A的实现。
实现:
新建两个Python文件使用 import 实现导入关系添加可执行权限、编辑配置文件并执行UseA。
1、新建两个Python文件并使用import导入
文件A实现包含一个变量
#! /usr/bin/env python
num 1000文件B核心实现
import os
import syspath os.path.abspath(.)
# 核心
sys.path.insert(0,path /src/plumbing_pub_sub/scripts)import tools....
....rospy.loginfo(num %d,tools.num)2、添加可执行权限编辑配置文件并执行
略
示例结果 Reference
http://www.autolabor.com.cn/book/ROSTutorials/di-2-zhang-ros-jia-gou-she-ji/23-fu-wu-tong-xin/224-fu-wu-tong-xin-zi-ding-yi-srv-diao-yong-b-python.html