ROS1重温:自定义头文件、源文件

2023-05-16

ROS1重温:自定义头文件、源文件

  • 自定义头文件、源文件的意义
  • 自定义头文件
    • 创建自定义头文件
    • 使用头文件,并在程序中直接实现函数功能
    • 修改 CMakeLists.txt 文件
  • 自定义头文件中实现函数功能的源文件
    • 创建自定义头文件
    • 使用头文件,并在程序中直接实现函数功能
    • 修改 CMakeLists.txt 文件

自定义头文件、源文件的意义

  • 一般情况下,我们都是调用别人的库文件,直接在头部引述标准库文件,例如 #include “ros/ros,h” 等文件
  • 在开发大型工程的时候,难免会出现某些函数需要反复使用,小到一个对象,大到整个源代码文件,我们不可能在每次需要他们的时候都加入到代码中。
  • 如果直接加入,冗余代码量增加,导致程序性能降低、可靠性降低、且会极大影响后期维护。
  • 综上,我们通过将常用的函数进行封装,变为一个库函数,在使用时直接调用即可。

自定义头文件

  • 例子中包文件名:head_demo

创建自定义头文件

  • 在路径:head_demo/include/head_demo/ ( 包文件名/include/包文件名/ )下,创建头文件 hello.h
  • 在类中可以看到 public,这是用于声明代码的使用范围,具体有如下四种等级,以及其对应的四个范围的可用情况
类内部子类包内部包外部
public
protected×
default××
private×××
  • 头文件具体参考代码如下:
#ifndef _HELLO_H_
#define _HELLO_H_

// 声明命名空间
namespace hello_ns
{
	// 声明类
    class MyHello
    {
    public:
    	// 声明函数
        void run();
    };
}

#endif

使用头文件,并在程序中直接实现函数功能

  • 在 src/ 下,创建 hello.cpp 文件,具体代码如下:
#include "ros/ros.h"
#include "head_demo/hello.h"

// 自定义函数具体功能的实现
namespace hello_ns
{
    void MyHello::run()
    {
        ROS_INFO("run 函数执行...");
    }
}

int main(int argc, char *argv[])
{
    // 设置中文编码
    setlocale(LC_ALL, "");
    // ROS 初始化
    ros::init(argc, argv, "head_hello_node");
    // 创建一个 hello_ns 对象
    hello_ns::MyHello myHello;
    // 调用自定义函数
    myHello.run();

    return 0;
}

修改 CMakeLists.txt 文件

  • 需要加入包文件中的 include 目录,用于声明自定义头文件位置,具体修改如下
include_directories(
include
  ${catkin_INCLUDE_DIRS}
)

add_executable(head_hello_node src/hello.cpp)

