ros中自定义msg消息并用其他功能包调用

注:本篇文章仅作为学习笔记,如有侵权,请联系删除。

目录

一、创建msg消息

1.在src目录创建自定义的msg功能包。

2.修改自定义msg功能包内的package.xml文件

3.修改自定义msg功能包内的CMakeLists.txt

4.编译自定义msg功能包

二、同一工作空间下调用不同功能包内的自定义msg消息文件

1.在B功能包中添加自定义msg的头文件

2.在B功能包中调用时借口

3.修改B功能包的package.xml文件

4.修改CMakeLists.txt文件


例如我们想要在功能包B去订阅功能包A中自定义msg消息:A.msg

一、创建msg消息

首先我们先创建自定义的话题消息A.msg。

1.在src目录创建自定义的msg功能包。

# 在src目录下打开终端,输入:
catkin_create_pkg 功能包名字 roscpp rospy std_msgs

# 在刚刚创建的功能包文件夹内创建一个msg文件目录,并在msg文件内创建要定义的.msg文件(A.msg)
#int8, int16, int32, int64 (或者无符号类型: uint*)
#float32, float64
#string
#time, duration
#other msg files
#variable-length array[] and fixed-length array[C]
#ROS中还有一种特殊类型:Header,标头包含时间戳和ROS中常用的坐标帧信息

2.修改自定义msg功能包内的package.xml文件

#添加编译依赖与执行依赖
  message_generation
  message_runtime

3.修改自定义msg功能包内的CMakeLists.txt

# 1.在find_package中添加message_generation
find_package(catkin REQUIRED COMPONENTS
  ...
  message_generation
)

# 2.add_message_files中添加自定义的msg文件
add_message_files(
        #DIRECTORY msg
        FILES
        A.msg

)

# 3.生成消息时依赖于 std_msgs
generate_messages(
        DEPENDENCIES
        std_msgs
)

# 4.执行时依赖
catkin_package(
  CATKIN_DEPENDS std_msgs message_runtime
)

# 5.头文件目录
include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)

4.编译自定义msg功能包

catkin_make -DCATKIN_WHITELIST_PACKAGES=" 包名"

若指定编译多个功能包,中间用";"分开

catkin_make -DCATKIN_WHITELIST_PACKAGES="A;B",

使用rosmsg show "定义msg文件名",可以显示表示定义成功,编译成功后生成的msg头文件目录为(.../工作空间/devel/include/包名/xxx.h)或(.../工作空间/devel/lib/python/dist-packages/包名/msg)

二、同一工作空间下调用不同功能包内的自定义msg消息文件

1.在B功能包中添加自定义msg的头文件

//c++
#include    //自建一个消息类型, 第一个A为自定义msg文件的功能包名字,第二个A为自定义msg文件的名字
#python
from A.msg import A        #第一个A为自定义msg文件的功能包名字,第二个A为自动的msg文件名字

2.在B功能包中调用时接口

//c++
//第一个A为自定义msg文件的功能包名字,第二个A为自定义msg文件名
A::A a;
const A::A::ConstPtr& a
#python
#A为自定义msg文件名字
a = A()

3.修改B功能包的package.xml文件

#添加有关A的依,其中A为功能包名子
 A
 
 A
 
 A

4.修改CMakeLists.txt文件

1.
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
  A   # 添加被引用消息的功能包的名字
)

2.取消注释
include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)

你可能感兴趣的:(自动驾驶,人工智能,机器学习)