ROS中如何自定义源文件并调用


前言

本文自定义源文件的目的是把源文件和可执行文件分离,在执行时结构可以更清晰,之前的一篇文章中简要介绍了如何自定义头文件并调用,感兴趣的朋友可以点这里 >自定义头文件并调用<


1.头文件、源文件、可执行文件定义

首先了解一下这三种文件的定义,头文件是.h文件,用来存放类的声明,平时用的#include<math.h>就是包含这种文件;源文件是指.cpp文件,一般用来放在头文件声明的类成员函数的具体实现;可执行文件,顾名思义就是创建用来执行的.cpp文件,通过与源文件及头文件进行链接后执行源文件中的函数实现功能。

2.创建功能包

打开vscode,在工作空间src目录下右键单击create catkin package,命名功能包,这里命名为self_definition_source,回车,继续添加依赖项,roscpp rospy std_msgs,再次回车则一个新的功能包创建完成
在这里插入图片描述
在这里插入图片描述

3.新建头文件

鼠标放置在功能包self_definition_source中include的self_definition_source目录下右键创建头文件self.h;然后先声明头文件,再声明namespce、class和函数
在这里插入图片描述

4.新建源文件

在功能包的src目录下右键新建一个.cpp文件,这里命名为self_definition_source.cpp,再在里面编写代码,函数里用ROS_INFO在终端输出"自定义源文件使用~"这条消息

#include"self_definition_source/self_head.h"
#include"ros/ros.h"
namespace self_ns {

void self_cl::zidingyi()
{
    ROS_INFO("自定义源文件使用~");
}

}

写好后include的部分会有红色波浪线警告,是因为引用头文件需要在c_cpp_properties.json中把文件路径包含进去(只需添加一次),注意如果在路径后面添加新的路径记得加逗号
在这里插入图片描述

5.创建可执行文件

和源文件类似,创建一个命名为exe_source.cpp的文件,然后写入代码,函数部分主要是设置中文、节点初始化和函数调用三部分

#include"self_definition_source/self_head.h"
#include "ros/ros.h"

int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");//设置中文防止乱码
    ros::init(argc,argv,"head_info");//节点初始化
    //函数调用
    self_ns::self_cl print_info;
    print_info.zidingyi();
    return 0;
}

6.配置cmakelists.txt文件

打开CMakeLists.txt文件,修改以下几行对C++库和可执行文件进行配置,文件才能正常运行
(1)配置C++库
在这里插入图片描述

include_directories(
include
  ${catkin_INCLUDE_DIRS}
)
add_library(de_so
  include/${PROJECT_NAME}/self_head.h
  src/self_definition_source.cpp
)

add_library里的${PROJECT_NAME}可以任意定义,只要和下面一致即可,这里命名为de_so
在这里插入图片描述

add_dependencies(de_so ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(de_so
  ${catkin_LIBRARIES}
)

(2)配置可执行文件
在这里插入图片描述

add_executable(exe_source src/exe_source.cpp)
add_dependencies(exe_source ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(exe_source
  de_so//链接到C++库
  ${catkin_LIBRARIES}
)

7.运行

按Ctrl+shift+B进行编译,编译后打开新终端,设置环境变量,rosrun运行,终端输出了我们在源文件中设置的消息
在这里插入图片描述


总结

自定义源文件调用在这里只是简单举了个例子,并走了整个流程,源文件中定义了函数并在里面编写了我们想要输出的消息,然后运行时执行可执行文件对源文件中的函数进行调用,所以源文件可以作为函数封装的文件,我们只需要与其链接就可以使用可执行文件进行调用,不需要在文件本身定义,可以使代码结构更简洁清晰

  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值