ROS消息自定义、调用及问题解决

news/2025/2/22 4:47:27/

1、自定义话题信息

1、创建工作空间及功能包

mkdir catkin_ws
cd src
catkin_create_pkg test_msgs roscpp rospy std_msgs

2、创建msg文件夹及文件

cd test_msgs
mkdir msg 
cd msg
vim test.msg

3、添加内容

eg:
string name
float32 percent
uint32 time

4、修改pcckage中的相关文件
a: 修改package.xml文件,添加编译依赖与执行依赖

<build_depend>message_generation</build_depend> //编译依赖
<exec_depend>message_runtime</exec_depend> //执行依赖

b: 在CMakeLists.txt中添加编译选项,4处(可不添加、直接在原内容中直接修改)

1、在find_package中添加message_generation
find_package( catkin REQUIRED COMPONENTS ...message_generation)2、在add_message_files添加自定义的msg文件
add_message_files(FILES test.msg)3、生成消息时依赖于 std_msgs
generate_messages(DEPENDENCIES std_msgs)4、执行时依赖
catkin_package( CATKIN_DEPENDS std_msgs message_runtime)

5、编译

catkin_make

编译出错:
问题1:

CMake Error at /home/.../cmake/test_msgs-genmsg.cmake:3 (message):Could not find messages which'/home/.../msg/test.msg' depends on.  Did you forget to specify generate_messages(DEPENDENCIES ...)?Cannot locate message [double] in package [test_msgs] with paths[['/home/..../test_msgs/msg']]

解决:test.msg 文件中数据类型出错 double改为float32

问题2:

CMake Error at /opt/ros/..../catkin_package.cmake:224(message):catkin_package() DEPENDS on the catkin package ‘XXX’ which must therefore be listed as a run dependency in the package.xml

依赖错误:添加了包依赖,而未添加包运行依赖,

<build_export_depend> PACKAGE_NAME </build_export_depend>
<exec_depend> PACKAGE_NAME </exec_depend>

6、信息查看

catkin_make
source devel/setup.bash
rosmsg show test_msgs/test

2、自定义消息调用

其他包调用自定义msg
A:在test_msgs包内的节点调用test_msgs/Test类型,在.cpp文件中如下调用即可:

#1 c++
#include <test_msgs/test.h>
test_msgs::test msg;
# 2 python 
from test.msg import test
a=test()

B、其他文件中的包调用test_msgs/Test,在文件中编写以上代码同时需更改package.xmlCMakeLists.txt文件
1)修改package.xml文件,将上述消息类型的数据包加入

<build_depend>roscpp</build_depend>
<exec_depend>roscpp</exec_depend><build_depend>test_msgs</build_depend>
<exec_depend>test_msgs</exec_depend>

2)更改CMakeLists.txt
一是find_package中需要声明查找包含该消息类型的包;
二是add_dependencies要注明该消息的依赖

find_package(catkin REQUIRED COMPONENTSroscppstd_msgstest_msgs
)
add_dependencies(test1 test_msgs_gencpp)#调用同一工作空间的自定义消息类型时注明依赖关系,防止发生头文件找不到的报错

注意::如果缺少add_dependencies中对test_msgs_gencpp的依赖声明,在编译的时候如果先编译test包再编译test_msgs包则会出现如下报错(ROS工作空间各个软件包的编译顺序是随机的),因为头文件test_msgs/Test.h还未生成

fatal error: test_msgs/Test.h: 没有那个文件或目录#include "test_msgs/Test.h"

http://www.ppmy.cn/news/22652.html

相关文章

【Linux】线程安全(万字详解)

&#x1f387;Linux&#xff1a; 博客主页&#xff1a;一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 看似不起波澜的日复一日&#xff0c;一定会在某一天让你看见坚持…

深度学习算法工程师——CV、NLP面试经验汇总

面试流程 面试的一般流程&#xff1a; https://github.com/amusi/AI-Job 资料参考 林轩田视频&#xff08;机器学习基石、机器学习技法&#xff09; 李航《统计学习方法》 CS231n 剑指Offer LeetCode 算法理论基础知识应知应会 &#xff1a; https://github.com/sladesha/R…

【C++】C++11语法 ~ lambda 表达式

&#x1f308;欢迎来到C专栏~~ lambda 表达式 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort目前状态&#xff1a;大三非科班啃C中&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的一句鸡…

实时即未来,大数据项目车联网之电子围栏分析任务设置【十九】

文章目录 1. 电子围栏分析任务设置1.1 电子围栏分析任务步骤分析1.2 电子围栏分析任务实现1.3 广播状态与实现1. 电子围栏分析任务设置 1.1 电子围栏分析任务步骤分析 电子围栏任务主要有8大步骤: 电子围栏分析任务设置、原始数据json解析、过滤异常数据 读取已存在电子围栏中…

一个简易的前端业务工具库【tj-jstools】

简介 工作两年多了&#xff0c;最近自己总结用 TypeScript 写了一个简易的前端业务工具库&#xff1a; tj-jstools 。有以下功能&#xff1a; 判断js数据类型、获取一个变量或者值的具体类型手机号脱敏、数值千分位、金额汉字大写转换数组和tree形数据互转、url参数获取并组合…

#C. gsy 的浇水计划(线段树+dp)

题目思路考的知识点是线段树dp。我们可以按照dp 4步法来一步步推导、1.dp定义dp[i]代表[1,i]区间被给出线段覆盖的最小花费2.状态转移方程根据dp定义可得当枚举到第x条线,区间为[Lx,Rx],花费为Vx时dp[Rx]min(dp[i](i (Lx - 1) ~ Rx))Vx因为当想要覆盖[1,Rx]的区间就必须在覆盖…

一文带你熟悉内核调试工具 --Ftrace

&#x1f446;&#x1f440;前言Ftrace是一个内部跟踪程序&#xff0c;旨在帮助软件开发人员和系统的设计者去发现内核内部发生了什么。它可以用于调试或分析延迟和发生在用户空间之外的性能问题。ftrace通常被认为是函数跟踪程序&#xff0c;但它实际上是由几个不同的跟踪实用…

SpringBoot第三讲

三、SpringBootMybatisPlusVue增删改查 3.1 查询 后台查询代码&#xff1a; RestController RequestMapping("/t-user") public class TUserController { ​Resourceprivate ITUserService itUserService; ​/*** 查询所有的数据*/GetMappingpublic Result getAll…