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
- 更改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>
![](https://www.geediy.net/wp-content/uploads/2024/05/image-124.png)
3. 更改CMakeList.txt文件
message_generation 包也是编译该软件包时的依赖包,需要在find_package()函数中指明。
更改find_package()函数:
![](https://www.geediy.net/wp-content/uploads/2024/05/image-125.png)
更改catkin_package()函数:
在CATKIN_DEPENDS后面添加运行依赖项 message_runtime:
![](https://www.geediy.net/wp-content/uploads/2024/05/image-127.png)
指定需要转换的msg文件
官网说手动添加msg文件以后需要让CMake知道在什么时候重新配置项目,所以添加generate_messages()函数
![](https://www.geediy.net/wp-content/uploads/2024/05/image-128.png)
编译
回到catkin_ws目录下:
catkin_make
编译之后就会生成Num.h头文件,所在目录如下:
![](https://www.geediy.net/wp-content/uploads/2024/05/image-129.png)
测试:
rosmsg show my_package/Num
![](https://www.geediy.net/wp-content/uploads/2024/05/image-130.png)
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})