ROS学习之自定义msg类型

1. 创建msg文件

cd ~/catkin_ws/src/my_package

mkdir msg

echo "string first_name 
string last_name 
uint8 age 
uint32 score" > msg/Num.msg

2. 更改package.xml文件

软件包编译过程中会根据msg 文件生成其它语言(C++,Python)的源代码,编译该软件包时会用到ros自带的

message_generation包,而在运行使用该msg的节点中又会使用到ros自带的message_runtime包,所以需要在package.xml

文件中添加下面两条语句:

  <build_depend>message_generation</build_depend>
  <run_depend>message_runtime</run_depend>

3. 更改CMakeList.txt文件

message_generation 包也是编译该软件包时的依赖包,需要在find_package()函数中指明。

更改find_package()函数:


更改catkin_package()函数:

在CATKIN_DEPENDS后面添加运行依赖项 message_runtime:


指定需要转换的msg文件

官网说手动添加msg文件以后需要让CMake知道在什么时候重新配置项目,所以添加generate_messages()函数


编译

回到catkin_ws目录下:

catkin_make

编译之后就会生成Num.h头文件,所在目录如下:


测试:
rosmsg show my_package/Num


CMakeList.txt文件内容

cmake_minimum_required(VERSION 2.8.3)

project(my_package)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  #添加需要依赖的message_generation包
  message_generation
)

#指定需要转换的msg文件
add_message_files(FILES  Num.msg)
#只有调用了下面的函数最后才会生成 Num.h 文件
generate_messages() 


catkin_package(
INCLUDE_DIRS include
LIBRARIES my_package
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime #添加运行时依赖包message_runtime
DEPENDS system_lib
)

include_directories(
#  include
  ${catkin_INCLUDE_DIRS}
)

add_executable(publisher_Node src/publisher.cpp)
target_link_libraries(publisher_Node ${catkin_LIBRARIES})

add_executable(subscriber_Node src/subscriber.cpp)
target_link_libraries(subscriber_Node ${catkin_LIBRARIES})

猜你喜欢

转载自blog.csdn.net/wanzew/article/details/79984801
今日推荐