ROS系列:第三章(二)

2023-05-16

系列文章目录

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


文章目录

  • 系列文章目录
  • 前言
  • 三、ROS通信机制进阶
    • 6.ROS中的头文件与源文件
      • 6.1自定义头文件调用
        • 6.1.1头文件
        • 6.1.2可执行文件
        • 6.1.3配置文件
      • 6.2自定义源文件调用
        • 6.2.1头文件
        • 6.2.2源文件
        • 6.2.3可执行文件
        • 6.2.4配置文件
    • 总结:


前言

  • 用来复习回顾使用
  • 本篇笔记视频讲解地址: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}
)

编译并执行 ;

总结:

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

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

ROS系列:第三章(二) 的相关文章

随机推荐

  • 2022ROS暑期学校暨人工智能与机器人论坛报名及日程安排

    机器人操作系统 ROS 暑期学校自2015年举办以来 xff0c 被中国机器人业界和学界 xff0c 以及ROS开源基金会誉为除了ROSCon之外规模最大 参与人数最多 最成功的ROS线下活动 过去八年 xff0c 共吸引了全国300多所高
  • MATLAB Simulink开发ROS无人车与机器人应用 详细教程

    引言 xff1a MATLAB在机器人中的应用 现在大多数机器人开发者都会选择ROS xff0c 在ROS整个框架下 调包 极其容易 很多ROS开发者热衷于 调包 来实现功能 xff0c 却难以在机器人学的理论知识上有所突破 MATLAB的
  • DE1-SOC入门之Linux开发环境搭建

    入手DE1 SOC这块FPGA也有两三个月了 xff0c 将友晶提供的入门学习例程 代码等摸索了一下 xff0c 感觉正常的fpga和arm之间的通信 控制已经没多大问题了 可是很多时候 xff0c 事情没有自己想的那么简单 现在接手的项目
  • sensor_msgs/NavSatFix Message

    1 sensor msgs NavSatStatus Message http docs ros org en api sensor msgs html msg NavSatStatus html Navigation Satellite
  • 零基础如何入门激光SLAM

    零基础如何入门激光SLAM 最近有几个人加我 xff0c 都说是刚开始学激光slam xff0c 基本都是研一 xff0c 也有一些大四的 xff08 大四的都开始学SLAM了 xff01 xff09 情况也都差不多 xff0c 有的是课题
  • 从零开始搭二维激光SLAM --- 栅格地图的构建

    上周搬家 导致这篇文章更新的慢了点 之前的文章我们都是通过scan to scan的方式进行位姿变换的计算 接下来的文章将带领大家体验scan to map的计算位姿变换的方式 首先 来简要介绍一下什么是map 1 地图与占用栅格地图 1
  • 从零开始搭二维激光SLAM --- 基于gtsam的后端优化的代码实现

    上一篇文章我们分析了如何使用ceres进行位姿图的优化 这篇文章来讲一下如何使用gtsam进行位姿图的优化 1 gtsam简介 gtsam是最近几年火起来的一个优化库 GTSAM xff08 Georgia Tech Smoothing a
  • 从零开始学定位 --- kaist数据集体验

    1 Kaist数据集简介 选择数据集选择了好几天 xff0c 最终选择了kaist数据集 xff0c 这个数据集中有 轮速计 xff0c imu gps 16线雷达 xff0c 这些传感器满足了我认为多传感器融合定位的需要 简要介绍一下Ka
  • 从零开始学定位 --- 使用kaist数据集进行LIO-SAM建图

    之前的文章只是将数据的雷达在rviz中进行可视化了 xff0c 并没有实际用起来 这篇文章将使用Kaist Urban08 数据使用LIO SAM进行三维点云地图的构建 1 clone 工程 仓库的地址是 https github com
  • 我的2048天创作纪念日

    距离发布第一篇博客竟然已经2048天了 不知不觉都已经这么长时间了啊 xff0c 真是岁月不饶人啊 随想 5年的时间 xff0c 这5年经历了硕士时期 xff0c 经历了毕业之后的第一份工作 xff0c 第二份工作 xff0c 第三份工作
  • 基于粒子滤波的SLAM(GMapping)算法分析

    本文是 Improved Techniques for Grid Mapping with Rao Blackwellized Particle Filters 的大致翻译 xff0c 难免有不通顺与错误的地方 xff0c 如有错误请指出
  • tf之static_transform_publisher

    tf xff1a transform xff0c ROS中管理3D坐标系变换的工具 只要告诉tf两个相关联坐标系的坐标变换信息 xff0c tf会帮你一直记录这个两个坐标系的坐标变换 xff0c 即使两个坐标系处于运动中 1 tf的命令行用
  • sensor_msgs/PointCloud2 Message

    sensor msgs PointCloud2 Message File sensor msgs PointCloud2 msg Raw Message Definition This message holds a collection
  • 安卓平台及windows平台上基于Gazebo仿真器的px4遥控控制

    这里写自定义目录标题 安卓平台及windows平台上基于Gazebo仿真器的px4遥控控制数据链路描述安卓平台简介安卓平台四旋翼无人机控制安卓平台固定翼无人机控制安卓平台无人车控制安卓遥控器实物控制 桌面平台遥控图形界面桌面平台四旋翼无人机
  • sitl_gazebo,px4模型matlab接口分析,gazebo与matlab联合仿真

    最近在使用matlab建立四旋翼控制程序 xff0c 奈何没有好的可视化仿真软件 xff0c 便想起px4的gazebo仿真环境 xff0c 使用matlab连接px4底层通信模型 xff0c 实现matlab在软件层面的可视化仿真 Gaz
  • 【体验】ESP32-CAM可能是最便宜的“监控”方案,ESP32-CAM程序下载调试

    生活新装备 NEW EQUIPMENT FOR LIFE 抱着试一试的心里 xff0c 买了ESP32 CAM xff0c xff08 你别说 还真对得起 我和RMB xff0c 看下边 xff0c 看下边 xff09 xff1a 当年玩S
  • 【树莓派】树莓派SD卡系统镜像系统备份方法

    微信关注 DLGG创客DIY 设为 星标 xff0c 重磅干货 xff0c 第一时间送达 先感谢漂移菌的技术支持 耐心 细致的帮我解决了一个困扰我很久的问题 树莓派系统备份问题 问题的提出 xff1a 树莓派各种版本系统 xff0c 各种软
  • 【笔记】可能是唯一能让天猫精灵方糖播放本地音乐的智能方案

    微信关注公众号 DLGG创客DIY 设为 星标 xff0c 重磅干货 xff0c 第一时间送达 前言 如上图所示 xff0c 我家也有个同款的天猫精灵方糖 xff0c 买了 xff08 好像是个奖品 xff09 好几年了 xff0c 利用率
  • C++做题网站

    今天小编带大家介绍一下我平时用的C 43 43 做题网站 1 洛谷 平时我发题解一般是选自这个网站 传送链接 xff1a 洛谷 2 黑猫OJ 里面的题很好 传送链接 xff1a 黑猫OJ 3 图灵编程OJ 我最开始用的做题网站 传送链接 x
  • ROS系列:第三章(二)

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