ROS2-004-通信机制:话题通信Extra:如何实现自定义接口消息
简介
实现自定义话题接口消息的流程与在功能包中编写可执行程序的流程相似,其主要步骤如下:
- 创建并编写
.msg
文件; - 编辑配置文件;
- 编译;
- 测试。
因此,我们现在会在之前创建的接口功能包 base_interfaces_demo
里,尝试编写一个 .msg
文件。该文件中包含学生的姓名、年龄、身高等字段。
创建并编辑 .msg 文件
在功能包 base_interfaces_demo
下新建 msg
文件夹,msg
文件夹下新建 Student.msg
文件,文件中输入如下内容:
string name
int32 age
float64 height
编辑配置文件
1. package.xml
文件
在package.xml中需要添加一些依赖包,具体内容如下:
<!-- 编译依赖 -->
<build_depend>rosidl_default_generators</build_depend>
<!-- 执行依赖 -->
<exec_depend>rosidl_default_runtime</exec_depend>
<!-- 声明当前包所属的功能包组 -->
<member_of_group>rosidl_interface_packages</member_of_group>
2. CMakeLists.txt
文件
为了将.msg文件转换成对应的C++和Python代码,还需要在CMakeLists.txt中添加如下配置:
find_package(rosidl_default_generators REQUIRED)
# 为接口 文件生成源代码
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/Student.msg"
)
编译
终端中进入当前工作空间,编译功能包:
colcon build --packages-select base_interfaces_demo
测试
编译完成之后,在工作空间下的install目录下将生成Student.msg文件对应的C++和Python文件,我们也可以在终端下进入工作空间,通过如下命令查看文件定义以及编译是否正常:
. install/setup.bash
ros2 interface show base_interfaces_demo/msg/Student
到此,创建工作结束。
包含自定义接口文件时可能会报错
创建工作结束后,你会需要在 C++
文件中包含自定义消息相关头文件。在那时,VSCode可能会抛出异常。你可以打开 VSCode 中的 c_cpp_properties.json
文件,在文件中的 includePath
属性下添加一行路径:
"${workspaceFolder}/install/base_interfaces_demo/include/**"
添加完毕后,包含相关头文件时,异常就不会被抛出。 其他接口文件或接口包的使用也与此同理。
Python文件导包自定义
Python文件中导入自定义消息相关的包时,为了方便使用,可以配置 VSCode
中的 settings.json
文件,在文件中的 python.autoComplete.extraPaths
和 python.analysis.extraPaths
属性下添加一行:
"${workspaceFolder}/install/base_interfaces_demo/lib/python3.12/site-packages"
添加完毕后,代码便可以高亮显示且可以自动补齐,其他接口文件或接口包的使用也与此同理.
(注意:这里所使用的 ROS2 版本为 Jazzy,Python 为 3.12,因此路径结构不一定一致,请依据文件项目树自行修改创建)
提示
如果你是从 ROS2-004-通信机制:话题通信-分支贰-自定义消息接口 来的, 可以从这里导航回去。