首页 > 其他分享 >ROS 同一工作空间下两个功能包如何相互调用

ROS 同一工作空间下两个功能包如何相互调用

时间:2024-03-04 20:01:28浏览次数:14  
标签:src 功能 调用 catkin 同一 package ROS pack

如何在同一工作空间下调用另一ros功能包

本项目有两个ros功能包,a_pack和b_pack,a_pack调用了b_pack的函数,本项目为了展示如何配置b_pack和a_pack功能包,让a_pack可以调用b_pack。

在c++编程中,常见用法是将b_pack编译成库文件,然后b_pack对外提供头文件,a_pack对b_pack的调用就是通过引用头文件和库文件完成的。这是c++编程的基本功,见我的另一个github仓库,使用cmake实现。

本项目给出在ROS环境下如何把功能包封装成库文件,以及如何给别人调用。

总结:

  1. 创建b_pack功能包时,CMake编译时配置catkin_package(),里面说明了该功能包导出的库文件和头文件。
  2. a_pack调用时b_pack时需要声明依赖,分别在a_pack的package.xml和CMakeLists.txt中声明。

详情请见下面的两个配置。

配置b_pack

CMakeLists.txt中的配置如下

# 这里必须配置,说明b_pack功能包中,导出的库和头文件。
catkin_package(
 INCLUDE_DIRS include #a_pack功能包调用b_pack寻找的include文件夹
 LIBRARIES b_pack #如果这里没有写的库函数,a_pack功能包就无法使用,即使b_pack功能包编译了该库
)

# 声明b_pack库文件的头文件的位置
include_directories(
  include 
  ${catkin_INCLUDE_DIRS}
)
# 添加库,如果该库有依赖的库,还需要添加依赖
add_library(b_pack src/b.cpp)

配置a_pack

package.xml

<!--给功能包a_pack添加对b_pack功能包的引用-->
<build_depend>b_pack</build_depend>
<build_export_depend>b_pack</build_export_depend>
<exec_depend>b_pack</exec_depend>

CMakeLists.txt

find_package(catkin REQUIRED COMPONENTS
  b_pack #必须有
)

add_executable(a_node src/a_node.cpp src/a.cpp)
target_link_libraries(a_node
  ${catkin_LIBRARIES}
  b_pack #必须有
)

使用方法

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/LadissonLai/call_custom_package.git
cd ~/catkin_ws
catkin_make
source ./devel/setup.bash
rosrun a_pack a_node

完整项目

完整项目请见github仓库.

标签:src,功能,调用,catkin,同一,package,ROS,pack
From: https://www.cnblogs.com/LadissonLai/p/18052528

相关文章

  • swfit 调用 自带的地图
    importMapKitimportSwiftUIimportCoreLocationclassViewController:UIViewController,MKMapViewDelegate{varmainMapView:MKMapView!letlocationManager:CLLocationManager=CLLocationManager()overridefuncviewDidLoad(){......
  • 微软Win11重要更新:支持PC无线调用手机、平板摄像头
    近日微软官方宣布,Windows11预览版现已可以调用安卓手机或平板电脑的摄像头功能。用户可以将移动设备的高品质摄像头无线应用到PC上,体验更加灵活、方便的视频体验。据介绍,Windows11电脑上的所有视频程序,均可以使用手机或者平板的摄像头,同时还支持在前置和后置摄像头之间切换。......
  • 使用setmetatable和__call元方法来实现根据字符串名字调用对应的函数
    cc.lualocalCMD={}--定义两个函数functionCMD.func1()print("Function1called")endfunctionCMD.func2()print("Function2called")endreturnCMD test.lualocalfunctions=require"cc"--设置表的元表和__call元方法se......
  • 了解JavaScript 调用堆栈
    每个javascript执行环境都有一个调用堆栈。该调用堆栈用于跟踪函数调用。堆栈是一种后进先出(LIFO)的简单数据结构。我们可以从堆栈中取出的顶部元素是我们压入堆栈的最后一个元素。对于JavaScript调用堆栈,这些元素是函数引用。由于JavaScript是单线程的,因此只有一个堆......
  • 初识IO ,系统调用和库函数
    IO知识最先接触的IO#include<stdio.h>stdio标准的输入输出///标准IOprintf/scanf就是标准的IO接口(API)什么是标准IO什么是文件IO文件IO是系统调用标准IO是库函数什么是系统调用什么是库函数系统调用(posix):用户空间(0-3G)进入内核空间(4G)一次就叫做一次......
  • C++ 函数调用运算符 () 重载
    函数调用运算符()可以被重载用于类的对象。当重载()时,您不是创造了一种新的调用函数的方式,相反地,这是创建一个可以传递任意数目参数的运算符函数。1#include<iostream>2usingnamespacestd;3classDistance4{5private:6intfeet;/......
  • C# 调用Web Api post提交json格式
    转载:https://blog.csdn.net/q_17600689511/article/details/82735172?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-2-82735172-blog-86551903.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=di......
  • c++多线程按行读取同一个每行长度不规则文件
    对于非常大的比如上百G的大文件读取,单线程读是非常非常慢的,需要考虑用多线程读,多个线程读同一个文件时不用加锁的,每个线程打开一个独立的文件句柄多线程读同一个文件实现思路思路1先打开一个文件句柄,获取整个文件大小file_size确定要采用线程读取的部分大小read_size和......
  • 函数调用
    题目https://www.luogu.com.cn/problem/P7077这题给我好搞。不过思路精巧。\(Solution\)首先我们考虑一个比较简单的问题。称函数1是加法,函数2是乘法,函数3是调用。首先,要转换思路。原先暴力模拟,考虑函数顺序,\(O(Qn)\),必炸。我们考虑统计每个函数对答案的贡献。这样是\(O(n......
  • C语言递归调用子函数
    示例代码1:10进制转16进制查看代码 #include<stdio.h>voiddec2hex(intn){ if(n>15) dec2hex(n/16); if(n%16<10) printf("%c",n%16+'0'); else printf("%c",n%16+55); //printf("%c",n%16<10?n%16+'......