【ROS学习笔记10】ROS中配置自定义Cpp头文件和导入自定义Python库

2023-05-16

【ROS学习笔记10】ROS中配置自定义Cpp头文件和导入自定义Python库

文章目录

  • 【ROS学习笔记10】ROS中配置自定义Cpp头文件和导入自定义Python库
    • 一、ROS中的头文件和源文件
      • 1.1 自定义头文件调用
      • 1.2 自定义源文件调用
    • 二、Python模块的导入
    • Reference

写在前面,本系列笔记参考的是AutoLabor的教程,具体项目地址在 这里


一、ROS中的头文件和源文件

本节主要介绍ROS的C++实现中,如何使用头文件与源文件的方式封装代码,具体内容如下:

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

在ROS中关于头文件的使用,核心内容在于CMakeLists.txt文件的配置,不同的封装方式,配置上也有差异。

1.1 自定义头文件调用

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

流程:

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

1、头文件

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

#ifndef _HELLO_H
#define _HELLO_H

namespace hello_ns{

class HelloPub {

public:
    void run();
};

}

#endif

注意:

在VsCode中,为了后续包含头文件时不抛出异常,请配置.vscode下的c_cpp_properties.jsonincludepath属性。

"/home/用户/工作空间/src/功能包/include/**"

2、可执行文件

在src目录下新建文件:hello.cpp,示例内容如下:

#include "ros/ros.h"
#include "test_head/hello.h"

namespace 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. 编写头文件;
  2. 编写源文件;
  3. 编写可执行文件;
  4. 编辑配置文件并执行。

1、头文件

头文件的设置和3.2.1类似,在功能包下的include/功能包名目录下,新建头文件haha.h,示例内容如下:

#ifndef _HAHA_H
#define _HAHA_H

namespace hello_ns {

class My {

public:
    void run();

};

}

#endif

2、源文件

在src目录下新建文件:haha.cpp,示例内容如下:

#include "test_head_src/haha.h"
#include "ros/ros.h"

namespace 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.h"

int 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(head
  include/test_head_src/haha.h
  src/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_head
  head
  ${catkin_LIBRARIES}
)

结果示例:


二、Python模块的导入

与C++类似的,在Python中导入其他模块时,也需要相关处理。

**需求:**首先新建一个Python文件A,再创建Python文件UseA,在UseA中导入A并调用A的实现。

实现:

  1. 新建两个Python文件,使用 import 实现导入关系;
  2. 添加可执行权限、编辑配置文件并执行UseA。

1、新建两个Python文件并使用import导入

文件A实现(包含一个变量)

#! /usr/bin/env python
num = 1000

文件B核心实现

import os
import sys

path = 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

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

【ROS学习笔记10】ROS中配置自定义Cpp头文件和导入自定义Python库 的相关文章

