使用自定义消息(C++)
使用流程
1. 消息依赖配置
在开发过程种,自定义消息是以一个package存在的,其他package需要用到这个自定义消息的package,是需要添加依赖的。
package.xml依赖配置
来到package.xml
中,添加如下:
| <build_depend>demo_msgs</build_depend>
<build_export_depend>demo_msgs</build_export_depend>
<exec_depend>demo_msgs</exec_depend>
|
CMakeLists.txt依赖配置
来到CMakeLists.txt
文件中,找到find_package
,添加demo_msgs
自定义消息依赖,添加结果如下:
| find_package(catkin REQUIRED COMPONENTS
roscpp
rosmsg
rospy
demo_msgs
)
|
2. 引入依赖
| #include "demo_msgs/Student"
|
3. 构建消息
| demo_msgs::Student stu;
stu.name = "itheima";
stu.age = 13;
|
Tip
消息依赖加入后,具体类型是demo_msgs::Student
使用注意点
当自定义消息编译完成成功后,要按照以下步骤执行:
- 关闭
clion
- 启动clion的命令行, 需要重新
source devel/setup.bash
- 重启
clion
Warning
在使用过程中,如果仍然无法include
自定义的消息,重复以上操作
完整示例代码
Publisher实现代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 | #include <iostream>
#include "ros/ros.h"
#include "demo_msgs/Student.h"
using namespace std;
int main(int argc, char **argv) {
// 创建节点
string nodeName = "my_publisher1";
ros::init(argc, argv, nodeName);
ros::NodeHandle node;
//通过节点创建发布者
string topicName = "my_topic";
const ros::Publisher &publisher = node.advertise<demo_msgs::Student>(topicName, 1000);
int index = 0;
ros::Rate rate(1);
while (ros::ok()) {
//通过publisher发布消息
demo_msgs::Student msg;
msg.name = "name-" + to_string(index);
msg.age = index;
publisher.publish(msg);
index++;
rate.sleep();
}
ros::spin();
return 0;
}
|
Subscriber实现代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 | #include <iostream>
#include "ros/ros.h"
#include "demo_msgs/Student.h"
using namespace std;
void callback(const demo_msgs::Student::ConstPtr &message) {
cout << message->name << endl;
cout << message->age << endl;
cout << "-----------------------" << endl;
}
int main(int argc, char **argv) {
// 创建节点
string nodeName = "my_subscriber1";
ros::init(argc, argv, nodeName);
ros::NodeHandle node;
//创建订阅者
string topicName = "my_topic";
const ros::Subscriber &subscriber = node.subscribe(topicName, 1000, callback);
ros::spin();
return 0;
}
|