一.话题消息自定义和使用
以一个例题为例演示
使用 ROS 话题(Topic) 机制实现消息发布与订阅
要求:编写代码实现 ROS 中消息的发布与订阅: 创建一个发布者,每隔 100ms 依次发送斐波拉契数列的数字到话题/fibonacci 中;创建一个订阅者,订阅该话题,输出订阅结果。如,订阅者依次输出: 1 1 2 3 5 8 ··
1.如何自定义话题消息
·定义msg文件
#发送到话题内的数字
int32 number
在工作空间homeworkws/src内的homeworkpkg功能包内创建文件夹msg,并在msg内创建文件number.msg文件,在把上面的文件内容复制进文件。
·在package.xml中添加动态生成message的功能包依赖
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
·在CMakeLists.txt添加编译选项
1.在findpacksge(…..)结尾添加messagegeneration
2.在写有关于message内容下面添加
add_message_files(
FILES
number1.msg
)
generate_messages(
DEPENDENCIES
std_msgs
)
·在catkinpackage(….)结尾添加messageruntime
·回到工作空间的根目录下编译生成相应的头文件
cd homework_ws
catkin_make
2.创建发布者和订阅者代码实现(C++)
在工作空间homeworkws/src内的homeworkpkg功能包src内创建文件编写代码
发布者
cd homework_ws/src/homework_pkg/src
touch number_publisher.cpp
vim number_publisher.cpp
i(进入编辑模式)
写代码
esc键
:wq!(强制保存退出)
具体代码
#include<ros/ros.h>
#include"homework_pkg/number1.h"
int f(int count) {
if (count == 1 || count == 2) {
return 1;
}
else {
return f(count - 2) + f(count - 1);
}
}
int main(int argc, char** argv) {
setlocale(LC_ALL,"");
//ROS节点初始化
ros::init(argc, argv, "number_publisher");
//创建节点句柄
ros::NodeHandle n;
//创建一个publisher,发布名为/fibonacci的topic,消息类型为std_msgs::Int32,队>列长度为10
ros::Publisher fibonacci_pub = n.advertise<homework_pkg::number1>("/fibonacci", 100);
//设置循环频率
ros::Rate loop_rate(10);
int count = 1;
while (ros::ok()) {
//初始化geometry_sgs::Twist类型消息
homework_pkg::number1 msg;
msg.number = f(count);
//发布消息
fibonacci_pub.publish(msg);
ROS_INFO("%d",msg.number);
//按循环频率延时
loop_rate.sleep();
count++;
}
return 0;
}
订阅者
touch number_subscriber.cpp
vim number_subscriber.cpp
i(进入编辑模式)
写代码
esc键
:wq!(强制保存退出)
具体代码
#include<ros/ros.h>
#include"homework_pkg/number1.h"
void poseCallback(const homew

本文详细介绍了如何在ROS环境中使用话题(Topic)、服务(Service)和动作(Action)进行消息传递。首先展示了如何自定义话题消息并编写发布者和订阅者的C++代码,然后阐述了服务的定义及客户端和服务端的实现,最后提到了动作的自定义和服务器、客户端的编写,所有示例都包含了详细的代码实现和运行流程。
最低0.47元/天 解锁文章
7447

被折叠的 条评论
为什么被折叠?