随机推荐

  • 内部函数和外部函数

    内部函数 xff08 静态函数 xff09 xff1a 只能被本文件中其它函数调用 定义内部函数时 xff0c 在函数名核函数类型的前面加上static static int fun int a int b fun是内部函数 xff0c 不
  • C语言文件操作函数fwrite导致写入文件的内容乱码的问题解决方案

    fwrite 函数用来向文件中写入块数据 xff0c 它的原型为 xff1a size t fwrite void ptr size t size size t count FILE fp 参数说明 xff1a ptr 为内存区块的指针 x
  • 通信协议(三)——IIC协议

    1 基础知识 1 1 概念 IIC通讯协议 Inter xff0d Integrated Circuit xff0c 也常被写作I2C 是由 Philips 公司开发的一种简单 双向二线制同步串行总线 xff0c 只需要两根线即可在连接于总
  • linux经典面试题----开机启动流程

    linux开机启动流程 1 xff0c power on 开机 2 xff0c POST开机自检 由主板上的BIOS程序来完成 3 xff0c BIOS对硬件进行检测 BIOS xff1a 基本输入输出系统 xff0c 是个人电脑启动时加载
  • 高可用和负载均衡学习笔记

    负载均衡 LB xff1a load balancer 化整为零 高可用 xff08 HA xff09 xff1a High Avilibility 互相备份 xff0c 互相替换 防止单点故障 好处 xff1a 防止单点故障 xff0c
  • 浅谈列表和元组的区别

    常见面试题 列表 xff08 list xff09 和元组 xff08 tuple xff09 的区别和使用场景 一 相同点 列表和元组都是序列化类型的容器对象 xff0c 可以存放任何类型的数据 xff0c 支持切片和迭代 二 不同点 列
  • 详解三次握手

    简述三次握手的过程 应用场景 xff1a 当客户端向服务器端发送数据之前 xff0c 需要建立一个TCP连接 第一次握手 xff1a 客户端向服务器端发送一个SYN请求包 xff08 序列号syn为x xff09 并进入SYN SENT状态
  • win10 切换Fn热键

    切换Fn热键 新买的联想小新 xff0c 到手发现F1 F12的使用需要热键Fn的配合 xff0c 这对一个开发人员来说 xff0c 是件麻烦事儿 xff0c 解决方法如下 xff1a 重启电脑 xff0c Fn 43 F2 不停戳 进入B
  • LAMP和LNMP详解,面试必备

    LAMP简介 LAMP 是指一个集成开发环境 一般用来建立web应用平台 L Linux A Apache M Mysql P PHP或指Perl或指Python 1 Linux xff1a 是一个性能稳定的多用户网络操作系统 xff0c
  • 系统运行缓慢该怎么排查

    对于系统运行缓慢问题 xff0c 要分情况讨论 xff1a 如果该问题导致线上系统不可用 出现这种情况可能的原因主要有两种 xff1a 代码中某个位置读取数据量较大 xff0c 导致系统内存耗尽 xff0c 从而导致 Full GC 次数过
  • 编译安装Nginx步骤详解

    编译安装Nginx步骤详解 1 xff0c 去Nginx官方网站下载源码包并解压 curl O 或wget 跟下载链接 tar xf 解压 2 xff0c 进入nginx解压后的目录执行 configure configure prefix
  • python2和python3的差异,超详细总结

    python2与python3的区别 1 xff0c 市场差异 python2 xff1a 官方通知python2 2020开始不再维护 xff0c 但企业很多代码都是python2 python2有很大的用户基群故会出现历史遗留问题 xf
  • mysql学习笔记--主从复制

    主从复制简介 首先需要两台机器 xff0c 并且主从复制的前提是需要先做数据同步 xff0c 先在我的master机器上用mysqldump 将所有的数据备份 xff0c 然后scp传输到我的slave机器上 xff0c 然后在slave机
  • mysql学习笔记---sql语句

    基本select查询 1 xff0c 设置系统变量 64 64 sql mode xff0c 有一些限制规则 xff0c 日期不能为0 xff0c 除数不能为0 xff0c 自增不能从0开始 xff0c 授权用户密码不能为空 64 64 s
  • minikube 学习笔记 -- deployment 详解

    minikube 是什么 minikube 可以理解为一个可以运行在本地的 xff0c 单节点的 Kubernetes xff0c 我们可以通过在里面创建 Pods 来创建对应的服务 kubernetes 是什么 Kubernetes 是容
  • minikube 学习笔记 -- service && HPA 详解

    按照下面的文档完成 service 实验 https www cnblogs com backups p k8s 1 html service Service 的作用 xff1a 提供服务的自动发现和负载均衡 因为 Pod 随时会被销毁和重
  • ROS :process has died

    项目场景 xff1a ROS编译报错 问题描述 xff1a 有的时候自己在ROS的框架下写代码会遇到如下的问题 xff1a 以前遇到这种问题基本上心里就觉得凉了 xff0c 因为这种编译之后的运行报错不好定位位置 xff0c 所以之前遇到这
  • PX4无人机-Gazebo仿真实现移动物体的跟踪

    原文链接PX4无人机 Gazebo仿真实现移动物体的跟踪末尾有演示视频 这个学期我们有一个智能机器人系统的课设 xff0c 我们组分配到的题目是 仿真环境下使用无人机及相机跟踪移动物体 xff0c 本文主要记录完成该课设的步骤以及内容 我们
  • nohup 和>/dev/null 2>&1

    一 用途 xff1a nohup表示永久运行 amp 表示后台运行 在应用Unix Linux时 xff0c 我们一般想让某个程序在后台运行 xff0c nohup start mysql sh amp 该命令的一般形式为 xff1a no
  • 【ROS学习笔记10】ROS中配置自定义Cpp头文件和导入自定义Python库

    ROS学习笔记10 ROS中配置自定义Cpp头文件和导入自定义Python库 文章目录 ROS学习笔记10 ROS中配置自定义Cpp头文件和导入自定义Python库一 ROS中的头文件和源文件1 1 自定义头文件调用1 2 自定义源文件调用