add_dependencies(head_hello_node${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

target_link_libraries(head_hello_node
  ${catkin_LIBRARIES}
)

自定义头文件中实现函数功能的源文件

  • 例子中包文件名:head_src_demo

创建自定义头文件

  • 在路径:head_src_demo/include/head_src_demo/ ( 包文件名/include/包文件名/ )下,创建头文件 hello.h,具体代码如下(和上面的一样):
#ifndef _HELLO_H_
#define _HELLO_H_

// 声明命名空间
namespace hello_ns
{
	// 声明类
    class MyHello
    {
    public:
    	// 声明函数
        void run();
    };
}

#endif

使用头文件,并在程序中直接实现函数功能

  • 在 src/ 下,先创建 hello.cpp 源文件,实现自定义头文件中所提到的函数,具体代码如下:
#include "ros/ros.h"
#include "head_src_demo/hello.h"

// 实现函数具体功能
namespace hello_ns
{
    void MyHello::run()
    {
        ROS_INFO("源文件的 run() 函数...");
    }
}

  • 创建 use_hello.cpp ,调用 hello.h 源文件,具体代码如下:
#include "ros/ros.h"
#include "head_src_demo/hello.h"


int main(int argc, char *argv[])
{
    // 设置中文编码
    setlocale(LC_ALL, "");
    // ROS 初始化
    ros::init(argc, argv, "use_hello_node");
    // 创建 MyHello 对象
    hello_ns::MyHello myHello;
    // 调用 run()
    myHello.run();
    
    return 0;
}

修改 CMakeLists.txt 文件

  • 需要加入包文件中的 include 目录
  • 需要加入实现头文件中函数的源文件路径,以及对原文件的编译、链接
  • 具体修改如下
include_directories(
include
  ${catkin_INCLUDE_DIRS}
)

add_library(head_src
  include/${PROJECT_NAME}/hello.h
  src/hello.cpp
)

add_executable(use_hello_node src/use_hello.cpp)

add_dependencies(head_src ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
add_dependencies(use_hello_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

target_link_libraries(head_src
  ${catkin_LIBRARIES}
)
target_link_libraries(use_hello_node
  head_src
  ${catkin_LIBRARIES}
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS1重温:自定义头文件、源文件 的相关文章

随机推荐

  • STL应用篇

    概要 STL是泛型编程 Generic Programming GP 和C 43 43 结合的产物 STL主要由几个核心部件组成 xff1a 迭代器 容器 算法 函数对象 适配器 容器即物之所属 xff1b 算法是解决问题的方式 xff1b
  • 计算机网络I-考前指导复习提纲

    计算机网络I考前指导 填空 选择 连线 简答 计算等题型 考试范围基本在course review里面 xff0c 老师说可能会考的用表示 xff08 自己学校的考点都在这里 xff0c 仅供参考 xff09 PPT1 Networking
  • 数据结构与算法学习总结(七)——二叉树的概念

    二叉树的定义 二叉树 binary tree 由结点的有限集合构成 这个有限集合或者为空集 empty xff0c 或者为由一个根节点 root 及两颗互不相交 分别称作这个根的左子树 left bustree 和右子树 right sub
  • 从升级服务器系统聊聊编写脚本

    本文使用 署名 4 0 国际 CC BY 4 0 许可协议 xff0c 欢迎转载 或重新修改使用 xff0c 但需要注明来源 署名 4 0 国际 CC BY 4 0 本文作者 苏洋 创建时间 2020年02月14日 统计字数 4798字 阅
  • NUC 折腾笔记 - 储存能力测试

    NUC 折腾笔记 储存能力测试 前文提到过 xff0c 我计划折腾下这种小盒子 xff0c 作为日常开发过程中的拓展设备 在短暂使用之后 xff0c 我为它拓展了两块容量更高的硬盘 xff0c 开始正式使用 因为使用了一些网上颇有争议的国产
  • 使用 WordPress 快速打造个人 Wiki

    本文使用 署名 4 0 国际 CC BY 4 0 许可协议 xff0c 欢迎转载 或重新修改使用 xff0c 但需要注明来源 署名 4 0 国际 CC BY 4 0 本文作者 苏洋 创建时间 2019年06月28日 统计字数 3644字 阅
  • pip版本过低无法更新 解决方案

    问题 xff1a 方案一 xff08 失败 xff09 xff1a python span class token operator span m pip install span class token operator span spa
  • MOOC数据结构(下)(自主模式)-平均气温(Temperature)

    平均气温 Temperature Description A weather station collects temperature data from observation stations all over the country
  • javascript的事件介绍

    你的点赞就是继续前行的动力 xff0c 嘻嘻 文章目录 事件概述二 事件绑定2 1HTML事件2 2 DOM0级事件2 3 DOM2级事件 三 鼠标事件四 焦点事件五 滚动事件六 键盘事件6 1 介绍6 2 属性 七 手机触摸事件7 1 手
  • 获取手机页面的元素位置坐标

    解决方案一 xff1a 在手机开发者选项中 xff0c 将指针位置打开 xff0c 可以在屏幕上方看到当前点击位置的坐标点 X Y 例如 xff1a P 1 1 X 545 Y 1846 Xv 0 0 Yv 0 0 Prs 1 0 Size
  • ubuntu 触摸屏横屏变竖屏解决 触摸功能仍然是横屏的问题

    在经过横屏转竖屏时 发现触摸屏仍然是横屏时候的触摸点 横屏时触摸屏正常使用 xff0c 竖屏时不正常 解决 xff1a 需要将 触摸屏进行旋转 通过 input 通过 xrandr o right 旋转后触摸屏不正常 旋转触摸的坐标轴 xf
  • 计算机组成原理三:总线

    第三章 总线 1 总线概念 计算机硬件系统有2种互联方式 一种是各部件之间单独连线 称为分散连接 另一种是将各部件连到一组公关信息 传输线上 称为总线连接 总线是一组线路 将计算机的各个硬件连接在一起 让它们可以通过这条公共线路进行数据的传
  • Matlab-数字图像处理-获取图片rgb颜色分量及截取子图

    Matlab 数字图像处理基础实验 获取图片rgb颜色分量及截取子图 Problem Statement 问题描述 1 Proficient in Matlab tools and complete two Matlab functions
  • ICRA2020论文整理(SLAM + Deep Learning)

    参考 https github com PaoPaoRobot ICRA2020 paper list 目录 1 SLAM 2 Deep Learning in Robotics and Automation 3 Localization
  • win10+ubuntu16.04双系统下完全删除并重装ubuntu16.04

    参考文章 xff1a 1 彻底删除Ubuntu EFI分区及启动项 xff1a https blog csdn net mtllyb article details 78635757 2 Create a bootable USB stic
  • Ubuntu18.04开机挂载硬盘

    Linux与Windows的文件资源管理在加载上有所区别 xff0c Windows自动加载主板上连接的所有磁盘 xff0c 而Linux默认只挂载系统所在的分区 xff0c 使用其他分区则需要使用mount命令手动挂载 若需系统启动时自动
  • [Docker] 删除所有httpd镜像创建的容器 - 详细解释

    故意 一不小心创建了很多httpd容器 或者包含 httpd 关键字 xff0c 有的在运行 xff0c 有的已经停止了 xff0c 有的已经退出 xff0c 如果我想强制一键删除 xff0c 该怎么办呢 xff1f 其实很简单 xff0c
  • 直流调速器(有刷电调)的工作原理

    以前测试过无刷电调 xff0c 它是把锂电池的直流电转化为三相交流波形 xff0c 最近买了有刷电调 xff0c 也研究一下它的调速原理 调速器如下 xff1a 飞马 30A单向有刷电调 固定翼飞机专用 带动力启动开关 测试平台 连接示波器
  • 百度开发测试工程师在线笔试

    时间 xff1a 2020 9 3 19 xff1a 00 21 xff1a 00 笔试内容 xff1a 选择题 编程题 1 选择题 xff08 30个 xff09 50分钟 xff0c 60分 xff0c 涵盖内容较广 xff0c 包含计
  • ROS1重温:自定义头文件、源文件

    ROS1重温 xff1a 自定义头文件 源文件 自定义头文件 源文件的意义自定义头文件创建自定义头文件使用头文件 xff0c 并在程序中直接实现函数功能修改 CMakeLists txt 文件 自定义头文件中实现函数功能的源文件创建自定义头