ROS系列:第三章(二)

系列文章目录

第一章 ROS概述与环境搭建
第二章 ROS通信机制
第三章 ROS通信机制进阶
第四章 ROS运行管理
第五章 ROS常用组件
第六章 机器人系统仿真
第七章 机器人系统仿真
第八章 机器人系统仿真
第九章 机器人系统仿真
第十章 机器人系统仿真



前言

  • 用来复习回顾使用
  • 本篇笔记视频讲解地址:Bilibili大学
  • 笔记配合视频效果更好
  • 如有错误和遗漏,可私信与评论进行指正,看到了会及时更改
  • 怕什么真理无穷,进一寸有一寸的欢喜
  • 与各位共勉

三、ROS通信机制进阶

6.ROS中的头文件与源文件

  1. 设置头文件,可执行文件作为源文件;
  2. 分别设置头文件,源文件与可执行文件

6.1自定义头文件调用

需求:设计头文件,可执行文件本身作为源文件。

流程:

  1. 编写头文件;
  2. 编写可执行文件(同时也是源文件);
  3. 编辑配置文件并执行。
6.1.1头文件

在功能包下的 include/功能包名 目录下新建头文件: hello.h,示例内容如下:

代码如下:

#ifndef  _HELLO_H
#define  _HELLO_H

/* 声明 namespace
            |--class
                |--run

*/
namespace hello_ns {
    class Myhello
    {
    private:
        /* data */
    public:
        void run();                 //成员函数
    };
    
}

#endif

为防止编译头文件出现异常,需配置 .vscode 下 c_cpp_properties.json 的 includepath属性 :

"/home/wht/at_demo/demo03_ws/src/plumbing_head/include/**"//配置head文件的位置

上一行结尾记得加逗号隔开;

6.1.2可执行文件

在 src 目录下新建文件:hello.cpp,编写调用头文件函数。示例内容如下:

代码如下:

#include <ros/ros.h>
#include "plumbing_head/hello.h"
namespace hello_ns{
    void Myhello::run(){
        ROS_INFO("run 函数执行-------------");
    }
}

int main(int argc, char* argv[])
{
    setlocale(LC_ALL,"");

    ros::init(argc, argv, "hello_head");
    //函数调用
    hello_ns::Myhello myHello;
    myHello.run();
    return 0;
}
6.1.3配置文件

配置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}
)

编译并执行 ;

6.2自定义源文件调用

大型文件里面,头文件用来声明类,源文件拿来定义,然后其他的函数即可执行文件通过调用源文件定义好的函数来实现相关功能;

需求:设计头文件与源文件,在可执行文件中包含头文件。

流程:

  1. 编写头文件;
  2. 编写源文件;
  3. 编写可执行文件;
  4. 编辑配置文件并执行。
6.2.1头文件

在功能包下的 include/功能包名 目录下新建头文件: hello.h,用于声明类。

代码如下:

#ifndef  _HELLO_H
#define  _HELLO_H

/* 声明 namespace
            |--class
                |--run

*/
namespace hello_ns {
    class Myhello
    {
    private:
        /* data */
    public:
        void run();                 //成员函数
    };
    
}

#endif

为防止编译头文件出现异常,需配置 .vscode 下 c_cpp_properties.json 的 includepath属性 :

"/home/wht/at_demo/demo03_ws/src/plumbing_head_src/include/**"//配置head文件的位置

上一行结尾记得加逗号隔开;

6.2.2源文件

在 src 目录下新建文件:hello.cpp,用于定义相关函数。

代码如下:

#include <ros/ros.h>
#include "plumbing_head_src/hello.h"

namespace hello_ns{

void My::run(){
    ROS_INFO("调用源文件函数成功-------------");
}

}
6.2.3可执行文件

在 src 目录下再新建文件:use_hello.cpp,调用源文件文件函数。

代码如下:

#include <ros/ros.h>//因为源文件已经包含,所以可以省略
#include "plumbing_head_src/hello.h"

int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "");
    ros::init(argc, argv, "hello_head_src");
    //函数调用
    hello_ns::Myhello myHello;
    myHello.run(); //此时虽然包含了plumbing_head_src/hello.h   即包含了头文件,但不能链接源文件hello.cpp  需要配置
    return 0;
}
6.2.4配置文件

配置CMakeLists.txt文件,头文件&源文件相关配置如下:

代码如下:

#包含头文件
include_directories(
include
  ${catkin_INCLUDE_DIRS}
)
## 声明C++库
# 库的名字 起名字随便起,但是与后面的要对应 
# 第一个是头文件include/plumbing_head_src/hello.h
# 第二个源文件 hello.cpp
add_library(head_src
  include/${PROJECT_NAME}/hello.h
  src/hello.cpp
)
# 执行权限配置
add_executable(use_hello src/use_hello.cpp)
# 执行权限配置
add_dependencies(use_hello ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
# 库的配置    设置成上面库的名字
add_dependencies(head_src ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
# 库的配置
target_link_libraries(head_src
  ${catkin_LIBRARIES}
)
# 执行权限配置 需要链接到库上
target_link_libraries(use_hello
  head_src
  ${catkin_LIBRARIES}
)

编译并执行 ;

总结:

第二种是以后常用的一种方法
大型文件里面,头文件用来声明类,源文件拿来定义,然后其他的函数即可执行文件通过调用源文件定义好的函数来实现相关功能;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会是要长脑子了吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值