创建src目录
$ mkdir ros-demo
$ cd ros-demo/
$ mkdir src
$ cd src/
创建工程
在src目录下执行下面的命令,生成message_interfaces文件夹,我们可以在这个文件夹内编写自己的自定义消息
$ ros2 pkg create --build-type ament_cmake message_interfaces
整理文件夹
删除现有的include和src文件夹,并创建msg和srv文件夹,msg用于存放话题的自定义消息,srv用于存放服务的自定义消息
$ ls
CMakeLists.txt include package.xml src
$ rm -rf include/
$ rm -rf src/
$ mkdir msg
$ mkdir srv
$ ls
CMakeLists.txt msg package.xml srv
编写自定义消息
消息文件名一定要大写开头,不然无法编译通过
在msg文件夹添加Hello.msg文件,内容如下
string msg
在srv文件夹添加Add.srv文件,内容如下
int64 a
int64 b
int64 c
---
int64 sum
修改CMakeLists.txt文件
需要把需要生成的消息添加到文件中
添加的内容如下
find_package(ament_cmake REQUIRED)
find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/Hello.msg"
"srv/Add.srv"
)
修改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>
单独编译
如果需要编译指定包,可通过下面的方式
~/code/ros-demo$ colcon build --packages-select message_interfaces
Starting >>> message_interfaces
Finished <<< message_interfaces [5.24s]
Summary: 1 package finished [5.37s]
统一编译
~/code/ros-demo$ colcon build
Starting >>> cpp_pubsub
Starting >>> message_interfaces
Finished <<< cpp_pubsub [0.27s]
Finished <<< message_interfaces [0.60s]
Summary: 2 packages finished [0.75s]
结果会在install目录下生成对应的头文件
查看自定义消息
使用ros2 interface show命令可查看消息的详细信息
$ . install/setup.bash
$ ros2 interface show message_interfaces/msg/Hello
string msg
$ ros2 interface show message_interfaces/srv/Add
int64 a
int64 b
int64 c
---
int64 sum
增加代码提示
增加生成自定义消息的头文件路径
{
"configurations": [
{
"browse": {
"databaseFilename": "",
"limitSymbolsToIncludedHeaders": true
},
"includePath": [
"/opt/ros/foxy/include/**",
"/usr/include/**",
"${workspaceFolder}/install/message_interfaces/include"
],
"name": "ROS",
"intelliSenseMode": "gcc-x64",
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu11",
"cppStandard": "gnu++14"
}
],
"version": 4
}
修改代码
https://blog.csdn.net/wei242425445/article/details/115267172?spm=1001.2014.3001.5501
修改上文的cpp_pubsub工程
- 修改pubnode.h文件
- 修改pubnode.cpp文件
- 修改subnode.h文件
- 修改subnode.cpp文件
- 修改CMakeLists.txt文件
- 修改package.xml文件
编译与运行
单独编译
$ colcon build --packages-select cpp_pubsub
统一编译
~/code/ros-demo$ colcon build
运行
$ ros2 run cpp_pubsub publisher
$ ros2 run cpp_pubsub subscriber